Imported Upstream version 2.23.05 upstream upstream/2.23.05
authorClinton Ebadi <clinton@neurasthenic.home.unknownlamer.org>
Tue, 8 Apr 2014 09:23:32 +0000 (05:23 -0400)
committerClinton Ebadi <clinton@neurasthenic.home.unknownlamer.org>
Tue, 8 Apr 2014 09:23:32 +0000 (05:23 -0400)
78 files changed:
CHANGES [new file with mode: 0644]
COPYING [new file with mode: 0644]
Copyright [new file with mode: 0644]
DNS.README [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
Makefile.std [new file with mode: 0644]
README [new file with mode: 0644]
README.FIRST [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
country-codes.txt [new file with mode: 0644]
dns_resolv.c [new file with mode: 0644]
dns_resolv.h [new file with mode: 0644]
graphs.c [new file with mode: 0644]
graphs.h [new file with mode: 0644]
hashtab.c [new file with mode: 0644]
hashtab.h [new file with mode: 0644]
install-sh [new file with mode: 0755]
lang.h [new file with mode: 0644]
lang/webalizer_lang.albanian [new file with mode: 0644]
lang/webalizer_lang.arabic [new file with mode: 0644]
lang/webalizer_lang.catalan [new file with mode: 0644]
lang/webalizer_lang.chinese [new file with mode: 0644]
lang/webalizer_lang.croatian [new file with mode: 0644]
lang/webalizer_lang.czech [new file with mode: 0644]
lang/webalizer_lang.danish [new file with mode: 0644]
lang/webalizer_lang.dutch [new file with mode: 0644]
lang/webalizer_lang.english [new file with mode: 0644]
lang/webalizer_lang.estonian [new file with mode: 0644]
lang/webalizer_lang.finnish [new file with mode: 0644]
lang/webalizer_lang.french [new file with mode: 0644]
lang/webalizer_lang.galician [new file with mode: 0644]
lang/webalizer_lang.german [new file with mode: 0644]
lang/webalizer_lang.greek [new file with mode: 0644]
lang/webalizer_lang.hungarian [new file with mode: 0644]
lang/webalizer_lang.icelandic [new file with mode: 0644]
lang/webalizer_lang.indonesian [new file with mode: 0644]
lang/webalizer_lang.italian [new file with mode: 0644]
lang/webalizer_lang.japanese [new file with mode: 0644]
lang/webalizer_lang.korean [new file with mode: 0644]
lang/webalizer_lang.latvian [new file with mode: 0644]
lang/webalizer_lang.lithuanian [new file with mode: 0644]
lang/webalizer_lang.malay [new file with mode: 0644]
lang/webalizer_lang.norwegian [new file with mode: 0644]
lang/webalizer_lang.polish [new file with mode: 0644]
lang/webalizer_lang.portuguese [new file with mode: 0644]
lang/webalizer_lang.portuguese_brazil [new file with mode: 0644]
lang/webalizer_lang.romanian [new file with mode: 0644]
lang/webalizer_lang.romanian-iso-8859-2 [new file with mode: 0644]
lang/webalizer_lang.russian [new file with mode: 0644]
lang/webalizer_lang.serbian [new file with mode: 0644]
lang/webalizer_lang.simplified_chinese [new file with mode: 0644]
lang/webalizer_lang.slovak [new file with mode: 0644]
lang/webalizer_lang.slovene [new file with mode: 0644]
lang/webalizer_lang.spanish [new file with mode: 0644]
lang/webalizer_lang.swedish [new file with mode: 0644]
lang/webalizer_lang.thai [new file with mode: 0644]
lang/webalizer_lang.turkish [new file with mode: 0644]
lang/webalizer_lang.ukrainian [new file with mode: 0644]
linklist.c [new file with mode: 0644]
linklist.h [new file with mode: 0644]
msfree.png [new file with mode: 0644]
output.c [new file with mode: 0644]
output.h [new file with mode: 0644]
parser.c [new file with mode: 0644]
parser.h [new file with mode: 0644]
preserve.c [new file with mode: 0644]
preserve.h [new file with mode: 0644]
sample.conf [new file with mode: 0644]
wcmgr.1 [new file with mode: 0644]
wcmgr.c [new file with mode: 0644]
webalizer.1 [new file with mode: 0644]
webalizer.LSM [new file with mode: 0644]
webalizer.c [new file with mode: 0644]
webalizer.h [new file with mode: 0644]
webalizer.png [new file with mode: 0644]
webalizer_lang.h [new symlink]

diff --git a/CHANGES b/CHANGES
new file mode 100644 (file)
index 0000000..f2a0989
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,586 @@
+--------------------------------------------------------------------
+2.23-xx changes from 2.21-xx
+--------------------------------------------------------------------
+
+Fixes:
+ o Fix sporadic eol problem with some IIS/W3C logs
+
+ o Fix compiler directive syntax error (broke some 64 bit systems)
+
+Changes/Additions:
+ o Modest speed improvements in hash table code
+
+--------------------------------------------------------------------
+2.21-xx changes from 2.20-xx
+--------------------------------------------------------------------
+
+Fixes:
+ o Added missing memory deallocation call in DNS lookup code.
+
+ o Minor fixes to configure script
+
+Changes/Additions:
+ o Added "YearTotals" config option for main index page totals
+
+ o Rename local stricmp() function to ouricmp() to prevent name
+   confilict on systems that happen to provide it already.
+
+--------------------------------------------------------------------
+2.20-xx changes from 2.01-xx
+--------------------------------------------------------------------
+
+Fixes:
+ o Fixed problem with timing totals.
+
+ o Fixed referrer linking to avoid possible xss injection.
+
+ o Fixed month change detection error that caused incorrect report
+   dates when logs had a 'gap' longer than a year.
+
+ o Fixed buffer overrun possibility in parsing code and user agent
+   mangle logic.
+
+ o Added symbolic link checks for file I/O to prevent possible
+   privilege escalation exploits.  Disallows reading from or writing
+   to any file that is a symlink.  Thanks to Julien Danjou.
+
+ o Added code to preserve the history and incremental data files in
+   the event of a crash before writing to them completely.  Thanks
+   to Robert Millan for the idea and initial code.
+
+Changes/Additions:
+ o Added native geolocation services, which fully supports both IPv4
+   and IPv6 lookups.  Adds the configuration keywords 'GeoDB' and
+   'GeoDBDatabase' along with the '-j' and '-J' command line options.
+
+ o Added 'wcmgr', "The Webalizer (DNS) Cache file Manager" to the
+   distribution to provide cache file maintenance.  See the supplied
+   man page for a description and usage information.
+
+ o Changed history code and main index page to allow for more than
+   12 months of reports to be displayed.  Added the config keywords
+   'IndexMonths' (-K command line option), 'GraphMonths' (-k command
+   line option) and 'YearHeaders' to control how index is displayed.
+
+ o Changed Berkeley DB code to use current 4.x APIs.
+
+ o Added support for bzip2 compressed log files (.bz2) as a compile
+   time option (--enable-bz2).  If enabled, bzipped files will be
+   decompressed automatically during processing.
+
+ o Added support for W3C formatted logs.  Based on code submitted
+   by Klaus Reimer.
+
+ o Added GeoIP support as compile time option (--enable-geoip). Adds
+   'GeoIP' and 'GeoIPDatabase' config keywords, '-w' and '-W'
+   command line options. (http://www.maxmind.com/)
+
+ o Added IPv6 support.  Based on initial code by Jose Carlos Meneiros
+   and modified to support Solaris and other problematic platforms.
+
+ o Added 'CacheIPs' config option to allow saving unresolved addresses
+   in the DNS cache.
+
+ o Added 'CacheTTL' config option which allows the DNS cache time to
+   live (TTL) value to be specified at run-time.
+
+ o Added 'SearchCaseI' config option to specify if search strings
+   should be treated as case insensitive or not.  The default value,
+   'yes', causes search strings to be treated as case insensitive.
+
+ o Added 'HTAccess' config option.  Allows writing a default .htaccess
+   file to the output directory.
+
+ o Added ability to display flags in the top country table.  Adds the
+   config keywords 'CountryFlags' and 'FlagDir', and -z command line
+   option.
+
+ o Added 'StripCGI' config option to configure how CGI variables on
+   the end of URLs are treated (can now be stripped or left in place).
+
+ o Added 'DefaultIndex' config option to enable/disable the use of
+   "index." as a default index name to be stripped from the end of URLs.
+
+ o Added 'TrimSquidURL' config option to allow squid log URLs to be
+   reduced in granularity by a user definable amount.  Thanks to code
+   submitted by Stuart Gall.
+
+ o Added 'OmitPage' config option (and the '-O' command line switch)
+   to prevent specified URLs from being counted as pages even if they
+   otherwise would be.  Thanks to code submitted by Adam Morton.
+
+ o Added 'IgnoreState' config option (and the -b command line switch)
+   to allow ignoring any existing incremental data file (similar to
+   the IgnoreHist/-i option).
+
+ o Changed logic to always generate summary report (index.html),
+   even if no records were processed.
+
+ o Added color support to allow changing graph colors.  Based on the
+   Webalizer-usecolor code submitted by Benoit Rouits.  Adds 11 new
+   config options, see the README file for complete descriptions.
+
+ o Added language 'lang=' specification in generated HTML files.
+   
+ o Added 'LinkReferrer' config option to allow/disallow links in the
+   top referrers table.
+
+ o Added 'PagePrefix' config option to allow URL prefix matches to
+   be counted as pages, regardless of file extension or type.  Thanks
+   to code submitted by Remco Van de Meent.
+
+ o Enabled large file support (LFS) to support logs greater than 2Gb
+   in size on systems that support LFS.  Also increased the size of
+   most internal counters to handle larger sites.
+
+ o Minor changes to generated HTML output
+
+ o Updated language files country codes for current IANA TLDs
+
+ o Changed the meaning of the -v command line switch.  It now
+   causes verbose information to be displayed at run-time
+   (Informational and Debug messages).
+
+ o Changed Group* config options to allow a quoted string for
+   the match string.  This allows spaces to be embedded in the
+   string.
+
+ o Changed log record parsing logic to allow spaces in URLs.
+
+ o Made configuration keywords, boolean configuration values
+   (yes/no), and log file types case insensitive.  Also fixed
+   defaults for invalid values to reflect documented defaults.
+
+ o Changed configure script to use --sysconfdir to specify the
+   location of the default webalizer.conf configuration file.
+   Also added support for DESTDIR during install to aid binary
+   package builds.
+
+--------------------------------------------------------------------
+2.01-xx changes from 1.30-04
+--------------------------------------------------------------------
+
+Fixes:
+ o Fix posible obscure buffer overflow bug in DNS resolver code
+
+ o Added additional extended character fixes
+
+ o Let code accept partial content response codes along with 200's
+
+ o Added code to catch blank hostnames (yes, they have been found!)
+   Will convert them into 'Unknown'
+
+ o Security fix for cross-site scripting vulnerability found by
+   Flavio Veloso (www.magnux.com).
+
+ o Fixed a TOTAL_RC off by one error, which would prevent the last
+   response code from being saved when using incremental mode.
+
+ o Fixed possible segfault condition in MangleAgent code on
+   some malformed user agent names.
+
+ o Fixed DNS to prevent hangs on blank and malformed hostnames.
+
+ o Fixed problem calculating visits.  Changed timestamps to use
+   seconds since epoch (1/1/1970) which results in more accurate
+   analysis.  Also changed normal out of sequence code to handle
+   up to 1 hour of 'slop' in the timestamps.  This changed the
+   semantics of the VisitTimeout and -m configuration options, as
+   the values are now specified in number of seconds.
+
+ o Fixed hostname lowercase problem (wasn't) when using DNS lookups.
+
+ o Fixed problem with incremental datafile which could cause a read
+   error under certain circumstances (removes control characters).
+   Also changed code to now abort on a read error.
+
+ o Fixed problem with hash table node creation where objects that
+   were exactly the maximum length would wind up leaving a garbage
+   byte at the end of the memory space allocated.  This was causing
+   some very infrequent and widely different problems.
+
+ o Fixed problem where country graph could be produced incorrectly
+   if using a non-english language and the country name overlapped
+   the pie chart.
+
+ o Found and fixed a problem with a possible 32-bit wrap around
+   problem using incremental mode on large sites.  The problem
+   would cause the KBytes data on large groups to become inaccuate.
+
+Changes/Additions:
+ o Modified configure to allow specification of the default config
+   directory.  If not given, will use /etc (/etc/webalizer.conf).
+
+ o Added DailyGraph and DailyStats configuration options to enable
+   or disable the Daily usage graph and stats table from output.
+
+ o Improved visit calculation logic to reduce 'false' counts generated
+   by external image referrals.
+
+ o Added reverse DNS lookup capability.  This adds the command
+   line switchs -D and -N, and configuration keywords "DNSCache"
+   and "DNSChildren".  See the DNS.README for additional info.
+   Based in part on code submitted by Henning P. Schmiedehausen
+   (hps@tanstaafl.de).
+
+ o Added ability to dump Sites, URLs, Referrers, User Agents,
+   Usernames and Search Strings to tab delimited files, suitable
+   for import into most database and spreadsheet programs.  The
+   location of this file may be specified using the "DumpPath"
+   configuration keyword, allowing the data to be kept someplace
+   outside the web servers document tree.  The configuration
+   keywords "DumpSites", "DumpURLs", "DumpReferrers", "DumpAgents",
+   "DumpUsers" and "DumpSearchStr"  have been added to control the
+   file dumps.  Column headers can be included in the file with
+   the "DumpHeader" keyword.  Dump filename extensions may be
+   specified using the "DumpExtension" keyword (default is .tab).
+
+ o Added username analysis, based on usernames found in the log,
+   and only available if username information is present in the
+   log (ie: http authentication or wu-ftpd xferlog).  The keywords
+   'GroupUser', 'HideUser', 'IgnoreUser', 'IncludeUser', 'AllUsers',
+   and 'TopUsers' have been added to the configuration file code.
+   This change also modified the format of the incremental data file.
+
+ o Added the ability to display ALL sites, URLs, Referrers,
+   User Agents and Search Strings on a seperate HTML page from
+   the normal statistics page.  This adds the configuration
+   keywords 'AllSites', 'AllURLs', 'AllReferrers', 'AllAgents'
+   and 'AllSearchStr', which can have either a "yes" or "no"
+   value (default is "no").  Will add a "View All..." link to
+   the bottom of the appropriate "Top" table if enabled.
+
+ o Added support for squid proxy logs, thanks to code submitted
+   by Steinar H. Gunderson (sgunderson@bigfoot.com).  To use
+   squid logs, specify a LogType of 'squid' in the configuration
+   file.  This also changed the behaviour of the '-F' command
+   line switch, which now requires a second argument of either
+   'clf', 'ftp' or 'squid'.
+
+ o Completely modified the way the various TOP tables are handled
+   and sorted, which now allows extremely large top tables without
+   any performance degredation.  Previously, tables greater than
+   a few hundred elements produced a noticable perfomance penalty
+   during processing.
+
+ o Added the ability to group domains automatically and to hide
+   individual host names from the report, using the 'GroupDomains'
+   and 'HideAllSites' configuration keywords (-g and -X command
+   line options).  Domain Grouping is configurable as to the level
+   of grouping (second level domain, third, etc...).  HideAllSites
+   forces only grouped site records to be displayed if any.  Based
+   on ideas/code by Michael Klemme (mklemme@gmx.de).  This changes
+   the behaviour of the '-g' switch, which previously was used to
+   force the use of GMT time for reports.
+
+ o Added user configurable search engine specification, used for
+   search string analysis.  This adds the 'SearchEngine' keyword
+   in configuration files.  Based on idea/code by Alexey Kizilov.
+
+ o Changed code to use the latest version of GD which supports PNG
+   images instead of GIF images.  Also included changes in configure
+   script to ensure the presence of the libpng and libz libraries.
+
+ o Added ability to override log file to STDIN by use of '-' on
+   the command line.
+
+ o Added gzipped logfile support.  The program will automatically
+   detect logfiles with a '.gz' extension and uncompress on the
+   fly.  Uses gz file support of zlib, since it's required for
+   our gd/png stuff anyway.  Please note that using gzipped logs
+   will incur a small performance penality.
+
+ o Minor changes to search string code to increase accuracy.  This
+   also removes a previous condition that would occasionally cause
+   search strings to incorrectly be counted twice or to be counted
+   as different search strings when only differing by a space.
+
+ o Minor changes to URL parse code to allow additional characters.
+   Also changed unescape code to properly handle extended chars.
+
+ o Major changes to hash table node format for reduced memory usage.
+   Instead of fixed size strings, the new format will dynamically
+   allocate string memory and use pointers to existing table data
+   under certain circumstances.  The memory savings is significant
+   and will be greatly noticed with large sites.  Because of these
+   changes, the formatting of the incremental data file had to be
+   changed, therefore it is incompatible with previous versions.
+
+ o Major code reorganization and cleanup.  This was to facilitate
+   future developent and make things more managable.
+
+ o Usual documentation updates for new features/functions.
+
+--------------------------------------------------------------------
+1.30-xx changes from 1.22-06
+--------------------------------------------------------------------
+
+Fixes:
+ o Fixed minor bug that would allow incorrect site totals for the
+   first day of the month under certain conditions.
+
+Changes/Additions:
+ o Added Top Entry and Exit Page tables.  Added configuration file
+   keywords TopEntry (-e command line) and TopExit (-E command line)
+   to specify the number of entries to display for each table.  The
+   default for both is 10.  See README for additional information.
+   
+ o Added 'Group' labels.  Allows display of a specified label for
+   grouped entries (in 'Top' tables).  Based on patch submitted
+   by Oliver Graf (ograf@rhein-zeitung.de).  See sample.conf for
+   examples.
+
+ o Added 'Visits' totals.  The length of time that constitutes a
+   'visit' can be set using the VisitTimeout configuration keyword
+   (-m command line option).  The value must be given in HHMMSS
+   format, you can omit leading zeros. Default is 30 minutes (3000).
+
+ o Added 'Pages' totals, based on user specified extensions.  Changes
+   made to generated graphs as well.  Configuration keyword PageType
+   (and command line -P switch) allows specification of extensions
+   to use (defaults to 'htm*' and 'cgi').  Also called "pageviews".
+
+ o Added Search String analysis.  Keyword 'TopSearch' defines how
+   many of the top search strings to display.  Default is 20. Can
+   be disabled by using zero (0).
+
+ o Added native support for ftp logs (xferlog ala wu-ftpd).  Added
+   'LogType' configuration file keyword (-F command line option)
+   to specify log type.  Values can be either 'web' or 'ftp', with
+   the default of 'web'.
+
+ o Changed graphs to handle pages and visits totals. Also  added
+   color coded legends, which can be disabled using the GraphLegend 
+   configuration keyword (-L command line option).  Default is to
+   display them.
+
+ o Added background lines to graphs.  Default is 2 lines, and can
+   be set to any number using the GraphLines configuration keyword
+   (-l command line option).  Can use anywhere from none (0) to
+   twenty lines.  They will be drawn in all but the country graph.
+
+ o Added CountryGraph configuration file keyword (-Y command line
+   option) to enable/disable display of country usage pie chart.
+
+ o Added FoldSeqErr keyword (-f command line option).  Normally,
+   the program will ignore log records that are out of sequence
+   (chronological order).  This option lets them be folded into
+   the analysis anyway, as if the were the same date/time as the
+   last good record.  Apache users can safely ignore :)
+
+ o Added additonal 'Top' tables for SITES and URLs, sorted by
+   KBytes instead of hits.  Two new configuration file keywords,
+   TopKSites and TopKURLs, can be used to specify the number of
+   entries for each (zero to disable).  Default for both is 10.
+
+ o Added additional calculations for max/avg files, pages, visits
+   and KBytes in monthly statistics.
+
+ o Updated generated HTML code to fully comply with the HTML 4.0
+   Transitional spec.  DOCTYPE header reflects this change as well.
+
+ o Changed code to use 4 digit years in filenames.  Purely for the
+   Y2K phobes who couldn't deal with only two digits (even though
+   it was _purely_ for humans, the program couldn't care less).
+   Unfortunately, this means that you will have to rename previous
+   month files to the new format.  Not a big deal if you plan on
+   re-running all your logs to take advantage of the new features.
+
+ o Major changes to both history file and incremental file formats
+   to handle additional totals (pages/visits data).  As a result,
+   this version is INCOMPATABLE with previous versions.  See the
+   file README.FIRST for important information on upgrading.
+
+ o Language files and documentation updated for new functions.
+
+--------------------------------------------------------------------
+1.22-xx changes from 1.20-11
+--------------------------------------------------------------------
+
+Fixes:
+ o Fixed bug in country total generation.  Caused country table
+   to show bogus entries if logs contain hostnames that were not
+   fully qualified (ie: don't have the domain name/TLD portion).
+
+ o Changed/fixed incremental data I/O routines to better detect and
+   handle error conditions.  This involved some minor incremental
+   data file format changes as well.  Fixes problem large sites were
+   having where random tables were getting munged.
+
+ o Fixed record parse code to better detect and strip query portion
+   from URLs and Referrer strings.
+
+ o Fixed segfault condition when more than MAX_CTRY entries were
+   specified for the "Top Countries" table.
+
+Changes/Additions:
+ o Added code to detect negative byte transfer sizes in logs (another
+   netscape server kludge :)  Could cause KByte xfer sizes to become
+   corrupt.
+
+ o Several small changes (mostly ifdef/endif's) to make code compile
+   clean 'out-of-the-box' across more platforms (ala SunOS).  Also
+   added a GNU autoconf 'configure' script which helps a bit as well.
+
+ o Added Include* keywords.  Allows forcing the inclusion of specified
+   log records.  Takes precedence over counterpart Ignore* keywords.
+
+ o Added HTMLPre, HTMLBody, HTMLEnd and HTMLExtension keywords, and
+   changed behaviour of HTMLHead keyword.  Previous versions need
+   only change the 'HTMLHead' keword in existing files to 'HTMLBody'
+   to upgrade.  Thanks to Colin Viebrock <cmv@privateworld.com> for
+   the idea and code examples.
+
+ o Changed mangle agent code to support Opera and other browsers.
+   Also updated response codes to IETF HTTP/1.1 Rev 6 draft.
+   Thanks to Yves Lafon <ylafon@w3.org> for this these.
+
+ o Added HistoryName and IncrementalName keywords, which allow the
+   specification of the history and incremental data filenames.
+
+ o Added UseHTTPS keyword, which allows using 'https://' instead
+   of 'http://' for links to URLS in the 'Top URLs' table.  Also
+   added check for URLs that already have the protocol specified
+   (such as on virtual web and proxy servers), and to use unmodified
+   if found (will only force to lowercase for matching).
+
+ o Added code to ignore out-of-sequence log records.
+
+ o Added code to force hostnames to lowercase (was causing country skew).
+
+ o Disabled display of blank (zero hit) days at start of daily stat table.
+
+ o Added records per second calculation to timing totals.
+
+ o ALT= tags now use translated strings instead of forcing english.
+
+ o Updated documentation for new functions/features.
+
+--------------------------------------------------------------------
+1.20-xx changes from 1.12-10
+--------------------------------------------------------------------
+
+Fixes:
+ o Modified record parse routine to not touch stuff between quotes
+   (").  Was causing problems parsing some malformed request fields.
+
+ o Fixed memory leak in MangleAgent code, and relocated to elimitate
+   un-necessary processing (causing segfault on some machines).
+
+Changes/Additions:
+ o Changed transfer totals on host/url structures to support large
+   groupings (such as *.gif) on heavly hit servers.  Hopefully, this
+   should cure the 32bit overflow problem large sites were having.
+
+ o Changed daily transfer totals to support transfers greater than
+   roughly 4.2 gigabytes a day.
+
+ o Added some missing HTML tags and altered the way totals are
+   calculated on the 'Top' tables (to correct for grouped records).
+
+ o Added incremental run capability (-p command line option or
+   "Incremental" configuration file keyword).
+
+--------------------------------------------------------------------
+1.1x-xx changes from 1.00-05
+--------------------------------------------------------------------
+
+Fixes:
+ o Re-wrote the Group* logic, fixing a bug that allowed hiding of
+   objects when they shouldn't be.
+
+ o Fixed broken IgnoreReferrer code.
+
+ o Modified config parse code to handle extended characters.
+
+ o Misc. minor bug fixes/changes.  Added a missing fclose.
+
+ o Cleaned up generated HTML.
+
+ o Fixed duplicate warnings on large referrer fields.
+
+ o Fixed country table bug adding grouped records to totals.
+
+Changes/Additions:
+ o Added GroupSite, GroupReferrer and GroupAgent keywords to round
+   out the Group* configuration options.
+
+ o Added GroupShading and GroupHighlight keywords to allow selective
+   highlight and shading on grouped rows in table.
+
+ o Removed the '-L' command line option.  Groupings can now only
+   be specified from a configuration file.  Language files changed
+   to reflect change.
+
+ o Added '-V' command line option (identical to '-v') for version.
+
+ o Added additional language support.  Language files will be marked
+   /* New for 1.1 */ where changes have been made.
+
+ o Various rewrites to streamline the code, accomidate the new
+   group options and make things easier down the road when I implement
+   incremental (partial log) processing.
+
+ o Usual README and CHANGES documentation updates.
+
+--------------------------------------------------------------------
+1.00-xx changes from 0.99-06
+--------------------------------------------------------------------
+
+Fixes:
+ o Modify record parser so that spaces in usernames (auth field)
+   don't cause record to be skipped (w/'Bad Record' message).
+
+ o Included various error conditions that were being ignored in
+   the timing statistics ('bad records' value) totals.
+
+Changes/Additions:
+ o Added GMTTime (-g) option to force display of timestamps in
+   GMT (UTC) time instead of local timezone.
+
+ o Added GroupURL (-L) option for grouping of URLs as if they
+   were a single object.  See README for details.
+
+ o Language support in the form of a language specific header
+   file containing all strings used by The Webalizer.  English
+   file is used by default unless changed.  Support for other
+   languages will be distributed as I receive them.
+
+--------------------------------------------------------------------
+0.99-xx changes from 0.98-16
+--------------------------------------------------------------------
+
+0.99 is mostly a bug-fix release, with a few added extra goodies.
+
+Fixes:
+ o Fixed monthly total transfer size (silent) overflow problem.
+
+ o Fixed the numerous fprintf format errors.  Only seemed to wreak havok
+   on non-intel machines though.
+
+ o Fixed core dump condition on certain machines when using stdin for
+   input.
+
+ o Fixed floating point code that caused divide by zero errors on some
+   platforms (most noticably on SCO OpenServer).
+
+ o Netscape server kludges:  Added code to deal with Netscape log header
+   record gracefully.  Also added workaround for timestamp error where
+   Netscape sometimes makes a day have 0-24 hours instead of 0-23.  The
+   Webalizer will now treat anything greater than 23 as 0.
+
+ o Resized some fixed field sizes to gain memory usage improvements.
+
+Changes/Additions:
+ o Ignore* config keywords added.  This allows you to completely ignore
+   certain log records based on site name, URL, user agent or referrer.
+   * Use will cause inaccurate statistics results.  See documentation.
+
+ o ReallyQuiet config keyword (-Q command line option) added.  Causes
+   The Webalizer to supress _all_ messages.  Useful for cron jobs.
+
+ o Removed the "Sites" total at the bottom of the summary by month.
+   The total for sites is a useless number and produces a misleadingly
+   high value which detracts from the accuracy of the other totals.
+
+ o Updated README and CHANGES
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..916d1f0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+       Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Copyright b/Copyright
new file mode 100644 (file)
index 0000000..05f2199
--- /dev/null
+++ b/Copyright
@@ -0,0 +1,20 @@
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
diff --git a/DNS.README b/DNS.README
new file mode 100644 (file)
index 0000000..1bd7f16
--- /dev/null
@@ -0,0 +1,295 @@
+The Webalizer - A log file analysis program  -- DNS information
+
+The webalizer has the ability to perform reverse DNS lookups,  and
+fully supports both IPv4 and IPv6 addressing schemes.  This document
+attempts to explain how it works, and some things that you should be
+aware of when using the DNS lookup features.
+
+Note: The Reverse DNS feature may be enabled or disabled at compile
+      time.  DNS lookup code is enabled by default.  You can run The
+      Webalizer using the '-vV' command line options to determine what
+      options are enabled in the version you are using.
+
+
+How it works
+------------
+
+DNS lookups are made against a DNS cache file containing IP addresses
+and resolved names.  If the IP address is not found in the cache file,
+it will be left as an IP address.  In order for this to happen, a
+cache file MUST be specified when the Webalizer is run, either using
+the '-D' command line switch, or a "DNSCache" configuration file
+keyword.  If no cache file is specified, no attempts to perform DNS
+lookups will be done. The cache file can be made three different ways.
+
+1) You can have the Webalizer pre-process the specified log file at
+   run-time, creating the cache file before processing the log file
+   normally.  This is done by setting the number of DNS Children
+   processes to run, either by using the '-N' command line switch or
+   the "DNSChildren" configuration keyword.  This will cause the
+   Webalizer to spawn the specified number of processes which will
+   be used to do reverse DNS lookups.. generally, a larger number
+   of processes will result in faster resolution of the log, however
+   if set too high may cause overall system degradation.  A setting
+   of between 5 and 20 should be acceptable, and there is a maximum
+   limit of 100.   If used, a cache filename MUST be specified also,
+   using either the '-D' command line switch, or the "DNSCache"
+   configuration keyword.  Using this method, normal processing will
+   continue only after all IP addresses have been processed, and the
+   cache file is created/updated.
+
+2) You can pre-process the log file as a standalone process, creating
+   the cache file that will be used later by the Webalizer.  This is
+   done by running the Webalizer with a name of 'webazolver' (ie: the
+   name 'webazolver' is a symbolic link to 'webalizer') and specifying
+   the cache filename (either with '-D' or DNSCache).   If the number
+   of child processes is not given, the default of 5 will be used. In
+   this mode, the log will be read and processed, creating a DNS cache
+   file or updating an existing one, and the program will then exit
+   without any further processing.
+
+3) You can use The Webalizer (DNS) Cache file Manager program 'wcmgr'
+   to create and manipulate a cache file.  A blank cache file can be
+   created which would be later populated, or data for the cache file
+   can be imported using tab delimited text files.  See the wcmgr(1)
+   man page for usage information.
+
+
+Run-time DNS cache file creation/update
+---------------------------------------
+
+The creation/update of a DNS cache file at run-time occurs as follows:
+
+1) The log file is read, creating a list of all IP addresses that are
+   not already cached (or cached but expired) and need to be resolved.
+   Addresses are expired based on the TTL value specified using the
+   'CacheTTL' configuration option or after 7 days (default) if no TTL
+   is specified.
+
+2) The specified number of children processes are forked, and are used
+   to perform DNS lookups.
+
+3) Each IP address is given, one at a time, to the next available child
+   process until all IP addresses have been processed.  Each child will
+   update the cache file when a result is returned.  This may be either
+   a resolved name or a failed lookup, in which case the address will be
+   left unresolved.  Unresolved addresses are not normally cached, but
+   can be, if enabled using the 'CacheIPs' configuration file keyword.
+
+4) Once all IP addresses have been processed and the cache file updated,
+   the Webalizer will process the log normally.  Each record it finds
+   that has an unresolved IP address will be looked up in the cache file
+   to see if a hostname is available (ie: was previously found).
+
+Because there may be a significant amount of time between the initial
+unresolved IP list and normal processing, the Webalizer should not be
+run against live log files (ie: a log file that is actively being written
+to by a server), otherwise there may be additional records present that
+were not resolved.
+
+
+Stand-Alone DNS cache file creation/update
+------------------------------------------
+
+The creation/update of the DNS cache file, when run in stand-alone mode,
+occurs as follows:
+
+1) The log file is read, creating a list of all IP addresses that are
+   not already cached (or cached but expired) and need to be resolved.
+
+2) The specified number of children processes are forked, and are used
+   to perform DNS lookups. If the number of processes was not specified,
+   the default of 5 will be used.
+
+3) Each IP address is given, one at a time, to the next available child
+   process until all IP addresses have been processed.  Each child will
+   update the cache file when a result is returned.
+
+4) Once all IP addresses have been processed and the cache file updated,
+   the program will terminate without any further processing.
+
+
+Larger sites may prefer to use a stand-alone process to create the DNS
+cache file, and then run the Webalizer against the cache file.  This
+allows a single cache file to be used for many virtual hosts, and reduces
+the processing needed if many sites are being processed.  The Webalizer
+can be used in stand alone mode by running it as 'webazolver'.  When
+run in this fashion, it will only create the cache file and then exit
+without any further processing.  A cache filename MUST be specified,
+however unlike when running the Webalizer normally, the number of child
+processes does not have to be given (will default to 5).  All normal
+configuration and command line options are recognized, however, many
+of them will simply be ignored.. this allows the use of a standard
+configuration file for both normal use and stand alone use.
+
+
+Examples:
+---------
+
+webalizer -c test.conf -N 10 -D dns_cache.db /var/log/my_www_log
+
+   This will use the configuration file 'test.conf' to obtain normal
+   configuration options such as hostname and output directory.. it
+   will then either create or update the file 'dns_cache.db' in the
+   default output directory (using 10 child processes) based on the
+   IP addresses it finds in the log /var/lib/my_www_log, and then
+   process that log file normally.
+
+
+webalizer -o out -D dns_cache.db /var/log/my_www_log
+
+  This will process the log file /var/log/my_www_log, resolving IP
+  addresses from the cache file 'dns_cache.db' found in the default
+  output directory "out".  The cache file must be present as it will
+  not be created with this command.
+
+
+for i in /var/log/*/access_log; do
+  webazolver -N 20 -D /var/lib/dns_cache.db $i
+done
+
+  The above is an example of how to run through multiple log files
+  creating a single DNS cache file.. this might be typically used on
+  a larger site that has many virtual hosts, all keeping their log
+  files in a separate directory.  It will process each access_log it
+  finds in /var/log/* and create a cache file (var/lib/dns_cache.db).
+  This cache file can then be used to process the logs normally with
+  with the Webalizer in a read-only fashion (see next example).
+
+
+for i in /etc/webalizer/*.conf; do webalizer -c $i -D /etc/cache.db; done
+
+  This will process each configuration file found in /etc/webalizer,
+  using the DNS cache file /etc/cache.db.  This will also typically be
+  used on a larger site with multiple hosts..  Each configuration file
+  will specify a site specific log file, hostname, output directory, etc.
+  The cache file used will typically be created using a command similar
+  to the one previous to this example.
+
+
+Cache File Maintenance
+----------------------
+
+The Webalizer DNS cache files generally require very little or no
+special attention.  There are times though when some maintenance
+is required, such as occasional purging of very old cache entries.
+The Webalizer never removes a record once it's inserted into the
+cache.  If a record expires based on its timestamp, the next time
+that address is seen in a log, its name is looked up again and the
+timestamp is updated.  However, there will always be addresses that
+are never seen again, which will cause the cache files to continue
+to grow in size over time.  On extremely busy sites or sites that
+attract many one time visitors, the cache file may grow extremely
+large, yet only contain a small amount of valid entries.  Using
+The Webalizer (DNS) Cache file Manager ('wcmgr'), cache files can
+be purged, removing expired entries and shrinking the file size.
+A TTL (time to live) value can be specified, so the length of time
+an entry remains in the cache can be varied depending on individual
+site requirements.  In addition to purging cache files, 'wcmgr' can
+also be used to list cache file contents, import/export cache data,
+lookup/add/delete individual entries and gather overall statistics
+regarding the cache file (number of records, number expired, etc..).
+
+To purge a cache file using 'wcmgr', an example command would be:
+
+wcmgr -p31 /path/to/dns.cache
+
+This would purge the 'dns.cache' cache file of any records that are
+over 31 days old, and would reclaim the space that those records
+were using in the file.  If you would like to see the records that
+get purged, adding the command line option '-v' (verbose) will cause
+the program to print each entry and its age as they are removed.
+You can also use the 'wcmgr' to display statistics on cache files
+to aid in determining when a cache file should be purged.  See the
+'wcmgr' man page (wcmgr.1) for additional information on the various
+options available.
+
+
+Stupid Cache Tricks
+-------------------
+
+The DNS cache files used by The Webalizer allow for efficient IP address
+to name translations.  Resolved names are normally generated by using an
+existing DNS name server to query the address, either locally or over
+the Internet.  However, using The Webalizer (DNS) Cache file Manager,
+almost any IP address to Name translation can be included in the cache.
+One such example would be for mapping local network addresses to real
+names, even though those addresses may not have real DNS entries on the
+network (or may be 'local' addresses prohibited from use on the Internet).
+A simple tab delimited text file can be created and imported into a cache
+for use by The Webalizer,  which will then be used to convert the local
+IP addresses to real names.  Additional configuration options for The
+Webalizer can then be used as would be normally.  For example, consider
+a small business with 10 computers and a DSL router to the Internet.
+Each machine on the local network would use a private IP address that
+would not be resolved using an external (public) DNS server, so would
+always be reported by The Webalizer as 'unknown/unresolved'.  A simple
+cache file could be created to map those unresolved addresses into more
+meaningful names, which could then be further processed by the Webalizer.
+An example might look something like:
+
+# Local machines
+192.168.123.254        0       0       gw.widgetsareus.lan
+192.168.123.253        0       0       mail.widgetsareus.lan
+192.168.123.250        0       0       sales.widgetsareus.lan
+192.168.123.240        0       0       service.widgetsareus.lan
+192.168.123.237        0       0       mgr.widgetsareus.lan
+192.168.123.235        0       0       support1.widgetsareus.lan
+192.168.123.234        0       0       support2.widgetsareus.lan
+192.168.123.232        0       0       pres.widgetsareus.lan
+192.168.123.230        0       0       vp.widgetsareus.lan
+192.168.123.225        0       0       reception.widgetsareus.lan
+192.168.123.224        0       0       finance.widgetsareus.lan
+127.0.0.1      0       1       127.0.0.1
+
+
+There are a couple of things here that should be noted.  The first
+is that the timestamps (first zero on each line above) are set to
+zero.  This tells The Webalizer that these cached entries are to
+be considered 'permanent', and should never be expired (infinite
+TTL or time to live).  The second thing to note is that the resolved
+names are using a non-standard TLD (top level domain) of '.lan'.
+The Webalizer will map this special TLD to mean "Local Network" in
+its reports, which allows local traffic to be grouped separately
+from normal Internet traffic.  Lastly, you may notice that the
+last line of the file contains an entry with the same IP address
+where a name should be.  This entry will prevent the Webalizer
+from ever trying to lookup 127.0.0.1,  which is the 'localhost'
+address, when it is found in a log.  The second number after the IP
+address (1) tells the Webalizer that it is an unresolved entry, not
+a resolved hostname (ie: has no name).  Entries such as this one can
+be used to reduce DNS lookups on addresses that are known not to
+resolve.
+
+
+Considerations
+--------------
+
+Processing of live log files is discouraged, as the chances of log records
+being written between the time of DNS resolution and normal processing will
+cause problems.
+
+If you are using STDIN for the input stream (log file) and have run-time
+DNS cache file creation/update enabled.. the program will exit after the
+cache file has been created/updated and no output will be produced.  If
+you must use STDIN for the input log, you will need to process the stream
+twice, once to create/update the cache file, and again to produce the
+reports.  The reason for this is that stream inputs from STDIN cannot
+be 'rewound' to the beginning like files can, so must be given twice.
+
+Cached DNS addresses have a default TTL (time to live) of 7 days.  This
+may now be changed using the CacheTTL config file keyword to any value
+from 1 to 100 (days).  You may also now specify if unresolved addresses
+should be stored in the DNS cache.  Normally, unresolved IP addresses
+are NOT saved in the cache and are looked up each time the program is
+run.
+
+There is an absolute maximum of 100 child processes that may be created,
+however the actual number of children should be significantly less than
+the maximum.. typical usage should be between 5 and 20.
+
+Special thanks to Henning P. Schmiedehausen <hps@tanstaafl.de> for the
+original dns-resolver code he submitted,  which was the basis for this
+implementation.  Also thanks to Jose Carlos Medeiros for the inital IPv6
+support code.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..81c35ff
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,340 @@
+Installation instructions for The Webalizer
+
+The Webalizer is distributed in either source or binary distributions,
+and installation is different for each type.  Regardless of the type
+of installation, you need to obtain and un-tar/un-zip the distribution.
+For binary distributions, you should create a directory somewhere and
+chdir to it before unpacking the file.  Source distributions will
+automagically create a directory for you (webalizer-x.xx-xx).  If you
+are upgrading from a previous version, check the CHANGES file, and the
+README.FIRST file for important upgrade information.
+
+
+For Binary distributions
+------------------------
+
+You should have all the files you need in the directory you created
+when you un-tarred/un-zipped the distribution file.  The file
+'webalizer' in this directory is the binary executable.  Copy this
+someplace useful, like /usr/local/bin or /usr/bin.  A man page for
+The Webalizer is also supplied... If desired, copy the file
+'webalizer.1' to your local man directory (ie: /usr/local/man/man1).
+(You may also need to run 'makeinfo' or similar)
+
+Note: There may also be platform specific installation instructions
+      and/or usage notes supplied with the binary distribution.  You
+      should read them, as that will be your starting point if problems
+      are encountered.  Most of the binary distributions are submitted
+      by users, and I cannot support them the same way I can the
+      Linux binary distribution and the source code itself.
+
+
+For Source distributions
+------------------------
+
+The Webalizer requires, at a minimum, the GD graphics library
+(http://www.libgd.org/), the PNG (portable network graphics)
+graphics library ( http://www.libpng.org/pub/png/ ), the Zlib
+compression library ( http://www.zlib.net/ ) and associated
+header files for these libraries.  Most modern systems will have
+these libraries, but may or may not have the required header files
+for them unless you installed the 'dev' (development) versions
+(which include the required header files along with the libraries).
+Consult your systems documentation for specifics.
+
+For native DNS and Geolocation (GeoDB) support, the Berkeley DB
+library (by sleepycat, now owned by Oracle) v4.1 or higher and
+associated header file is required.
+http://www.oracle.com/technology/products/berkeley-db/
+
+For BZip2 support, the bzip2 compression library and header file is
+required. http://www.bzip.org/ 
+
+For GeoIP geolocation support, the GeoIP library (by MaxMind, Inc.)
+and header file is required, along with a Country Edition database.
+http://www.maxmind.com/app/ip-location
+
+
+New style build:
+
+The Webalizer source distribution now comes packaged with a GNU
+autoconf 'configure' script, which should allow you to simply type:
+
+./configure
+make
+make install
+
+Normal configure options apply, type ./configure --help to get a
+complete list.  A few options in particular may be useful:
+
+--sysconfdir=/etc
+
+The sysconfdir switch specifies where the default configuration
+file (webalizer.conf) should be looked for.  If not specified, the
+default of ${prefix}/etc is used.
+
+--with-language=<language>
+
+Allows you to specify the language to use.  Check the /lang directory
+to see the available language choices.  As an example, you could use
+
+./configure --with-language=french
+
+to compile the program using french (webalizer_lang.french) for output.
+You can also use the --without-language switch, which will use the
+default language (english).
+
+--enable-dns
+
+DNS lookup and native geolocation features are added if the required
+library (libdb) and header file (db.h) are found.  DNS/GeoDB code is
+enabled at compile time by using the -DUSE_DNS compiler switch.  For
+GeoDB lookups, a current geodb database is also required (available
+at ftp://ftp.mrunix.net/pub/webalizer/geodb).
+
+--with-geodb=<path>
+
+The default location for the GeoDB database is /usr/share/GeoDB but
+may be changed using this option.
+
+--enable-bz2
+
+BZip2 compression support will be added if the required library
+(libbz2) and header file (bzlib.h) are found.  BZip2 code is
+enabled at compile time using the -DUSE_BZIP compiler switch.
+
+--enable-geoip
+
+GeoIP geolocation support will be added if the required library
+(libGeoIP) and header file (GeoIP.h) are found.  No attempt is
+made to locate a valid Country Edition database, which is also
+required for GeoIP lookups to be performed.  GeoIP code is
+enabled at compile time using the -DUSE_GEOIP compiler switch.
+
+Some systems may require unusual settings that the configure script
+cannot determine.  You can pass values to the script by setting
+environment variables.  For example:
+
+CC=c89 CFLAGS=-O LIBS=-lposix ./configure --with-language=german
+
+Would allow you to set the compiler (c89) and various flags and
+libraries to use, which would then be passed to the configure script
+and eventually to the Makefile generated.  It also will cause the
+program to be compiled using German instead of the English default.
+Additionally, the various --with-<package> and --with-<packagelib>
+options allow specification of non-standard locations for the
+various libraries and headers.  For example, if you built the bzip2
+library in /src/bzip2, you could use:
+
+./configure --with-bz2=/src/bzip2 --with-bz2lib=/src/bzip2 --enable-bz2
+
+to specify where the bz2 header files (--with-bz2) and library
+(--with-bz2lib) are located.  They should then be detected by
+the configure script and enabled.  Please note that if you are
+linking against a shared library (ie: libbz2.so), then even though
+configure script finds the library, and The Webalizer compiles
+successfully, the program may FAIL when run because the systems
+run-time linking loader cannot find the library.  If this happens,
+then you need to tell the loader where the library is, and is
+dependent upon what type system is being used.  Some platforms
+require the path to the library to be placed in the LD_LIBRARY_PATH
+environment variable.. some (such as linux based platforms) use
+the ld.so.conf file and ldconfig program to configure the dynamic
+linker run-time bindings.  Consult the documentation for your
+system specific requirements.
+
+For package maintainers, the environment variable DESTDIR can be
+used to specify a root directory for installation.  This is the
+top level directory under which all other directories will be
+placed when 'make install' is invoked, and allows binary packages
+to be easily built outside the normal root directory tree.  For
+example, if you wish to build a binary package of The Webalizer
+under the /usr/pkg/webalizer-2.20 directory, you could type:
+
+make install DESTDIR=/usr/pkg/webalizer-2.20
+
+Which would then create the following directory tree:
+
+/usr/pkg/webalizer-2.20/
+/usr/pkg/webalizer-2.20/etc/
+/usr/pkg/webalizer-2.20/etc/webalizer.conf.sample
+/usr/pkg/webalizer-2.20/usr/
+/usr/pkg/webalizer-2.20/usr/bin/
+/usr/pkg/webalizer-2.20/usr/bin/webalizer
+/usr/pkg/webalizer-2.20/usr/bin/webazolver -> webalizer
+/usr/pkg/webalizer-2.20/usr/bin/wcmgr
+/usr/pkg/webalizer-2.20/usr/man/
+/usr/pkg/webalizer-2.20/usr/man/man1/
+/usr/pkg/webalizer-2.20/usr/man/man1/webalizer.1
+/usr/pkg/webalizer-2.20/usr/man/man1/webazolver.1 -> webalizer.1
+/usr/pkg/webalizer-2.20/usr/man/man1/wcmgr.1
+
+
+If the configure script doesn't work for you.. please let me know
+(along with relevant info like system type, compiler, etc..)  If you
+are able and can tweak something to make it work, let me know as well.
+
+
+Old style build:
+
+If you have a platform that the configure script won't work on, or
+some other situation where you have to configure and build the
+source yourself,  the file 'Makefile.std' is a "stock" Makefile
+that you can use to build the Webalizer.  Copy or rename the file
+to 'Makefile', edit to match your system, and do the usual 'make'.
+This is a very generic Makefile, so expect to have to tweak it for
+your particular platform and configuration.  If everything seems
+to have gone well, next type 'make install' to do a stock install.
+Again, you may want to tweak the Makefile for the install, or
+skip the 'make install' step completely (see below).
+
+This will install the Webalizer on your system, and put a sample
+configuration file in /etc (named 'webalizer.conf.sample').  If
+you don't want to use the 'make install' method... just copy the
+file 'webalizer' to someplace useful, and you are ready to go :)
+
+
+Usage
+-----
+
+When run, The Webalizer will read the specified log file and
+produce HTML output in the directory specified (or current
+directory if none).  You may specify various configuration
+options either on the command line or in a configuration file.
+The format of the command line is:
+
+webalizer [options] [log_file]
+
+Where 'options' may be any of the valid command line options
+described in the README file.  If a log filename is not given,
+input is taken from stdin.  A typical command line might look
+something similar to:
+
+webalizer /var/lib/httpd/logs/access_log
+
+This will produce output in the current directory based on the
+logfile /var/lib/httpd/logs/access_log.  Another example:
+
+webalizer -c somehost.conf
+
+This will read the configuration file somehost.conf, which
+should specify, among other things, the log filename and
+output directory to use.  You can use 'webalizer -h' to get
+a list of available command line options, or view the file
+README for complete instructions on all available configuration
+options.  You should note that The Webalizer will _always_
+look for a configuration file named 'webalizer.conf' in either
+the current directory or in /etc/, and will process that file
+_before_ any other configuration or command line options.  If
+you run a single server, you may want to create a default
+configuration file and place it in the /etc/ directory.  This
+will allow you to simply type 'webalizer' without the need to
+specify additional command line options.
+
+
+Configuration
+-------------
+
+The Webalizer can be customized in many ways using either the
+command line or configuration files.  To test The Webalizer,
+type: 'webalizer /var/lib/httpd/logs/access_log', changing the
+directory to wherever your log files are.  After processing,
+you should have the output and a file named index.html which
+can be viewed with any browser.  The Webalizer can accept many
+command line options as well, type 'webalizer -h' to view them.
+In addition to the command line options, The Webalizer can
+be customized using configuration files. There is a sample.conf
+file that is part of both the source and binary distributions
+that can be used as a 'template' for creating your own site
+configuration file.  Just make a copy of the file and name it
+something like 'mysite.conf'.  Edit the new file to match your
+particular setup and taste.
+
+To test the new configuration file, type 'webalizer -c mysite.conf'
+(or whatever your configuration file is named).  Fire up the
+browser and look at the results.  If you rename your new
+configuration file to 'webalizer.conf', you will only need
+to type 'webalizer', and The Webalizer will use it as the
+default.  See the README file for more on configuration and
+use of configuration files.
+
+
+Language Support
+----------------
+
+Language support is provided as language specific header
+files that must be compiled into the program.  If you don't
+have the source code, get it.  If you can't compile the
+program yourself, ask a friend.  The /lang/ directory of
+the distribution contains all supported languages at the
+time of release.  Additional/updated language files will
+be found at ftp://ftp.webalizer.org/pub/webalizer/lang and
+are always the most current versions.
+
+To build with language support, use the --with-language
+option of the configure script.  This will automagically
+do for you the steps described below.  If you can't use
+the configure script, you can manually select the language
+file to use.
+
+In the webalizer source directory, you will find a symbolic
+link for the file webalizer_lang.h, and it will be pointing
+to the file webalizer_lang.english which is the default.
+Delete the link (ie: rm webalizer_lang.h) and create a new
+one to the language file you want The Webalizer to use
+(ie: ln -s lang/webalizer_lang.spanish webalizer_lang.h)
+and re-compile the program.
+
+Note: The source distribution of The Webalizer contains all
+      language support files that were available at the time.
+      Additional/updated language files can be found at:
+      ftp://ftp.webalizer.org/pub/webalizer/lang where I will
+      put them as I receive them.
+
+
+Common Questions
+----------------
+
+Q: Will it run on [some platform]
+A: If it is a *nix platform, it should without a problem.  If it's
+   something different, probably not and your on your own if you
+   want to try to make it work.
+
+Q: When I compile, I get "file not found" errors?
+A: Most likely, the compiler cant find the header files for one
+   the required libraries.  If they are someplace other than the
+   standard locations (ie: /usr/include), then you  probably need
+   to specify an alternate location to look using one of the
+   --with-<package> command line switches when you run configure,
+   or edit the Makefile and specify the location with an '-I<path>'
+   compiler flag.
+
+Q: I get "libgd not found' errors?
+A: You don't have the GD graphics located in a standard library
+   path, or you don't have the GD graphics library at all.  If
+   the later, go to http://www.boutell.com/gd/ and grab a copy.
+   If you do have it, add a -L switch in the Makefile to point
+   to the proper location.
+
+Q: I get unresolved symbol errors when compiling, why?
+A: This most often occurs when the GD library was built with
+   additional support for such things as TrueType fonts or
+   X11 graphics.  The configure script for The Webalizer only
+   checks that the gd library is available, and does not check
+   any other dependencies it may have.  Typically, to fix this
+   problem, you need to edit the Makefile and add the dependent
+   libraries to a compiler switch (or pass them on the command
+   line when running the configure script).  For example, if
+   you are getting errors about not finding truetype routines,
+   you may need to add '-lttf' (for 'libttf', the truetype library)
+   to the "LIBS" variable.
+
+   Hint: I usually find it easier to just grab the GD library
+         source, and compile it myself locally as a static
+         library, in a directory just above where I compile The
+         Webalizer.  Then, at configure time, just add the
+         '-with-gd=../gd' and '--with-gdlib=../gd' switches,
+         and the GD graphic stuff will be statically linked into
+         The Webalizer, eliminating any other library dependencies
+         that the normal, shared library on my system may have.
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..1efc703
--- /dev/null
@@ -0,0 +1,116 @@
+#
+# Makefile for webalizer - a web server log analysis program
+#
+# Copyright (C) 1997-2011  Bradford L. Barrett
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version, and provided that the above
+# copyright and permission notice is included with all distributed
+# copies of this or derived software.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details (file "COPYING").
+#
+
+prefix          = @prefix@
+exec_prefix     = @exec_prefix@
+datadir         = @datarootdir@
+
+BINDIR          = @bindir@
+MANDIR          = ${datadir}/man/man1
+ETCDIR          = @sysconfdir@
+GEODB           = @GEODB_LOC@
+CC              = @CC@
+CFLAGS          = @CFLAGS@ @CPPFLAGS@
+LIBS            = @LIBS@
+WCMGR_LIBS      = @WCMGR_LIBS@
+DEFS            = -DETCDIR=\"${ETCDIR}\" -DGEODB_LOC=\"${GEODB}\" @DEFS@ @OPTS@
+LDFLAGS         = @LDFLAGS@
+INSTALL         = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA    = @INSTALL_DATA@
+DEFLANG         = @DEFAULT_LANG@
+
+# Shouldn't have to touch below here!
+
+all: webalizer wcmgr
+
+webalizer:     webalizer.o webalizer.h hashtab.o hashtab.h  \
+               linklist.o linklist.h preserve.o preserve.h  \
+                dns_resolv.o dns_resolv.h parser.o parser.h  \
+                output.o output.h graphs.o graphs.h lang.h   \
+               webalizer_lang.h
+       $(CC) ${LDFLAGS} -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o dns_resolv.o graphs.o ${LIBS}
+       rm -f webazolver
+       @LN_S@ webalizer webazolver
+
+webalizer.o:   webalizer.c webalizer.h parser.h output.h preserve.h \
+               graphs.h dns_resolv.h webalizer_lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c webalizer.c
+
+parser.o:      parser.c parser.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c parser.c
+
+hashtab.o:     hashtab.c hashtab.h dns_resolv.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c hashtab.c
+
+linklist.o:    linklist.c linklist.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c linklist.c
+
+output.o:      output.c output.h webalizer.h preserve.h \
+               hashtab.h graphs.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c output.c
+
+preserve.o:    preserve.c preserve.h webalizer.h parser.h   \
+               hashtab.h graphs.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c preserve.c
+
+dns_resolv.o:  dns_resolv.c dns_resolv.h lang.h webalizer.h
+       $(CC) ${CFLAGS} ${DEFS} -c dns_resolv.c
+
+graphs.o:      graphs.c graphs.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c graphs.c
+
+wcmgr: wcmgr.o
+       $(CC) ${LDFLAGS} -o wcmgr wcmgr.o ${WCMGR_LIBS} 
+
+wcmgr.o:       wcmgr.c
+       $(CC) ${CFLAGS} ${DEFS} -c wcmgr.c
+
+clean:
+       rm -f webalizer webazolver wcmgr *.o usage*.png daily*.png hourly*.png
+       rm -f ctry*.png *.html *.hist *.current core *.gif
+
+distclean: clean
+       rm -f webalizer.conf *.tar *.tgz *.Z *.tar.gz
+       rm -f Makefile webalizer_lang.h config.cache config.log config.status
+       @LN_S@ lang/webalizer_lang.@DEFAULT_LANG@ webalizer_lang.h
+
+install: all
+       mkdir -p ${DESTDIR}${BINDIR}
+       mkdir -p ${DESTDIR}${MANDIR}
+       mkdir -p ${DESTDIR}${ETCDIR}
+       $(INSTALL_PROGRAM) webalizer ${DESTDIR}${BINDIR}/webalizer
+       $(INSTALL_PROGRAM) wcmgr ${DESTDIR}${BINDIR}/wcmgr
+       rm -f ${DESTDIR}${BINDIR}/webazolver
+       @LN_S@ webalizer ${DESTDIR}${BINDIR}/webazolver
+       $(INSTALL_DATA) webalizer.1 ${DESTDIR}${MANDIR}/webalizer.1
+       $(INSTALL_DATA) wcmgr.1 ${DESTDIR}${MANDIR}/wcmgr.1
+       rm -f ${DESTDIR}${MANDIR}/webazolver.1
+       @LN_S@ webalizer.1 ${DESTDIR}${MANDIR}/webazolver.1
+       $(INSTALL_DATA) sample.conf ${DESTDIR}${ETCDIR}/webalizer.conf.sample
+
+uninstall:
+       rm -f ${DESTDIR}${BINDIR}/webalizer
+       rm -f ${DESTDIR}${BINDIR}/webazolver
+       rm -f ${DESTDIR}${BINDIR}/wcmgr
+       rm -f ${DESTDIR}${MANDIR}/webalizer.1
+       rm -f ${DESTDIR}${MANDIR}/webazolver.1
+       rm -f ${DESTDIR}${MANDIR}/wcmgr.1
+       rm -f ${DESTDIR}${ETCDIR}/webalizer.conf.sample
+       rm -f webalizer_lang.h
+       @LN_S@ lang/webalizer_lang.${DEFLANG} webalizer_lang.h
diff --git a/Makefile.std b/Makefile.std
new file mode 100644 (file)
index 0000000..daa0c4a
--- /dev/null
@@ -0,0 +1,140 @@
+#
+# Makefile for webalizer - a web server logfile analysis thingie
+#
+# (c)1997-2011 by Bradford L. Barrett
+# Distributed under the GNU GPL. See "README" and "Copyright"
+# files supplied with this distribution for more information.
+#
+# This works on my Linux and Solaris systems, and should work
+# out of the box on other GCC based systems.  Tweek the values
+# below for your environment if needed before running make.
+#
+
+# Use these for SCO (and maybe others)
+#BINDIR = /usr/bin
+#MANDIR = /usr/man/man1
+#ETCDIR = /etc
+#CC     = cc
+#CFLAGS = -b elf
+#LDFLAGS= -L../usr/local/lib
+#LIBS   = -lgd -lm -lpng -lz
+#DEFS    = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H
+
+# These will build The Webalizer with DNS support
+# on my Linux system.  GD is statically built and
+# is located in the ../gd directory.  This system
+# also has a stock install of the berkeley db lib
+# (libdb in /usr/lib and db.h in /usr/include).
+
+BINDIR = /usr/local/bin
+MANDIR = /usr/local/man/man1
+ETCDIR = /etc
+CC     = gcc
+CFLAGS = -Wall -O2 -I../gd
+LDFLAGS= -L/usr/local/lib -L../gd
+LIBS   = -lgd -lpng -lz -lm -ldb
+DEFS   = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_DNS
+
+# Some might need this instead (Solaris?!?)
+#LIBS   = -lgd -lpng -lz -lm -ldb -lnsl -lsocket -lrt
+
+# if you want to use a different default directory for the
+# GeoDB database, add this to DEFS: -DGEODB_LOC=\"/usr/share/GeoDB\"
+
+# if you have header files in a non-standard place, you
+# should specify them on the CFLAGS line, like:
+
+#CFLAGS = -Wall -O2 -I../gd -I/src/bzip2
+
+# similar with library locations. add non-standard paths
+# using the LDFLAGS variable, like this:
+
+#LDFLAGS = -L/usr/local/lib -L/src/bzip2
+
+# If your GD lib was compiled with X/truetype, you may need
+# to use this or some variation of it:
+
+#LIBS   = -lgd -lpng -lz -lm -ldb -lX11 -lXpm -lttf
+
+# If you want bzip2 support, you need to define USE_BZIP
+# and add the bz2 library like below:
+
+#LIBS   = -lgd -lpng -lz -lm -lbz2
+#DEFS   = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_BZIP
+
+# GeoIP support?  You need USE_GEOIP and -lGeoIP
+
+#LIBS   = -lgd -lpng -lz -lm -lGeoIP
+#DEFS   = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_GEOIP
+
+# want it all?!? Give this a whirl:
+
+#LIBS   = -lgd -lpng -lz -lm -lGeoIP -lbz2 -ldb
+#DEFS   = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_GEOIP -DUSE_DNS -DUSE_BZIP
+
+# Shouldn't have to touch below here!
+
+all: webalizer wcmgr
+
+webalizer:     webalizer.o webalizer.h hashtab.o hashtab.h  \
+               linklist.o linklist.h preserve.o preserve.h  \
+                dns_resolv.o dns_resolv.h parser.o parser.h  \
+                output.o output.h graphs.o graphs.h lang.h   \
+               webalizer_lang.h
+       $(CC) ${LDFLAGS} -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o dns_resolv.o graphs.o ${LIBS}
+       rm -f webazolver
+       ln -s webalizer webazolver
+        rm -f webazolver.1
+        ln -s webalizer.1 webazolver.1
+
+webalizer.o:   webalizer.c webalizer.h parser.h output.h preserve.h \
+               graphs.h dns_resolv.h webalizer_lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c webalizer.c
+
+parser.o:      parser.c parser.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c parser.c
+
+hashtab.o:     hashtab.c hashtab.h dns_resolv.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c hashtab.c
+
+linklist.o:    linklist.c linklist.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c linklist.c
+
+output.o:      output.c output.h webalizer.h preserve.h \
+               hashtab.h graphs.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c output.c
+
+preserve.o:    preserve.c preserve.h webalizer.h parser.h   \
+               hashtab.h graphs.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c preserve.c
+
+dns_resolv.o:  dns_resolv.c dns_resolv.h lang.h webalizer.h
+       $(CC) ${CFLAGS} ${DEFS} -c dns_resolv.c
+
+graphs.o:      graphs.c graphs.h webalizer.h lang.h
+       $(CC) ${CFLAGS} ${DEFS} -c graphs.c
+
+wcmgr: wcmgr.o
+       $(CC) ${LDFLAGS} -o wcmgr wcmgr.o ${LIBS}
+
+wcmgr.o:       wcmgr.c webalizer.h
+       $(CC) ${CFLAGS} ${DEFS} -c wcmgr.c
+
+clean:
+       rm -f webalizer *.o usage*.png daily*.png hourly*.png ctry*.png
+       rm -f *.html *.hist *.current core *.gif
+
+distclean: clean
+       rm -f webalizer.conf *.tar *.tgz *.Z *.tar.gz
+       rm -f Makefile webalizer_lang.h config.cache config.log config.status
+       ln -s lang/webalizer_lang.english webalizer_lang.h
+
+install: all
+       cp webalizer.1 ${MANDIR}/webalizer.1
+       cp webalizer   ${BINDIR}/webalizer
+       cp sample.conf ${ETCDIR}/webalizer.conf.sample
+
+uninstall:
+       rm -f ${MANDIR}/webalizer.1
+       rm -f ${BINDIR}/webalizer
+       rm -f ${BINDIR}/webalizer.conf.sample
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..14a3a24
--- /dev/null
+++ b/README
@@ -0,0 +1,1949 @@
+The Webalizer - A web server log file analysis tool
+Copyright 1997-2011 by Bradford L. Barrett
+
+Distributed under the GNU GPL.  See the files "COPYING" and
+"Copyright" supplied with the distribution for additional info.
+
+
+What is The Webalizer?
+----------------------
+
+The Webalizer is a web server log file analysis program which produces
+usage statistics in HTML format for viewing with a browser.  The results
+are presented in both columnar and graphical format, which facilitates
+interpretation.  Yearly, monthly, daily and hourly usage statistics are
+presented, along with the ability to display usage by site, URL, referrer,
+user agent (browser), search string, entry/exit page, username and country
+(some information is only available if supported and present in the log
+files being processed).  Processed data may also be exported into most
+database and spreadsheet programs that support tab delimited data formats.
+
+The Webalizer supports CLF (common log format) log files, as well as
+Combined log formats as defined by NCSA and others, and variations
+of these which it attempts to handle intelligently.  In addition, The
+Webalizer supports wu-ftpd xferlog (FTP) formatted logs, squid proxy logs
+and W3C extended format logs.
+
+Gzip compressed logs may be used as input directly.   Any log filename
+that ends with a '.gz' extension will be assumed to be in gzip format and
+uncompressed on the fly as it is being read.  The Webalizer now also has
+the ability to handle BZip2 compressed logs, if enabled at compile time.
+Similar to gzipped logs, any log filename that ends with a '.bz2' will be
+assumed to be in bzip2 format and uncompressed on the fly as it is being
+read.
+
+For sites that do not enable hostname lookups (DNS resolution) on their
+web servers (and have only IP addresses in their logs), The Webalizer
+provides its own internal DNS lookup capability as well as geolocation
+services (GeoDB).  The optional GeoIP library from MaxMind Inc. is also
+supported and may be used instead of the native GeoDB database.
+
+A utility program, "The Webalizer (DNS) Cache file Manager", or 'wcmgr'
+is also provided which allows the creation and manipulation of the DNS
+cache files used and produced by the webalizer.  See the file DNS.README
+for additional information regarding DNS support.
+
+This documentation applies to The Webalizer Version 2.21
+
+Running the Webalizer
+---------------------
+
+The Webalizer was designed to be run from a Unix command line prompt or
+as a cron job.  There are several command line options which will modify
+the results it produces, and configuration files can be used as well.
+The format of the command line is:
+
+webalizer [options ...] [log-file]
+
+Where 'options' can be one or more of the supported command line
+switches described below.  'log-file' is the name of the log file
+to process (see below for more detailed information).  If a dash
+("-") is specified for the log-file name, STDIN will be used.
+
+
+Once executed, the general flow of the program follows:
+
+o A default configuration file is scanned for.  A file named
+  'webalizer.conf' is searched for in the current directory, and if
+  found, its configuration data is parsed.  If the file is not
+  present in the current directory,  the file '/etc/webalizer.conf'
+  is searched for and, if found, is used instead.
+
+o Any command line arguments given to the program are parsed.  This
+  may include the specification of a configuration file, which is
+  processed at the time it is encountered.
+
+o If a log file was specified, it is opened and made ready for
+  processing.  If no log file was given, or the filename '-' is
+  specified on the command line, STDIN is used for input.
+
+o If an output directory was specified, the program does a 'chdir' to
+  that directory in preparation for generating output.  If no output
+  directory was given, the current directory is used.
+
+o If a non-zero number of DNS Children processes were specified, they
+  will be started, and the specified log file will be processed,
+  either creating or updating the specified DNS cache file.
+
+o If no hostname was given, the program attempts to get the hostname
+  using a uname system call.  If that fails, 'localhost' is used.
+
+o A history file is searched for.  This file keeps previous month
+  totals used on the main index.html page.  The default file is
+  named 'webalizer.hist', kept in the specified output directory,
+  however may be changed using the "HistoryName" configuration file
+  keyword.
+
+o If incremental processing was specified, a data file is searched for
+  and loaded if found, containing the 'internal state' data of the
+  program at the end of a previous run.  The default file is named
+  'webalizer.current', kept in the specified output directory, however
+  may be changed using the "IncrementalName" configuration file keyword.
+
+o Main processing begins on the log file.  If the log spans multiple
+  months, a separate HTML document is created for each month.
+
+o After main processing, the main 'index.html' page is created, which
+  has totals by month and links to each months HTML document.
+
+o A new history file is saved to disk, which includes totals generated
+  by The Webalizer during the current run.
+
+o If incremental processing was specified, a data file is written that
+  contains the 'internal state' data at the end of this run.
+
+
+Incremental Processing
+----------------------
+
+Version 1.2x of The Webalizer adds incremental run capability.  Simply
+put, this allows processing large log files by breaking them up into
+smaller pieces, and processing these pieces instead.  What this means
+in real terms is that you can now rotate your log files as often as you
+want, and still be able to produce monthly usage statistics without the
+loss of any detail.  This is accomplished by saving and restoring all
+relevant internal data to a disk file between runs.  Doing so allows the
+program to 'start where it left off' so to speak, and allows the
+preservation of detail from one run to the next.
+
+Some special precautions need to be taken when using the incremental
+run capability of The Webalizer.  Configuration options should not be
+changed between runs, as that could cause corruption of the internal
+stored data.  For example, changing the MangleAgents level will cause
+different representations of user agents to be stored, producing invalid
+results in the user agents section of the report.  If you need to change
+configuration options, do it at the end of the month after normal
+processing of the previous month and before processing the current month.
+You may also want to delete the 'webalizer.current' file as well (or
+whatever name was specified using the "IncrementalName" configuration
+option).
+
+The Webalizer also attempts to prevent data duplication by keeping
+track of the timestamp of the last record processed.  This timestamp
+is then compared to current records being processed, and any records
+that were logged previous to that timestamp are ignored.  This, in
+theory, should allow you to re-process logs that have already been
+processed, or process logs that contain a mix of processed/not yet
+processed records, and not produce duplication of statistics.  The
+only time this may break is if you have duplicate timestamps in two
+separate log files... any records in the second log file that do have
+the same timestamp as the last record in the previous log file processed,
+will be discarded as if they had already been processed.  There are
+lots of ways to prevent this however, for example, stopping the web
+server before rotating logs will prevent this situation.  This setup
+also necessitates that you always process logs in chronological order,
+otherwise data loss will occur as a result of the timestamp compare.
+
+
+Output Produced
+---------------
+
+The Webalizer produces several reports (html) and graphics for each
+month processed.  In addition, a summary page is generated for the
+current and previous months (up to 12), a history file is created
+and if incremental mode is used, the current month's processed data.
+The exact location and names of these files can be changed using
+configuration files and command line options.  The files produced,
+(default names) are:
+
+index.html              - Main summary page (extension may be changed)
+usage.png               - Yearly graph displayed on the main index page
+usage_YYYYMM.html       - Monthly summary page (extension may be changed)
+usage_YYYYMM.png        - Monthly usage graph for specified month/year
+daily_usage_YYYYMM.png  - Daily usage graph for specified month/year
+hourly_usage_YYYYMM.png - Hourly usage graph for specified month/year
+site_YYYYMM.html        - All sites listing (if enabled)
+url_YYYYMM.html         - All urls listing (if enabled)
+ref_YYYYMM.html         - All referrers listing (if enabled)
+agent_YYYYMM.html       - All user agents listing (if enabled)
+search_YYYYMM.html      - All search strings listing (if enabled)
+webalizer.hist          - Previous month history (may be changed)
+webalizer.current       - Incremental Data (may be changed)
+site_YYYYMM.tab         - tab delimited sites file
+url_YYYYMM.tab          - tab delimited urls file
+ref_YYYYMM.tab          - tab delimited referrers file
+agent_YYYYMM.tab        - tab delimited user agents file
+user_YYYYMM.tab         - tab delimited usernames file
+search_YYYYMM.tab       - tab delimited search string file
+
+The yearly (index) report shows statistics for a 12 month period, and
+links to each month.  The monthly report has detailed statistics for
+that month with additional links to any URLs and referrers found.
+The various totals shown are explained below.
+
+Hits
+
+  Any request made to the server which is logged, is considered a 'hit'.
+The requests can be for anything... html pages, graphic images, audio
+files, CGI scripts, etc...  Each valid line in the server log is
+counted as a hit.  This number represents the total number of requests
+that were made to the server during the specified report period.
+
+Files
+
+  Some requests made to the server, require that the server then send
+something back to the requesting client, such as a html page or graphic
+image.  When this happens, it is considered a 'file' and the files
+total is incremented.  The relationship between 'hits' and 'files' can
+be thought of as 'incoming requests' and 'outgoing responses'.
+
+Pages
+
+  Pages are, well, pages!  Generally, any HTML document, or anything
+that generates an HTML document, would be considered a page.  This
+does not include the other stuff that goes into a document, such as
+graphic images, audio clips, etc...  This number represents the number
+of 'pages' requested only, and does not include the other 'stuff' that
+is in the page.  What actually constitutes a 'page' can vary from
+server to server.  The default action is to treat anything with the
+extension '.htm', '.html' or '.cgi' as a page.  A lot of sites will
+probably define other extensions, such as '.phtml', '.php3' and '.pl'
+as pages as well.  Some people consider this number as the number of
+'pure' hits... I'm not sure if I totally agree with that viewpoint.
+Some other programs (and people :) refer to this as 'Pageviews'.
+
+Sites
+
+  Each request made to the server comes from a unique 'site', which can
+be referenced by a name or ultimately, an IP address.  The 'sites'
+number shows how many unique IP addresses made requests to the server
+during the reporting time period.  This DOES NOT mean the number of
+unique individual users (real people) that visited, which is impossible
+to determine using just logs and the HTTP protocol (however, this
+number might be about as close as you will get).
+
+Visits
+
+  Whenever a request is made to the server from a given IP address
+(site), the amount of time since a previous request by the address
+is calculated (if any).  If the time difference is greater than a
+pre-configured 'visit timeout' value (or has never made a request before),
+it is considered a 'new visit', and this total is incremented (both
+for the site, and the IP address).  The default timeout value is 30
+minutes (can be changed), so if a user visits your site at 1:00 in
+the afternoon, and then returns at 3:00, two visits would be registered.
+Note: in the 'Top Sites' table, the visits total should be discounted
+on 'Grouped' records, and thought of as the "Minimum number of visits"
+that came from that grouping instead.  Note: Visits only occur on
+PageType requests, that is, for any request whose URL is one of the
+'page' types defined with the PageType and PagePrefix option, and not
+excluded by the OmitPage option.  Due to the limitation of the HTTP
+protocol, log rotations and other factors, this number should not be
+taken as absolutely accurate,  rather, it should be considered a pretty
+close "guess".
+
+KBytes
+
+  The KBytes (kilobytes) value shows the amount of data, in KB, that
+was sent out by the server during the specified reporting period.  This
+value is generated directly from the log file, so it is up to the
+web server to produce accurate numbers in the logs  (some web servers
+do stupid things when it comes to reporting the number of bytes).  In
+general, this should be a fairly accurate representation of the amount
+of outgoing traffic the server had, regardless of the web servers
+reporting quirks.
+
+Note: A kilobyte is 1024 bytes, not 1000 :)
+
+Top Entry and Exit Pages
+
+  The Top Entry and Exit tables give a rough estimate of what URLs
+are used to enter your site, and what the last pages viewed are.
+Because of limitations in the HTTP protocol, log rotations, etc...
+this number should be considered a good "rough guess" of the actual
+numbers, however will give a good indication of the overall trend in
+where users come into, and exit, your site.
+
+
+Command Line Options
+--------------------
+
+The Webalizer supports many different configuration options that will
+alter the way the program behaves and generates output.  Most of these
+can be specified on the command line, while some can only be specified
+in a configuration file. The command line options are listed below,
+with references to the corresponding configuration file keywords.
+
+--------------------------------------------------------------------------
+
+General Options
+---------------
+
+-h        Display all available command line options and exit program.
+
+-v        Be Verbose.  This will cause the program to print additional
+          information at run time.  It is the same as specifying
+          "Quiet no", "ReallyQuiet no" and "Debug yes" config options.
+
+-V        Display the program version and exit.  Additional program
+          specific information will be displayed if 'verbose' mode is
+          also used (e.g. '-vV'), which can be useful when submitting
+          bug reports.
+
+-d        Display additional 'debugging' information for errors and
+          warnings produced during processing.  This normally would
+          not be used except to determine why you are getting all those
+          errors and wanted to see the actual data.  Normally The
+          Webalizer will just tell you it found an error, not the
+          actual data.  This option will display the data as well.
+          Config file keyword: Debug
+
+-F        Specify the log file type to process.  Normally, the
+          Webalizer expects to find a valid CLF or Combined format
+          we server log file.  This option allows you to process
+          wu-ftpd xferlogs, squid and W3C formatted web logs as well.
+          Values can be either 'clf', 'ftp', 'squid' or 'w3c' with
+          'clf' being the default.  Only the first character needs
+          to be specified (eg: -Fs will process a squid log).
+          Config file keyword: LogType
+
+-f        Fold out of sequence log records back into analysis, by
+          treating them as if they were the same date/time as the
+          last good record.  Normally, out of sequence log records
+          are ignored.  If you run apache, don't worry about this.
+          Config file keyword: FoldSeqErr
+
+-i        Ignore history file.  USE WITH CAUTION.  This causes The
+          Webalizer to ignore any existing history file produced from
+          previous runs and generate its output from scratch.  The
+          effect will be as if The Webalizer is being run for the
+          first time and any previous statistics will be lost (although
+          the HTML documents, if any, will not be deleted) on the main
+          index.html (yearly) web page.
+          Config file keyword: IgnoreHist
+
+-b        Ignore incremental data file.  USE WITH CAUTION.  This causes
+          The Webalizer to ignore any existing incremental (state) data
+          file produced by previous runs.  By ignoring the incremental
+          data file, all previous processing for the current month will
+          be lost, and those logs must be re-processed.
+          Config file keyword: IgnoreState
+
+-p        Preserve state (incremental processing).  This allows the
+          processing of partial logs in increments.  At the end of
+          the program, all relevant internal data is saved, so that
+          it may be restored the next time the program is run.  This
+          allows sites that must rotate their logs more than once a
+          month to still be able to use The Webalizer, and not worry
+          about having to gather and feed an entire months logs to
+          the program at the end of the month.  See the section on
+          "Incremental Processing" below for additional information.
+          The default is to not perform incremental processing.  Use
+          this command line option to enable the feature.
+          Config file keyword: Incremental
+
+-q        Quiet mode.  Normally, The Webalizer will produce various
+          messages while it runs letting you know what its doing.
+          This option will suppress those messages.  It should be
+          noted that this WILL NOT suppress errors and warnings, which
+          are output to STDERR.
+          Config file keyword: Quiet
+
+-Q        ReallyQuiet mode.  This allows suppression of _all_ messages
+          generated by The Webalizer, including warnings and errors.
+          Useful when The Webalizer is run as a cron job.
+          Config file keyword: ReallyQuiet
+
+-T        Display timing information.  The Webalizer keeps track of the
+          time it begins and ends processing, and normally displays the
+          total processing time at the end of each run.  If quiet mode
+          (-q or 'Quiet yes' in configuration file) is specified, this
+          information is not displayed.  This option forces the display
+          of timing totals if quiet mode has been specified, otherwise
+          it is redundant and will have no effect.
+          Config file keyword: TimeMe
+
+-c file   This option specifies a configuration file to use.  Configuration
+          files allow greater control over how The Webalizer behaves, and
+          there are several ways to use them.  As of version 0.98, The
+          Webalizer searches for a default configuration file in the
+          current directory named "webalizer.conf", and if not found,
+          will search in the /etc/ directory for a file of the same name.
+          In addition, you may specify a configuration file to use with
+          this command line option.
+
+-n name   This option specifies the hostname for the reports generated.
+          The hostname is used in the title of all reports, and is also
+          prepended to URLs in the reports.  This allows The Webalizer
+          to be run on log files for 'virtual' web servers or web servers
+          that are different than the machine the reports are located on,
+          and still allows clicking on the URLs to go to the proper
+          location.  If a hostname is not specified, either on the
+          command line or in a configuration file, The Webalizer attempts
+          to determine the hostname using a 'uname' system call.  If this
+          fails, "localhost" will be used as the hostname.
+          Config file keyword: HostName
+
+-o dir    This options specifies the output directory for the reports.
+          If not specified here or in a configuration file, the current
+          default directory will be used for output.
+          Config file keyword: OutputDir
+
+-x name   This option allows the generated pages to have an extension
+          other than '.html', which is the default.  Do not include the
+          leading period ('.') when you specify the extension.
+          Config file keyword: HTMLExtension
+
+-P name   Specify the file extensions for 'pages'.  Pages (sometimes
+          called 'PageViews') are normally html documents and CGI
+          scripts that display the whole page, not just parts of it.
+          Some system will need to define a few more, such as 'phtml',
+          'php3' or 'pl' in order to have them counted as well.  The
+          default is 'htm*' and 'cgi' for web logs and 'txt' for ftp.
+          Config file keyword: PageType
+
+-O name   Specify URLs which are not counted as 'pages'.  Requests
+          matching one of these URLs will not be counted as a page, even
+          if they have an extension matching one of the PageTypes defined
+          above or have no extension at all.
+          Config file keyword: OmitPage
+
+-t name   This option specifies the title string for all reports.  This
+          string is used, in conjunction with the hostname (if not blank)
+          to produce the actual title.  If not specified, the default of
+          "Usage Statistics for" will be used.
+          Config file keyword: ReportTitle
+
+-Y        Suppress Country graph.  Normally, The Webalizer produces
+          country statistics in both Graph and Columnar forms.  This
+          option will suppress the Country Graph from being generated.
+          Config file keyword: CountryGraph
+
+-G        Suppress hourly graph.  Normally, The Webalizer produces
+          hourly statistics in both Graph and Columnar forms.  This
+          option will suppress the Hourly Graph only from being generated.
+          Config file keyword: HourlyGraph
+
+-H        Suppress Hourly statistics.  Normally, The Webalizer produces
+          hourly statistics in both Graph and Columnar forms.  This
+          option will suppress the Hourly Statistics table only from
+          being generated.
+          Config file keyword: HourlyStats
+
+-K num    Specify how many months should be displayed in the main index
+          (yearly summary) table.  Default is 12 months.  Can be set to
+          anything between 12 and 120 months (1 to 10 years).
+          Config file keyword: IndexMonths
+
+-k num    Specify how many months should be displayed in the main index
+          (yearly summary) graph.  Default is 12 months.  Can be set to
+          anything between 12 and 72 months (1 to 6 years).
+          Config file keyword: GraphMonths
+
+-L        Disable Graph Legends.  The color coded legends displayed on
+          the in-line graphs can be disabled with this option.  The
+          default is to display the legends.
+          Config file keyword: GraphLegend
+
+-l num    Graph Lines.  Specify the number of background reference
+          lines displayed on the in-line graphics produced.  The default
+          is 2 lines, however can range anywhere from zero ('0') for
+          no lines, up to 20 lines (looks funny!).
+          Config file keyword: GraphLines
+
+-P name   Page type.  This is the extension of files you consider to
+          be pages for Pages calculations (sometimes called 'pageviews').
+          The default is 'htm*' and 'cgi' (plus whatever HTMLExtension
+          you specified if it is different).  Don't use a period!
+
+-m num    Specify a 'visit timeout'.  Visits are calculated by looking at
+          the time difference between the current and last request made
+          by a specific host.  If the difference is greater that the
+          visit timeout value, the request is considered a new visit.
+          This value is specified in number of seconds.  The default
+          is 30 minutes (1800).
+          Config file keyword: VisitTimeout
+
+-M num    Mangle user agent names.  Normally, The Webalizer will keep
+          track of the user agent field verbatim.  Unfortunately, there are
+          a ton of different names that user agents go by, and the field
+          also reports other items such as machine type and OS used. For
+          Example, Netscape 4.03 running on Windows 95 will report a
+          different string than Netscape 4.03 running on Windows NT, so even
+          though they are the same browser type, they will be considered
+          as two totally different browsers by The Webalizer.  For that
+          matter, Netscape 4.0 running on Windows NT will report different
+          names if one is run on an Alpha and the other on an Intel
+          processor!  Internet Exploder is even worse, as it reports itself
+          as if it were Netscape and you have to search the given string a
+          little deeper to discover that it is really MSIE!  In order to
+          consolidate generic browser types, this option will cause The
+          Webalizer to 'mangle' the user agent field, attempting to
+          consolidate generic browser types. There are 6 levels that can be
+          specified, each producing different levels of detail.  Level 5
+          displays only the browser name (MSIE or Mozilla) and the major
+          version number.  Level 4 will also display the minor version
+          number (single decimal place).  Level 3 will display the minor
+          version number to two decimal places.  Level 2 will add any
+          sub-level designation (such as Mozilla/3.01Gold or MSIE 3.0b).
+          Level 1 will also attempt to add the system type.  The default
+          Level 0 will disable name mangling and leave the user agent
+          field unmodified, producing the greatest amount of detail.
+          Configuration file keyword: MangleAgents
+
+-g num    This option allows you to specify the level of domains name
+          grouping to be performed.  The numeric value represents the
+          level of grouping, and can be thought of as the 'number of
+          dots' to be displayed.  The default value of 0 disables any
+          domain name grouping.
+          Configuration file keyword: GroupDomains
+
+-D name   This allows the specification of a DNS Cache file name.  This
+          filename MUST be specified if you have dns lookups enabled
+          (using the -N command line switch or DNSChildren configuration
+          keyword).  The filename is relative to the default output
+          directory if an absolute path is not specified (ie: starts
+          with a leading '/').  This option is only available if DNS
+          support was enabled at compile time, otherwise an 'Invalid
+          Keyword' error will be generated.  See the DNS.README file
+          for additional information regarding DNS lookups.
+          Configuration file keyword: DNSCache
+
+-N num    Number of DNS child processes to use for reverse DNS lookups.
+          If specified, a DNSCache name MUST be specified also.  If you
+          do not wish a DNS cache file to be generated, specify a value
+          of zero ('0') to disable it.  This does not prevent using an
+          existing cache file, only the generation of one at run time.
+          See the DNS.README file for additional information.
+          Configuration file keyword: DNSChildren
+
+-j        Enable native GeoDB geolocation services.
+          Configuration file keyword: GeoDB
+
+-J name   Specify an alternate GeoDB database filename to use.  This
+          shouldn't normally be needed.  If used, the filename 'name'
+          is relative to the output directory being used unless an
+          absolute path is specified (ie: starts with a leading '/').
+          Configuration file keyword: GeoDBDatabase
+
+-w        Enable GeoIP support if it is available.
+          Configuration file keyword: GeoIP
+
+-W name   Specify an alternate GeoIP database filename to use.  This
+          shouldn't normally be needed.  If used, the filename 'name'
+          is relative to the specified output directory unless an
+          absolute name is given (ie: starts with a leading '/').
+          Configuration file keyword: GeoIPDatabase
+
+-z name   Specify location of the country flag graphics and enable
+          their display in the top country table.  The directory name
+          is relative to the output directory unless an absolute path
+          is specified (ie: starts with a leading '/').
+          Configuration file keyword: FlagDir
+
+Hide Options
+------------
+
+The following options take a string argument to use as a comparison
+for matching.  Except for the IndexAlias option, the string argument
+can be plain text, or plain text that either starts or ends with the
+wildcard character '*'.
+
+For Example:
+
+Given the string "yourmama/was/here", the arguments "was", "*here" and
+"your*" will all produce a match.
+
+
+-a name   This option allows hiding of user agents (browsers) from the
+          "Top User Agents" table in the report.  This option really
+          isn't too useful as there are a zillion different names that
+          current browsers go by, depending where they were obtained,
+          however you might have some particular user agents that hit
+          your site a lot that you would like to exclude from the list.
+          You must have a web server that includes user agents in its
+          log files for this option to be of any use.  In addition, it
+          is also useless if you disable the user agent table in the
+          report (see the -A command line option or "TopAgents"
+          configuration file keyword). You can specify as many of these
+          as you want on the command line.  The wildcard character '*'
+          can be used either in front of or at the end of the string.
+          (ie: Mozilla/4.0* would match anything that starts with the
+          string "Mozilla/4.0").
+          Config file keyword: HideAgent
+
+-r name   This option allows hiding of referrers from the "Top Referrer"
+          table in the report.  Referrers are URLs, either on your own
+          local site or a remote site, that referred the user to a URL
+          on your web server.  This option is normally used to hide
+          your own server from the table, as your own pages are usually
+          the top referrers to your own pages (well, you get the idea).
+          You must have a web server that includes referrer information
+          in the log files for this option to be of any use.  In addition,
+          it is also useless if you disable the referrers table in the
+          report (see the -R command line option or "TopReferrers"
+          configuration file keyword).  You can specify as many of these
+          as you like on the command line.
+          Config file keyword: HideReferrer
+
+-s name   This option allows hiding of sites from the "Top Sites" table
+          in the report.  Normally, you will only want to hide your own
+          domain name from the report, as it usually is one of the top
+          sites to visit your web server.  This option is of no use if
+          you disable the top sites table in the report (see the -S
+          command line option or "TopSites" configuration file option).
+          Config file keyword: HideSite
+
+-X        This causes all individual sites to be hidden, which results
+          in only grouped sites to be displayed on the report.
+          Config file keyword: HideAllSites
+
+-u name   This option allows hiding of URLs from the "Top URLs" table
+          in the report.  Normally, this option is used to hide images,
+          audio files and other objects your web server dishes out that
+          would otherwise clutter up the table.  This option is of no
+          use if you disable the top URLs table in the report (see the
+          -U command line option or "TopURLs" configuration file keyword).
+          Config file keyword: HideURL
+
+-I name   This option allows you to specify additional index.html aliases.
+          The Webalizer usually strips the string 'index.*' from URLs
+          before processing (unless disabled using the 'DefaultIndex'
+          config option), which has the effect of turning a URL such
+          as /somedir/index.html into just /somedir/ which is really the
+          same URL and should be treated as such.  This option allows you
+          to specify _additional_ strings that are to be treated the same
+          way.  Use with care, improper use could cause unexpected results.
+          For example, if you specify the alias string of 'home', a URL
+          such as /somedir/homepages/brad/home.html would be converted
+          into just /somedir/ which probably isn't what was intended.
+          This option is useful if your web server uses a different default
+          index page other than the standard 'index.html' or 'index.htm',
+          such as 'home.html' or 'homepage.html'.  The string specified
+          is searched for _anywhere_ in the URL, so "home.htm" would
+          turn both "/somedir/home.htm" and "/somedir/home.html" into
+          just "/somedir/". Wildcards are _not_ allowed on this one.
+          Config file keyword: IndexAlias
+
+Table Size Options
+------------------
+
+-e num    This option specifies the number of entries to display in the
+          "Top Entry Pages" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopEntry
+
+-E num    This option specifies the number of entries to display in the
+          "Top Exit Pages" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopExit
+
+-A num    This option specifies the number of entries to display in the
+          "Top User Agents" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopAgents
+
+-C num    This option specifies the number of entries to display in the
+          "Top Countries" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopCountries
+
+-R num    This option specifies the number of entries to display in the
+          "Top Referrers" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopReferrers
+
+-S num    This option specifies the number of entries to display in the
+          "Top Sites" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopSites
+
+-U num    This option specifies the number of entries to display in the
+          "Top URLs" table.  To disable the table, use a value of
+          zero (0).
+          Config file keyword: TopURLs
+
+--------------------------------------------------------------------------
+
+
+CONFIGURATION FILES
+-------------------
+
+The Webalizer allows configuration files to be used in order to simplify
+life for all.  There are several ways that configuration files are accessed
+by the Webalizer.  When The Webalizer first executes, it looks for a
+default configuration file named "webalizer.conf" in the current directory,
+and if not found there, will look for "/etc/webalizer.conf".  In addition,
+configuration files may be specified on the command line with the '-c'
+option.  There are lots of different ways you can combine the use of
+configuration files and command line options to produce various results.
+The Webalizer always looks for and reads configuration options from a
+default configuration file before doing anything else.  Because of this,
+you can override options found in the default file by use of additional
+configuration files specified on the command line or command line options
+themselves.  If you specify a configuration file on the command line, you
+can override options in it by additional command line options which follow.
+For example, most users will most likely want to create the default file
+/etc/webalizer.conf and place options in it to specify the hostname, log
+file, table options, etc...  At the end of the month when a different log
+file is to be used (the end of month log), you can run The Webalizer as
+usual, but put the different filename on the end of the command line, which
+will override the log file specified in the configuration file.  It should
+be noted that you cannot override some configuration file options by the
+use of command line arguments.  For example, if you specify "Quiet yes" in
+a configuration file, you cannot override this with a command line argument,
+as the command line option only _enables_ the feature (-q option).
+
+The configuration files are standard ASCII text files that may be created
+or edited using any standard editor.  Blank lines and lines that begin
+with a pound sign ('#') are ignored.  Any other lines are considered to
+be configuration lines, and have the form "Keyword Value", where the
+'Keyword' is one of the currently available configuration keywords defined
+below, and 'Value' is the value to assign to that particular option.  Any
+text found after the keyword up to the end of the line is considered the
+keyword's value, so you should not include anything after the actual value
+on the line that is not actually part of the value being assigned.  The
+file "sample.conf" provided with the distribution contains lots of useful
+documentation and examples as well.  It should be noted that you do not
+have to use any configuration files at all, in which case, default values
+will be used (which should be sufficient for most sites).
+
+--------------------------------------------------------------------------
+
+General Configuration Keywords
+------------------------------
+
+LogFile       This defines the log file to use. It should be a fully qualified
+              name (ie: contain the path), but relative names will work as
+              well.  If not specified, the logfile defaults to STDIN. 
+
+LogType       This specified the log file type being used.  Normally, The
+              Webalizer processes web logs in either CLF or Combined format.
+              You may also process wu-ftpd xferlog formatted logs, squid
+              proxy logs or W3C formatted web logs by setting the appropriate
+              type using this keyword.   Values may be either 'clf', 'ftp',
+              'squid' or 'w3c'.  Ensure that you specify the proper file type,
+              otherwise you will be presented with a long stream of 'invalid
+              record' messages when the Webalizer is run ;)
+              Command line argument: -F
+
+OutputDir     This defines the output directory to use for the reports.  If
+              it is not specified, the current directory is used.
+              Command line argument: -o
+
+HistoryName   Allows specification of a history path/filename if desired.
+              The default is to use the file named 'webalizer.hist', kept
+              in the normal output directory (OutputDir above).  Any name
+              specified is relative to the normal output directory unless
+              an absolute path name is given (ie: starts with a '/').
+
+ReportTitle   This specifies the title to use for the generated reports.
+              It is used in conjunction with the hostname (unless blank)
+              to produce the final report titles.  If not defined, the
+              default of "Usage Statistics for" is used.
+              Command line argument: -t
+
+HostName      This defines the hostname.  The hostname is used in the
+              report title as well as being prepended to URLs in the
+              "Top URLs" table.  This allows The Webalizer to be run
+              on "virtual" web servers, or servers that do not reside
+              on the local machine, and allows clicking on the URL to
+              go to the right place.  If not specified, The Webalizer
+              attempts to get the hostname via a 'uname' system call,
+              and if that fails, will default to "localhost".
+              Command line argument: -n
+
+UseHTTPS      Causes the links in the 'Top URLs' table to use 'https://'
+              instead of the default 'http://' prefix.  Not much use if
+              you run a mix of secure/insecure servers on your machine.
+              Only useful if you run the analysis on a secure servers
+              logs, and want the links in the table to work properly.
+
+HTAccess      Enables the creation of a default .htaccess file in the
+              output directory.  If enabled, the file will be created
+              (with a single "DirectoryIndex" directive),  unless one
+              already exists.  The default is 'no', which disables the
+              creation of any .htaccess files.
+
+Quiet         This allows you to enable or disable informational messages
+              while it is running.  The values for this keyword can be
+              either 'yes' or 'no'.  Using "Quiet yes" will suppress these
+              messages, while "Quiet no" will enable them.  The default
+              is 'no' if not specified, which will allow The Webalizer
+              to display informational messages.  It should be noted that
+              this option has no effect on Warning or Error messages that
+              may be generated, as they go to STDERR.
+              Command line argument: -q
+
+ReallyQuiet   This allows all generated output to be suppressed, including
+              warning and error messages.  The values for this keyword
+              can be either 'yes' or 'no', with 'no' being the default.
+              Command line argument: -Q
+
+TimeMe        This allows you to display timing information regardless of
+              any "quiet mode" specified.  Useful only if you did in fact
+              tell the webalizer to be quiet either by using the -q command
+              line option or the "Quiet" keyword, otherwise timing stats
+              are normally displayed anyway.  Values may be either 'yes'
+              or 'no', with the default being 'no'.
+              Command line argument: -T
+
+GMTTime       This keyword allows timestamps to be displayed in GMT (UTC)
+              time instead of local time.  Normally The Webalizer will
+              display timestamps in the time-zone of the local machine
+              (ie: PST or EDT).  This keyword allows you to specify the
+              display of timestamps in GMT (UTC) time instead.  Values
+              may be either 'yes' or 'no'.  Default is 'no'.
+
+Debug         This tells The Webalizer to display additional information
+              when it encounters Warnings or Errors.  Normally, The
+              Webalizer will just tell you it found a bad record or
+              field.  This option will enable the display of the actual
+              data that produced the Warning or Error as well.  Useful
+              only if you start getting lots of Warnings or Errors and
+              want to determine the cause.  Values may be either 'yes'
+              or 'no', with the default being 'no'.
+              Command line argument: -d
+
+IgnoreHist    This suppresses the reading of a history file.  USE WITH
+              EXTREME CAUTION as the history file is how The Webalizer
+              keeps track of previous months.  The effect of this option
+              is as if The Webalizer was being run for the very first
+              time, and any previous data is discarded.  Values may be
+              either 'yes' or 'no', with the default being 'no'.
+              Command line argument: -i
+
+IgnoreState   This suppresses the reading of an existing incremental
+              data file.  USE WITH EXTREME CAUTION!  By ignoring an
+              existing incremental data file, all previous processing
+              for the current month will be lost, and those logs must
+              be re-processed.  Values may be 'yes' or 'no', with the
+              default being 'no'.
+              Command line argument: -b
+
+FoldSeqErr    Allows log records that are out of sequence to be folded
+              back into the analysis, by treating them as if they had
+              the same date/time as the last good record.  Normally,
+              out of sequence log records are simply ignored.  If you
+              run apache, don't worry about this.
+
+VisitTimeout  Set the 'visit timeout' value.  Visits are determined by
+              looking at the time difference between the current and last
+              request made by a specific site.  If the difference in time
+              is greater than the visit timeout value, the request is
+              considered a new visit.  The value is in number of seconds,
+              and defaults to 30 minutes (1800).
+              Command line argument: -m
+
+PageType      Allows you to define the 'page' type extension.  Normally,
+              people consider HTML and CGI scripts as 'pages'.  This
+              option allows you to specify what extensions you consider
+              a page.  Default is 'htm*' and 'cgi' for web logs, and
+              'txt' for ftp logs.
+              Command line argument: -P
+
+PagePrefix    Allows all requests with a specified prefix to be considered
+              as 'pages'. If you want everything under /documents to be
+              treated as pages no matter what their extension is. Also
+              useful if you have cgi-scripts with PATH_INFO.
+
+OmitPage      Allows specified URLs to not be counted as pages under any
+              circumstance, even if they have an extension matching a
+              PageType or PagePrefix as defined above.
+
+GraphLegend   Enable/disable the display of color coded legends on the
+              produced graphs.  Default is 'yes', to display them.
+              Command line argument: -L
+
+GraphLines    Specify the number of background reference lines to display
+              on produced graphs.  The default is 2.  To disable the use
+              of background lines, use zero ('0').
+              Command line argument: -l
+
+IndexMonths   Specify the number of months to display in the main index
+              (yearly summary) table.  Default is 12 months.  Can be set
+              to anything between 12 and 120 months (1 to 10 years).
+              Command line argument: -K
+
+YearHeaders   Enable/disable the display of year headers in the main index
+              (yearly summary) table.  If enabled, year headers will be
+              shown when the table is displaying more than 16 months worth
+              of data.  Values can be 'yes' or 'no'.  Default is 'yes'.
+
+GraphMonths   Specify the number of months to display in the main index
+              (yearly summary) graph.  Default is 12 months.  Can be set
+              to anything between 12 and 72 months (1 to 6 years).
+              Command line argument: -k
+
+CountryGraph  This keyword is used to either enable or disable the creation
+              and display of the Country Usage graph.  Values may be either
+              'yes' or 'no', with the default being 'yes'.
+              Command line argument: -Y
+
+CountryFlags  Enables or disables the display of flags in the top country
+              table.  If enabled, the default directory 'flags' directly
+              under the output directory will be used unless a different
+              path is specified with the 'FlagDir' option below.
+              Command line argument: -zflags
+
+FlagDir       Specifies the location of flag graphics.  If not specified,
+              the default is in the 'flags' directory directly under the
+              output directory being used for the reports.  If specified,
+              the display of flags will be enabled by default.
+              Command line argument: -z
+
+DailyGraph    This keyword is used to either enable or disable the creation
+              and display of the Daily Usage graph.  Values may be either
+              'yes' or 'no', with the default being 'yes'.
+
+DailyStats    This keyword is used to either enable or disable the creation
+              and display of the Daily Usage statistics table.  Values may
+              be either 'yes' or 'no', with the default being 'yes'.
+
+HourlyGraph   This keyword is used to either enable or disable the creation
+              and display of the Hourly Usage graph.  Values may be either
+              'yes' or 'no', with the default being 'yes'.
+              Command line argument: -G
+
+HourlyStats   This keyword is used to either enable or disable the creation
+              and display of the Hourly Usage statistics table.  Values may
+              be either 'yes' or 'no', with the default being 'yes'.
+              Command line argument: -H
+
+IndexAlias    This allows additional 'index.html' aliases to be defined.
+              Normally, The Webalizer scans for and strips the string
+              "index." from URLs before processing them (unless disabled
+              using the DefaultIndex config option below).  This turns a
+              URL such as /somedir/index.html into just /somedir/ which
+              is really the same URL.  This keyword allows _additional_
+              names to be treated in the same fashion for sites that use
+              different default names, such as "home.html".  The string
+              is scanned for anywhere in the URL, so care should be used
+              if and when you define additional aliases.  For example,
+              if you were to use an alias such as 'home', the URL
+              /somedir/homepages/brad/home.html would be turned into just
+              /somedir/ which probably isn't the intended result.  Instead,
+              you should have specified 'home.htm' which would correctly
+              turn the URL into /somedir/homepages/brad/ like intended.
+              It should also be noted that specified aliases are scanned
+              for in EVERY log record... A bunch of aliases will noticeably
+              degrade performance as each record has to be scanned for
+              every alias defined.  You don't have to specify 'index.' as
+              it is always the default (unless disabled with the config
+              option "DefaultIndex" described below).
+              Command line argument: -I 
+
+DefaultIndex  This option is used to enable/disable the use of "index." as
+              a default index name to be stripped from the end of a URL.
+              Most sites should not need to use this option, however some
+              may find it useful, particularly those whose default index
+              file name is something different, or those sites that use
+              'index.php' or similar URLs to generate dynamic content.
+              This option does not effect any of the names that may be
+              defined using the IndexAlias option, and those names will
+              still function as described.  Values may be 'yes' or 'no',
+              with 'yes' being the default.
+
+MangleAgents  The MangleAgents keyword specifies the level of user agent
+              name mangling, if any.  There are 6 levels that may be specified,
+              each producing a different level of detail displayed.  Level 5
+              displays only the browser name (MSIE or Mozilla) and the major
+              version number.  Level 4 adds the minor version (single
+              decimal place).  Level 3 adds the minor version to two decimal
+              places.  Level 2 will also add any sub-level designation
+              (such as Mozilla/3.01Gold or MSIE 3.0b).  Level 1 will also
+              attempt to add the system type.  The default level 0 will
+              leave the user agent field unmodified and produces the
+              greatest amount of detail.
+              Command line argument: -M
+
+SearchEngine  This keyword allows specification of search engines and
+              their query strings.  Search strings are obtained from
+              the referrer field in the record, and in order to work
+              properly, the Webalizer needs to know what query strings
+              different search engines use.  The SearchEngine allows
+              you to specify the search engine and its query string
+              to parse the search string from.  The line is formatted
+              as:  "SearchEngine engine-string query-string"  where
+              'engine-string' is a substring for matching the search
+              engine with, such as "yahoo.com" or "altavista".  The
+              'query-string' is the unique query string that is added
+              to the URL for the search engine, such as "search=" or
+              "MT=" with the actual search strings appended to the
+              end.  There is no command line option for this keyword.
+
+SearchCaseI   The SearchCaseI option specifies if search strings should
+              be lowercased (case insensitive) or not.  Since most
+              search engines use case insensitive searches (ie: a
+              search for "Hello" is the same as "HELLO" or "hello"),
+              converting to lowercase will improve keyword accuracy,
+              which is the default.  If desired, case sensitivity can
+              be forced with this option.  The value can be 'yes' or
+              'no', with 'yes' (case insensitive) being the default.
+
+Incremental   This allows incremental processing to be enabled or disabled.
+              Incremental processing allows processing partial logs without
+              the loss of detail data from previous runs in the same month.
+              This feature saves the 'internal state' of the program so that
+              it may be restored in following runs.  See the section above
+              titled "Incremental Processing" for additional information.
+              The value may be 'yes' or 'no', with the default being 'no'.
+              Command line argument: -p
+
+IncrementalName
+              Allows specification of the incremental data filename if
+              desired.  Normally, the file named "webalizer.current' is
+              used, kept in the standard output directory.  If specified,
+              filenames are relative to the standard output directory,
+              unless an absolute name is given (ie: starts with '/').
+
+StripCGI      Determines if CGI variables should be stripped from the
+              end of URLs or not.  Normally, these variables are removed
+              from URLs to improve accuracy, however some sites may wish
+              to keep them preserved (particularly on highly dynamic
+              sites).  Values may be either 'yes' or 'no', with 'yes'
+              being the default.
+
+TrimSquidURL  Allows squid log URLs to be reduced in granularity by
+              truncating them after a specified number of '/' path
+              separators after the http:// portion.  A value of 1 will
+              cause all URLs to be summarized by domain only.  The
+              default value is zero (0), which leaves URLs unmodified.
+
+DNSCache      Specifies the DNS cache filename.  This name is relative
+              to the default output directory unless an absolute name
+              is given (ie: starts with '/').  See the DNS.README file
+              for additional information.
+              Command line argument: -D
+
+DNSChildren   The number of DNS children processes to run in order to
+              create/update the DNS cache file.  If specified, the DNS
+              cache filename must also be specified (see above).  Use
+              a value of zero ('0') to disable.  See the DNS.README
+              file for additional information.
+              Command line argument: -N
+
+CacheIPs      Specifies if unresolved addresses should also be cached
+              in the DNS database.  If enabled, unresolved IP addresses
+              will be stored along with resolved addresses.  This may
+              be useful on some sites that have lots of unresolved IPs
+              visiting so they are not looked up each time the program
+              is run.  Values may be 'yes' or 'no'.  Default is 'no'.
+
+CacheTTL      Specifies the Time To Live (TTL) value for cached DNS
+              entries in days.  Default value is 7 (1 week).  Can be
+              any value between 1 and 100.
+
+GeoDB         Controls the use of the native GeoDB geolocation services
+              provided by The Webalizer.  Values may be 'yes' or 'no'
+              with 'no' being the default.
+              Command line argument: -j
+
+GeoDBDatabase Specifies and alternate GeoDB database filename to use.
+              This is relative to the output directory being used unless
+              an absolute path is given (ie: starts with a '/').
+              Command line argument: -J
+
+GeoIP         Controls the use of GeoIP geolocation services.  If The
+              Webalizer was compiled with GeoIP support, it is used by
+              default.  Values may be 'yes' or 'no'. Default is 'yes'.
+              Command line argument: -w
+
+GeoIPDatabase Specifies an alternate GeoIP database filename to use.
+              This name is relative to the default output directory
+              unless an absolute name is given (ie: starts with '/').
+              Command line argument: -W
+
+
+Top Table Keywords
+------------------
+
+TopAgents     This allows you to specify how many "Top" user agents are
+              displayed in the "Top User Agents" table.  The default
+              is 15.  If you do not want to display user agent statistics,
+              specify a value of zero (0).  The display of user agents
+              will only work if your web server includes this information
+              in its log file (ie: a combined log format file).
+              Command line argument: -A 
+
+AllAgents     Will cause a separate HTML page to be generated for all
+              normally visible User Agents.  A link will be added to
+              the bottom of the "Top User Agents" table if enabled.
+              Value can be either 'yes' or 'no', with 'no' being the
+              default.
+
+TopCountries  This allows you to specify how many "Top" countries are
+              displayed in the "Top Countries" table.  The default is
+              30.  If you want to disable the countries table, specify
+              a value of zero (0).
+              Command line argument: -C 
+
+TopReferrers  This allows you to specify how many "Top" referrers are
+              displayed in the "Top Referrers" table.  The default is
+              30.  If you want to disable the referrers table, specify
+              a value of zero (0).  The display of referrer information
+              will only work if your web server includes this information
+              in its log file (ie: a combined log format file).
+              Command line argument: -R 
+
+AllReferrers  Will cause a separate HTML page to be generated for all
+              normally visible Referrers.  A link will be added to the
+              "Top Referrers" table if enabled.  Value can be either
+              'yes' or 'no', with 'no' being the default.
+
+TopSites      This allows you to specify how many "Top" sites are
+              displayed in the "Top Sites" table.  The default is 30.
+              If you want to disable the sites table, specify a value
+              of zero (0).
+              Command line argument: -S 
+
+TopKSites     Identical to TopSites, except for the 'by KByte' table.
+              Default is 10.  No command line switch for this one.
+
+AllSites      Will cause a separate HTML page to be generated for all
+              normally visible Sites.  A link will be added to the
+              bottom of the "Top Sites" table if enabled.  Value can
+              be either 'yes' or 'no', with 'no' being the default.
+
+TopURLs       This allows you to specify how many "Top" URLs are
+              displayed in the "Top URLs" table.  The default is 30.
+              If you want to disable the URLs table, specify a value
+              of zero (0).
+              Command line argument: -U 
+
+TopKURLs      Identical to TopURLs, except for the 'by KByte' table.
+              Default is 10.  No command line switch for this one.
+
+AllURLs       Will cause a separate HTML page to be generated for all
+              normally visible URLs.  A link will be added to the
+              bottom of the "Top URLs" table if enabled.  Value can
+              be either 'yes' or 'no', with 'no' being the default.
+
+TopEntry      Allows you to specify how many "Top Entry Pages" are
+              displayed in the table.  The default is 10.  If you
+              want to disable the table, specify a value of zero (0).
+              Command line argument: -e
+
+TopExit       Allows you to specify how many "Top Exit Pages" are
+              displayed in the table.  The default is 10.  If you
+              want to disable the table, specify a value of zero (0).
+              Command line argument: -E
+
+TopSearch     Allows you to specify how many "Top Search Strings" are
+              displayed in the table.  The default is 20.  If you
+              want to disable the table, specify a value of zero (0).
+              Only works if using combined log format (ie: contains
+              referrer information).
+
+TopUsers      This allows you to specify how many "Top" usernames are
+              displayed in the "Top Usernames" table.  Usernames are
+              only available if you use http authentication on your
+              web server, or when processing wu-ftpd xferlogs.  The
+              default value is 20.  If you want to disable the Username
+              table, specify a value of zero (0).
+
+AllUsers      Will cause a separate HTML page to be generated for all
+              normally visible usernames.  A link will be added to the
+              bottom of the "Top Usernames" table if enabled.  Value
+              can be either 'yes' or 'no', with 'no' being the default.
+
+AllSearchStr  Will create a separate HTML page to be generated for all
+              normally visible Search Strings.  A link will be added
+              to the bottom of the "Top Search Strings" table if
+              enabled.  Value can be either 'yes' or 'no', with 'no'
+              being the default.
+
+
+Hide Object Keywords
+--------------------
+
+These keywords allow you to hide user agents, referrers, sites, URLs
+and usernames from the various "Top" tables.  The value for these keywords
+are the same as those used in their command line counterparts.  You
+can specify as many of these as you want without limit.  Refer to the
+section above on "Command Line Options" for a description of the string
+formatting used as the value.  Values cannot exceed 80 characters in
+length.
+
+HideAgent     This allows specified user agents to be hidden from the
+              "Top User Agents" table.  Not very useful, since there
+              a zillion different names by which browsers go by today,
+              but could be useful if there is a particular user agent
+              (ie: robots, spiders, real-audio, etc..) that hits your
+              site frequently enough to make it into the top user agent
+              listing.  This keyword is useless if 1) your log file does
+              not provide user agent information or 2) you disable the
+              user agent table.
+              Command line argument: -a 
+
+HideReferrer  This allows you to hide specified referrers from the
+              "Top Referrers" table.  Normally, you would only specify
+              your own web server to be hidden, as it is usually the
+              top generator of references to your own pages.  Of course,
+              this keyword is useless if 1) your log file does not include
+              referrer information or 2) you disable the top referrers
+              table.
+              Command line argument: -r 
+
+HideSite      This allows you to hide specified sites from the "Top
+              Sites" table.  Normally, you would only specify your own
+              web server or other local machines to be hidden, as they
+              are usually the highest hitters of your web site, especially
+              if you have their browsers home page pointing to it.
+              Command line argument: -s 
+
+HideAllSites  This allows hiding all individual sites from the display,
+              which can be useful when a lot of groupings are being
+              used (since grouped records cannot be hidden).  It is
+              particularly useful in conjunction with the GroupDomain
+              feature, however can be useful in other situations as well.
+              Value can be either 'yes' or 'no', with 'no' the default.
+              Command line argument: -X
+
+HideURL       This allows you to hide URLs from the "Top URLs" table.
+              Normally, this is used to hide items such as graphic files,
+              audio files or other 'non-html' files that are transferred
+              to the visiting user.
+              Command line argument: -u 
+
+HideUser      This allows you to hide Usernames from the "Top Usernames"
+              table.  Usernames are only available if you use http based
+              authentication on your web server.
+
+
+Group Object Keywords
+---------------------
+
+The Group* keywords allow object grouping based on Site, URL, Referrer,
+User Agent and Usernames.  Combined with the Hide* keywords, you can
+customize exactly what will be displayed in the 'Top' tables.  For example,
+to only display totals for a particular directory, use a GroupURL and
+HideURL with the same value (ie: '/help/*').  Group processing is only
+done after the individual record has been fully processed, so name mangling
+and site total updates have already been performed.  Because of this, groups
+are not counted in the main site total (as that would cause duplication).
+Groups can be displayed in bold and shaded as well.  Grouped records are
+not, by default, hidden from the report.  This allows you to display a
+grouped total, while still being able to see the individual records, even
+if they are part of the group.  If you want to hide the detail records,
+follow the Group* directive with a Hide* one using the same value.  There
+are no command line switches for these keywords.  The Group* keywords also
+accept an optional label to be displayed instead of the actual value used.
+This label should be separated from the value by at least one whitespace
+character, such as a space or tab character.  If the match string contains
+whitespace (spaces or tabs),  the string should be quoted, using either
+single or double quotes.  See the sample configuration file for examples.
+
+GroupReferrer Allows grouping Referrers.  Can be handy for some of the
+              major search engines that have multiple host names a
+              referral could come from.
+
+GroupURL      This keyword allows grouping URLs. Useful for grouping
+              complete directory trees.
+
+GroupSite     This keywords allows grouping Sites.  Most used for
+              grouping top level domains and unresolved IP address
+              for local dial-ups, etc...
+
+GroupAgent    Groups User Agents.  A handy example of how you could use
+              this one is to use "Mozilla" and "MSIE" as the values for
+              GroupAgent and HideAgent keywords.  Make sure you put the
+              "MSIE" one first.
+
+GroupDomains  Allows automatic grouping of domains.  The numeric value
+              represents the level of grouping, and can be thought of
+              as 'the number of dots' to display.  A 1 will display
+              second level domains only (xxx.xxx), a 2 will display
+              third level domains (xxx.xxx.xxx) etc...  The default
+              value of 0 disables any domain grouping.
+              Command line argument: -g
+
+GroupUser     Allows grouping of usernames.  Combined with a group
+              name, this can be handy for displaying statistics on
+              a particular group of users without displaying their
+              real usernames.
+
+GroupShading  Allows shading of table rows for groups.  Value can be
+              'yes' or 'no', with the default being 'yes'.
+
+GroupHighlight Allows bolding of table rows for groups.  Value can be
+               'yes' or 'no', with the default being 'yes'.
+
+
+Ignore/Include Object Keywords
+----------------------
+
+These keywords allow you to completely ignore log records when generating
+statistics, or to force their inclusion regardless of ignore criteria.
+Records can be ignored or included based on site, URL, user agent, referrer
+and username.  Be aware that by choosing to ignore records, the accuracy of
+the generated statistics become skewed, making it impossible to produce
+an accurate representation of load on the web server.  These keywords
+behave identical to the Hide* keywords above, where the value can have
+a leading or trailing wildcard '*'.  These keywords, like the Hide* ones,
+have an absolute limit of 80 characters for their values.  These keywords
+do not have any command line switch counterparts, so they may only be
+specified in a configuration file.  It should also be pointed out that
+using the Ignore/Include combination to selectively exclude an entire
+site while including a particular 'chunk' is _extremely_ inefficient,
+and should be avoided.  Try grep'ing the records into a separate file
+and process it instead.
+
+IgnoreSite    This allows specified sites to be completely ignored from
+              the generated statistics.
+
+IgnoreURL     This allows specified URLs to be completely ignored from
+              the generated statistics.  One use for this keyword would
+              be to ignore all hits to a 'temporary' directory where
+              development work is being done, but is not accessible to
+              the outside world.
+
+IgnoreReferrer This allows records to be ignored based on the referrer
+               field.
+
+IgnoreAgent   This allows specified User Agent records to be completely
+              ignored from the statistics.  Maybe useful if you really
+              don't want to see all those hits from MSIE :)
+
+IgnoreUser    This allows specified username records to be completely
+              ignored from the statistics.  Usernames can only be used
+              if you use http authentication on your server.
+
+IncludeSite   Force the record to be processed based on hostname.  This
+              takes precedence over the Ignore* keywords.
+
+IncludeURL    Force the record to be processed based on URL.  This takes
+              precedence over the Ignore* keywords.
+
+IncludeReferrer Force the record to be processed based on referrer.
+                This takes precedence over the Ignore* keywords.
+
+IncludeAgent  Force the record to be processed based on user agent.
+              This takes precedence over the Ignore* keywords.
+
+IncludeUser   Force the record to be processed based on username.
+              Usernames are only available if you use http based
+              authentication on your server.  This takes precedence over
+              the Ignore* keywords.
+
+
+Dump Object Keywords
+--------------------
+
+The Dump* Keywords allow text files to be generated that can then be used
+for import into most database, spreadsheet and other external programs.
+The file is a standard tab delimited text file, meaning that each column
+is separated by a tab (0x09) character.  A header record may be included
+if required, using the 'DumpHeader' keyword.  Since these files contain
+all records that have been processed, including normally hidden records,
+an alternate location for the files can be specified using the 'DumpPath'
+keyword, otherwise they will be located in the default output directory.
+
+DumpPath      Specifies an alternate location for the dump files.  The
+              default output location will be used otherwise.  The value
+              is the path portion to use, and normally should be an
+              absolute path (ie: has a leading '/' character), however
+              relative path names can be used as well, and will be
+              relative to the output directory location.
+
+DumpExtension Allows the dump filename extensions to be specified. The
+              default extension is "tab", however may be changed with
+              this option.
+
+DumpHeader    Allows a header record to be written as the first record
+              of the file.  Value can be either 'yes' or 'no',  with
+              the default being 'no'.
+
+DumpSites     Dump tab delimited sites file.  Value can be either 'yes'
+              or 'no', with the default being 'no'.   The filename used
+              is site_YYYYMM.tab (YYYY=year, MM=month).
+
+DumpURLs      Dump tab delimited url file.  Value can be either 'yes' or
+              'no', with the default being 'no'.  The filename used is
+              url_YYYYMM.tab (YYYY=year, MM=month).
+
+DumpReferrers Dump tab delimited referrer file.  Value can be either
+              'yes' or 'no', with the default being 'no'.  Filename
+              used is ref_YYYYMM.tab (YYYY=year, MM=month).  Referrer
+              information is only available if present in the log
+              file (ie: combined web server log).
+
+DumpAgents    Dump tab delimited user agent file.  Value can be either
+              'yes' or 'no', with the default being 'no'.  Filename
+              used is agent_YYYYMM.tab (YYYY=year, MM=month).  User
+              agent information is only available if present in the
+              log file (ie: combined web server log).
+
+DumpUsers     Dump tab delimited username file.  Value can be either
+              'yes' or 'no', with the default being 'no'.  Filename
+              used is user_YYYYMM.tab (YYYY=year, MM=month).  The
+              username data is only available if processing a wu-ftpd
+              xferlog or http authentication is used on the web server
+              and that information is present in the log.
+
+DumpSearchStr Dump tab delimited search string file.  Value can be
+              either 'yes' or 'no', with the default being 'no'.
+              Filename used is search_YYYYMM.tab (YYYY=year, MM=month).
+              the search string data is only available if referrer
+              information is present in the log being processed and
+              recognized search engines were found and processed.
+
+
+
+HTML Generation Keywords
+------------------------
+
+These keywords allow you to customize the HTML code that The Webalizer
+produces, such as adding a corporate logo or links to other web pages.
+You can specify as many of these keywords as you like, and they will be
+used in the order that they are found in the file.  Values cannot exceed
+80 characters in length, so you may have to break long lines up into two
+or more lines.  There are no command line counterparts to these keywords.
+
+HTMLExtension  Allows generated pages to use something other than the
+               default 'html' extension for the filenames.  Do not
+               include the leading period ('.') when you specify the
+               extension.
+               Command line argument: -x
+
+HTMLPre        Allows code to be inserted at the very beginning of the
+               HTML files.  Defaults to the standard HTML 3.2 DOCTYPE
+               record.  Be careful not to include any HTML here, as it
+               is inserted _before_ the <HTML> tag in the file.  Use it
+               for server-side scripting capabilities, such as php3, to
+               insert scripting files and other directives.
+
+HTMLHead       Allows you to insert HTML code between the <HEAD></HEAD>
+               block.  There is no default.  Useful for adding scripts
+               to the HTML page, such as Javascript or php3, or even
+               just for adding a few META tags to the document.
+
+HTMLBody       This keyword defines HTML code to be placed immediately
+               after the <HEAD> section of the report, just before the
+               title and "summary period/generated on" lines.  If used,
+               the first HTMLHead line MUST include a <BODY> tag.  Put
+               whatever else you want in subsequent lines, but keep in
+               mind the placement of this code in relation to the title
+               and other aspects of the web page.  Some typical uses
+               are to change the page colors and possibly add a corporate
+               logo (graphic) in the top right.  If not specified, a
+               default <BODY> tag is used that defines page color, text
+               color and link colors (see "sample.conf" file for example).
+
+HTMLPost       This keyword defines HTML code that is placed after the
+               title and "summary period/generated on" lines, just before
+               the initial horizontal rule <HR> tag.  Normally this keyword
+               isn't needed, but is provided in case you included a large
+               graphic or some other weird formatting tag in the HTMLHead
+               section that needs to be cleaned up or terminated before the
+               main report section.
+
+HTMLTail       This keyword defines HTML code that is placed at the bottom
+               right side of the report.  It is inserted in a <TABLE> section
+               between table data <TD>..</TD> tags, and is top and right
+               aligned within the table.  Normally this keyword is used to
+               provide a link back to your home page or insert a small
+               graphic at the bottom right of the page.
+
+HTMLEnd        This allows insertion of closing code, at the very end of
+               the page.  The default is to put the closing </BODY> and
+               </HTML> tags.  If specified, you _must_ specify these tags
+               yourself.
+
+LinkReferrer   This specifies if the referrers listed in the top referrer
+               table should be displayed as plain text, or as a link to the
+               referrer.  Values can be either 'yes' or 'no', with 'no'
+               being the default.
+
+
+Graph Color Commands
+--------------------
+
+These keywords allow altering the colors used in the various graphs
+produced by the Webalizer.  The value is specified as a standard HTML
+RGB hexdecimal color string, without the leading '#' character.  The
+value is case insensitive.  If not specified, the default color shown
+will be used.
+
+ColorHit      Color used for 'Hits'.   Default is '00805C' (green)
+
+ColorFile     Color used for 'Files'.  Default is '0040FF' (blue)
+
+ColorSite     Color used for 'Sites'.  Default is 'FF8000' (orange)
+
+ColorKbyte    Color used for 'KBytes'. Default is 'FF0000' (red)
+
+ColorPage     Color used for 'Pages'.  Default is '00E0FF' (cyan)
+
+ColorVisit    Color used for 'Visits'. Default is 'FFFF00' (yellow)
+
+ColorMisc     Color used for miscellaneous titles in various 'Top'
+              tables (not graphs).     Default is '00E0FF' (cyan)
+
+PieColor1     Pie Chart color #1.      Default is '800080' (purple)
+
+PieColor2     Pie Chart color #2.      Default is '80FFC0' (lt. green)
+
+PieColor3     Pie Chart color #3.      Default is 'FF00FF' (lt. purple)
+
+PieColor4     Pie Chart color #4.      Default is 'FFC080' (tan)
+
+
+--------------------------------------------------------------------------
+
+
+Notes on Web Log Files
+----------------------
+
+The Webalizer supports CLF log formats, which should work for just
+about everyone.  If you want User Agent or Referrer information, you
+need to make sure your web server supplies this information in its
+log file, and in a format that the Webalizer can understand.  While
+The Webalizer will try to handle many of the subtle variations in
+log formats, some will not work at all.   Most web servers output
+CLF format logs by default.  For Apache, in order to produce the
+proper log format, add the following to the httpd.conf file:
+
+LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""
+
+This instructs the Apache web server to produce a 'combined' log
+that includes the referrer and user agent information on the end of
+each record, enclosed in quotes (This is the standard recommended
+by both Apache and NCSA).   Netscape and other web servers have
+similar capabilities to alter their log formats.  (note: the above
+works for apache servers up to V1.2.  V1.3 and higher now have additional
+ways to specify log formats... refer to included documentation).
+
+Notes on FTP Log Files
+----------------------
+
+The Webalizer supports ftp logs produced by wu-ftpd, proftpd and others,
+as a standard 'xferlog'.  To process an ftp log, you must either use the
+-Ff command line option or have "LogType ftp" in your configuration file.
+It is recommended that you create a separate configuration file for ftp
+analysis, since the values used for your web server will most likely not
+be suited for ftp log analysis (ie: page types, hostname, etc.. should
+be different).
+
+Because of the difference in web and ftp logs, there are a few limitations:
+
+o Because there is no concept of a 'response code' in ftp world, response
+  codes are restricted to either 200 (OK) or 206 (Partial Content), based
+  on the completion status found in xferlog (for wu-ftpd, 'i'=incomplete
+  and will generate a 206, 'c'=complete and will generate a 200).  If your
+  ftp server doesn't supply the completion status, all requests will be
+  assigned a response code of 200.  This allows the usage graph to display
+  all transfer requests (hits), and how many of those completed in success
+  (files - ie: 200 response codes).
+
+o Page totals won't accurately reflect reality, since there isn't really
+  the concept of a 'page' in regards to ftp services.  I have found that
+  setting the PageType value to "README", "FIRST", etc... seems to work
+  fairly well however,  and will give a pretty good indication of how
+  many 'non-binary' files were requested.  Of course, the content of your
+  ftp site will be different, so your results may vary.
+
+o Visit totals also won't accurately reflect reality, since visits are
+  triggered on PageType requests (see above).  What you usually wind up
+  with is visits=sites in most cases.
+
+o Entry/Exit pages will not be calculated for ftp logs.
+
+o For obvious reasons, referrers and user agents are not supported.
+
+o You _cannot_ analyze both web and ftp logs at the same time.. they must
+  be done separately in different runs.
+
+
+Notes on Referrers
+------------------
+
+Referrers are weird critters... They take many shapes and forms, which makes
+it much harder to analyze than a typical URL, which at least has some
+standardization.  What is contained in the referrer field of your log
+files varies depending on many factors, such as what site did the referral,
+what type of system it comes from and how the actual referral was generated.
+Why is this?  Well, because a user can get to your site in many ways... They
+may have your site bookmarked in their browser, they may simply type your
+sites URL field in their browser, they could have clicked on a link on some
+remote web page or they may have found your site from one of the many search
+engines and site indexes found on the web.  The Webalizer attempts to deal
+with all this variation in an intelligent way by doing certain things to
+the referrer string which makes it easier to analyze.  Of course, if your
+web server doesn't provide referrer information, you probably don't really
+care and are asking yourself why you are reading this section...
+
+Most referrers will take the form of "http://somesite.com/somepage.html",
+which is what you will get if the user clicks on a link somewhere on the
+web in order to get to your site.  Some will be a variation of this, and
+look something like "file:/some/such/sillyname", which is a reference from
+a HTML document on the users local machine.  Several variations of this can
+be used, depending on what type of system the user has, if he/she is on
+a local network, the type of network, etc...  To complicate things even
+more, dynamic HTML documents and HTML documents that are generated by
+CGI scripts or external programs produce lots of extra information which
+is tacked on to the end of the referrer string in an almost infinite number
+of ways.  If the user just typed your URL into their browser or clicked on
+a bookmark, there won't be any information in the referrer field and will
+take the form "-".
+
+In order to handle all these variations, The Webalizer parses the referrer
+field in a certain way.  First, if the referrer string begins with "http",
+it assumes it is a normal referral and converts the "http://" and following
+hostname to lowercase in order to simplify hiding if desired.  For example,
+the referrer "HTTP://WWW.MyHost.Com/This/Is/A/HTML/Document.html" will become
+"http://www.myhost.com/This/Is/A/HTML/Document.html".  Notice that only the
+"http://" and hostname are converted to lower case... The rest of the
+referrer field is left alone.  This follows standard convention, as the
+actual method (HTTP) and hostname are always case insensitive, while the
+document name portion is case sensitive.
+
+Referrers that came from search engines, dynamic HTML documents, CGI
+scripts and other external programs usually tack on additional information
+that it used to create the page.  A common example of this can be found
+in referrals that come from search engines and site indexes common on the
+web.  Sometimes, these referrers URLs can be several hundred characters
+long and include all the information that the user typed in to search for
+your site.  The Webalizer deals with this type of referrer by stripping
+off all the query information, which starts with a question mark '?'.
+The Referrer "http://search.yahoo.com/search?p=usa%26global%26link" will
+be converted to just "http://search.yahoo.com/search".
+
+When a user comes to your site by using one of their bookmarks or by
+typing in your URL directly into their browser, the referrer field is
+blank, and looks like "-".  Most sites will get more of these referrals
+than any other type.  The Webalizer converts this type of referral into
+the string "- (Direct Request)".  This is done in order to make it easier
+to hide via a command line option or configuration file option.  This is
+because the character "-" is a valid character elsewhere in a referrer
+field, and if not turned into something unique, could not be hidden without
+possibly hiding other referrers that shouldn't be.
+
+
+Notes on Character Escaping
+---------------------------
+
+The HTTP protocol defines certain ways that URLs can look and behave.  To
+some extent, referrer fields follow most of the same conventions.  Character
+escaping is a technique by which non-printable or other non-ASCII (and even
+some ASCII) characters can be used in a URL.  This is done by placing the
+Hexadecimal value of the character in the URL, preceded by a percent sign '%'.
+Since Hex values are made up of ASCII characters, any character can be
+escaped to ensure only printable ASCII characters are present in the URL.
+Some systems take this concept to the extreme and escape all sorts of stuff,
+even characters that don't need to be escaped.  To deal with this, The
+Webalizer will un-escape URLs and referrers before being processed. For
+Example, the URL "/www.webalizer.org/%7Efoo/bar.html" is the same URL as
+"/www.webalizer.org/~foo/bar.html", a very common form of a URL to access
+users web pages.  If the URLs were not un-escaped, they would be treated as
+two separate documents, even though they are really one and the same.
+
+
+Search String Analysis
+----------------------
+
+  The Webalizer will do a minimal analysis on referrer strings that
+it finds, looking for well known search string patterns.  Most of
+the major search engines are supported, such as Yahoo!, Altavista,
+Lycos, etc...  Unfortunately, search engines are always changing
+their internal/CGI query formats, new search engines are coming on
+line every day, and the ability to detect _all_ search strings is
+nearly impossible.  However, it should be accurate enough to give
+a good indication of what users were searching for when they stumbled
+across your site.  Note: as of version 1.31, search engines can now
+be specified within a configuration file.  See the sample.conf file
+for examples of how to specify additional search engines.
+
+
+
+Notes on Visits/Entry/Exit Figures
+----------------------------------
+
+The majority of data analyzed and reported on by The Webalizer is
+as accurate and correct as possible based on the input log file.
+However, due to the limitation of the HTTP protocol, the use of
+firewalls, proxy servers, multi-user systems, the rotation of your
+log files, and a myriad of other conditions, some of these numbers
+cannot, without absolute accuracy, be calculated.  In particular,
+Visits, Entry Pages and Exit Pages are suspect to random errors
+due to the above and other conditions.  The reason for this is
+twofold, 1) Log files are finite in size and time interval, and
+2) There is no way to distinguish multiple individual users apart
+given only an IP address.  Because log files are finite, they have
+a beginning and ending, which can be represented as a fixed time
+period.  There is no way of knowing what happened previous to this
+time period, nor is it possible to predict future events based on
+it.  Also, because it is impossible to distinguish individual users
+apart, multiple users that have the same IP address all appear to
+be a single user, and are treated as such.  This is most common where
+corporate users sit behind a proxy/firewall to the outside world,
+and all requests appear to come from the same location (the address
+of the proxy/firewall itself).  Dynamic IP assignment (used with
+dial-up Internet accounts) also present a problem, since the same
+user will appear as to come from multiple places.
+
+For example, suppose two users visit your server from XYZ company,
+which has their network connected to the Internet by a proxy server
+'fw.xyz.com'.  All requests from the network look as though they
+originated from 'fw.xyz.com', even though they were really initiated
+from two separate users on different PCs.  The Webalizer would
+see these requests as from the same location, and would record only
+1 visit, when in reality, there were two.  Because entry and exit
+pages are calculated in conjunction with visits, this situation
+would also only record 1 entry and 1 exit page, when in reality,
+there should be 2.
+
+As another example, say a single user at XYZ company is surfing
+around your website..  They arrive at 11:52pm the last day of
+the month, and continue surfing until 12:30am, which is now a
+new day (in a new month).  Since a common practice is to rotate
+(save then clear) the server logs at the end of the month, you
+now have the users visit logged in two different files (current
+and previous months).  Because of this (and the fact that the
+Webalizer clears history between months), the first page the
+user requests after midnight will be counted as an entry page.
+This is unavoidable, since it is the first request seen by that
+particular IP address in the new month.
+
+For the most part, the numbers shown for visits, entry and exit
+pages are pretty good 'guesses', even though they may not be 100%
+accurate.  They do provide a good indication of overall trends,
+and shouldn't be that far off from the real numbers to count much.
+You should probably consider them as the 'minimum' amount possible,
+since the actual (real) values should always be equal or greater
+in all cases.
+
+
+Exporting Webalizer Data
+------------------------
+
+The Webalizer now has the ability to dump all object tables to tab
+delimited ASCII text files, which can then be imported into most
+popular database and spreadsheet programs. The files are not normally
+produced, as on some sites they could become quite large, and are only
+enabled by the use of the Dump* configuration keywords.  The filename
+extensions default to '.tab' however may be changed using the
+'DumpExtension' keyword.  Since this data contains all items, even
+those normally hidden, it may not be desirable to have them located
+in the output directory where they may be visible to normal web users..
+For this reason, the 'DumpPath' configuration keyword is available,
+and allows the placement of these files somewhere outside the normal
+web server document tree.  An optional 'header' record may be written
+to these files as well, and is useful when the data is to be imported
+into a spreadsheet.. databases will not normally need the header.  If
+enabled, the header is simply the column names as the first record of
+the file, tab separated.
+
+
+Log files and The Webalizer
+---------------------------
+
+Most sites will choose to have The Webalizer run from cron at specified
+intervals.  Care should be taken to ensure that data is not lost as a
+result of log file rotations.  A suggested practice is to rotate your
+web server logs at the end of each month as close to midnight as possible,
+then have The Webalizer process the 'end of month' log file before running
+statistics on the new, current log.  On our systems, a shell script called
+'rotate_logs' is run at midnight, the end of each month.  This script file
+looks like:
+
+------------------------- file: rotate_logs ------------------------------
+#!/bin/sh
+
+# halt the server
+kill `cat /var/lib/httpd/logs/httpd.pid`
+
+# define backup names
+OLD_ACCESS_LOG=/var/lib/httpd/logs/old/access_log.`date +%y%m%d-%H%M%S`
+OLD_ERROR_LOG=/var/lib/httpd/logs/old/error_log.`date +%y%m%d-%H%M%S`
+
+# make end of month copy for analyzer
+cp /var/lib/httpd/logs/access_log /var/lib/httpd/logs/access_log.backup
+
+# move files to archive directory
+mv /var/lib/httpd/logs/access_log `echo $OLD_ACCESS_LOG`
+mv /var/lib/httpd/logs/error_log  `echo $OLD_ERROR_LOG`
+
+# restart web server
+/usr/sbin/httpd
+
+# compress the archived files
+/bin/gzip $OLD_ACCESS_LOG
+/bin/gzip $OLD_ERROR_LOG
+------------------------- end of file ------------------------------------
+This script first stops the web server using a 'kill' command.  Apache
+keeps the PID of the server in the file httpd.pid, so we use it as the
+argument for the kill.  Next, it defines some names for the backup files,
+which are basically the name of the files with the date and time appended
+to the end of them.  It then makes a copy of the log file, appended with
+'.backup' in the log directory, moves the current log files to an archive
+directory (/var/lib/httpd/logs/old) and restarts the server.  This setup 
+allows the web server to be down for the minimum amount of time needed,
+which is important for busy sites.  If you don't want to stop the server,
+you can remove the initial 'kill' command, and replace the '/usr/sbin/httpd'
+line with "kill -1 `cat /var/lib/httpd/logs/httpd.pid`" command instead,
+On most web servers, this will cause a restart of the server and create
+the new log files in the process...
+
+At this point, we have made copies of the previous months logs,  the web
+server is going about its business as usual, and we have all the time in
+the world to do any other additional processing we want.  The last two
+lines of the script compress the archived logs using the GNU zip program
+(gzip).  Remember, we still have a copy of the log which we can now run
+The Webalizer on without having to do any further processing.
+
+Next, we define two crontab entries.  The first runs the above 'rotate_logs'
+script at midnight at the end of the month.  The second runs The Webalizer
+on the '.backup' log file created above at 5 minutes after midnight.  This
+gives other end of month processing jobs a chance to run so we don't bog
+the system down too much.  If you have lots of end of month stuff going on,
+you can change the timing to suit your needs.  The crontab entries look
+something like:
+
+------------------------- crontab entries --------------------------------
+# Rotate web server logs and run monthly analysis
+0 0 1 * *       /usr/local/adm/rotate_logs
+5 0 1 * *       /usr/bin/webalizer -Q /var/lib/httpd/logs/access_log.backup
+------------------------- end of crontab ---------------------------------
+
+As you can see, the log rotations occur at midnight, and the analysis
+is done at 5 minutes after.  Once you verify that The Webalizer ran
+successfully, the access_log.backup file can be deleted as it isn't
+needed any more.  If you need to re-run the analysis, you still have
+the compressed archive copy that the shell script created.  In order
+for the above analysis to work properly, you should have already
+created an /etc/webalizer.conf configuration file suitable for your
+site, or otherwise specify configuration options or a configuration
+file on the crontab command line above.
+
+If you want The Webalizer to be run more often than once a month, you
+can specify additional crontab entries to do this as well.  Care should
+be taken however to ensure that The Webalizer is not running when the
+end of month processing above occurs, or unpredictable results may
+happen (such as an inability to rotate the logs due to a file lock). 
+The easiest way is to run it on the half hour with a crontab entry like:
+
+30 * * * *      /usr/bin/webalizer
+
+
+Reverse DNS Lookups
+-------------------
+
+The Webalizer fully supports both IPv4 and IPv6 DNS lookups, and
+maintains a cache of those lookups to reduce processing the same
+addresses in subsequent runs.  The cache file can be created at
+run-time, or may be created before running the webalizer using either
+the stand alone 'webazolver' program, or The Webalizer (DNS) Cache
+file Manager program 'wcmgr'.  In order to perform reverse lookups,
+a DNS Cache file must be specified, either on the command line or in
+a configuration file.  In order to create/update the cache file at
+run-time, the number of DNS Children must also be specified, and can
+be anything between 1 and 100.  This specifies the number of child
+processes to be forked, each of which will perform network DNS
+queries in order to lookup up the addresses and update the cache.
+Cached entries that are older than a specified TTL (time to live)
+will be expired, and if encountered again in a log, will be looked
+up at that time in order to 'freshen' them (verify the name is still
+the same and update its timestamp).  The default TTL is 7 days, however
+may be set to anything between 1 and 100 days.  Using the 'wcmgr'
+program, entries may also be marked as 'permanent', in which case
+they will persist (with an infinite TTL) in the cache until manually
+removed.  See the file DNS.README for additional information.
+
+
+Geolocation Lookups
+-------------------
+
+The Webalizer has the ability to perform geolocation lookups on IP
+addresses using either it's own internal GeoDB database or optionally
+the GeoIP database from MaxMind, Inc. (www.maxmind.com).  If used,
+unresolved addresses will be searched for in the database and it's
+country of origin will be returned if found.  This actually produces
+more accurate Country information than DNS lookups, since the DNS
+address space has additional gcTLDs that do not necessarily map to
+a specific country (such as '.net' and '.com').  It is possible to
+use both DNS lookups and geolocation lookups at the same time, which
+will cause any addresses that could not be resolved using DNS lookups
+to then be looked up in the database, greatly reducing the number of
+'Unknown/Unresolved' entries in the generated reports.  The native
+GeoDB geolocation database provided by The Webalizer fully supports
+IPv4 and IPv6 lookups, is updated regularly, and is the preferred
+geolocation method for use with The Webalizer.  The most current
+version of the database can be obtained from our ftp site.
+
+
+Language Support
+----------------
+
+Version 1.0x of The Webalizer added language support.  This
+support is only provided at compile time in the form of an
+include file containing all the strings used by The Webalizer.
+The source distribution contains all language files that were
+available at the time, with English being the default as
+that is the only human language I speak fluently, and me
+Espanol es muy malo.  Several people have already indicated
+the desire to do translations into various languages, and as
+I receive the language files, will make them available via
+ftp at ftp://ftp.mrunix.net/pub/webalizer/lang.  Unless there
+happens to be a binary distribution in the language you need,
+you will need to grab the source distribution and compile the
+program yourself. See the file INSTALL that comes in the source
+distribution for information on how to use a language other than
+English.
+
+It should also be noted that the GD graphics library, used to
+produce the in-line graphics in the output HTML,  doesn't
+support extended character sets, so if you are translating
+the language file, you will no doubt encounter this problem.
+
+New: You can now specify the language to use when you are building
+     program from source, using the configure script.  Just add
+     --with-language=language_name   , where 'language_name' is the
+     name of a valid language file in the /lang/ directory.  For
+     example, --with-language=french  will build using French as
+     the default language.  You should consult the INSTALL file
+     for additional information on building the program from source.
+
+
+Known Issues
+------------
+
+ o Memory Usage.  The Webalizer makes liberal use of memory for internal
+    data structures during analysis.  Lack of real physical memory will
+    noticeably degrade performance by doing lots of swapping between memory
+    and disk.  One user who had a rather large log file noticed that The
+    Webalizer took over 7 hours to run with only 16 Meg of memory.  Once
+    memory was increased, the time was reduced to a few minutes.
+
+
+ o Performance.  The Hide*, Group*, Ignore*, Include*  and IndexAlias
+    configuration options can cause a performance decrease if lots of
+    them are used.  The reason for this is that every log record must
+    be scanned for each item in each list.  For example, if you are
+    Hiding 20 objects, Grouping 20 more, and Ignoring 5,  each record
+    is scanned, at most, 46 times (20+20+5 + an IndexAlias scan).
+    On really large log files, this can have a profound impact.  It
+    is recommended that you use the least amount of these configuration
+    options that you can, as it will greatly improve performance.
+
+
+Final Notes
+-----------
+
+A lot of time and effort went into making The Webalizer, and to ensure that
+the results are as accurate as possible.  If you find any abnormalities or
+inconsistent results, bugs, errors, omissions or anything else that doesn't
+look right, please let me know so I can investigate the problem or correct
+the error.  This goes for the minimal documentation as well.  Suggestions
+for future versions are also welcome and appreciated.
diff --git a/README.FIRST b/README.FIRST
new file mode 100644 (file)
index 0000000..cab7c99
--- /dev/null
@@ -0,0 +1,21 @@
+Upgrade information for the Webalizer Version 2.2x
+
+This release is, for the most part, a drop-in replacement for all
+installations currently running 2.01, and all users are encouraged
+to upgrade.  See the 'CHANGES' file for a full list of changes
+since version 2.01-10.
+
+Note: The history file format has changed in v2.20 in order to keep
+more than 12 months.  Existing history files will be automatically
+converted to the new format the first time they are read.
+
+Note: This version redefines the '-v' command line switch to mean
+'verbose', which will cause the program to display additional
+informational and debugging messages at run-time.  This should not
+cause any major problems, as previously it would simply cause the
+program to display its version information and then exit.
+
+Report bugs to 'brad at mrunix dot net' with "Webalizer" somewhere
+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!
+
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..28fe084
--- /dev/null
+++ b/configure
@@ -0,0 +1,7509 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for webalizer V2.23.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&    (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+        /*)
+          for as_base in sh bash ksh sh5; do
+            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+          done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+        # Try only shells that exist, to save several forks.
+        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+               { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+              as_have_required=yes
+              if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='webalizer'
+PACKAGE_TARNAME='webalizer'
+PACKAGE_VERSION='V2.23'
+PACKAGE_STRING='webalizer V2.23'
+PACKAGE_BUGREPORT=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+OPTS
+WCMGR_LIBS
+DEFAULT_LANG
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+LN_S
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CPP
+GREP
+EGREP
+GEODB_LOC
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$0" : 'X\(//\)[^/]' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures webalizer V2.23 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/webalizer]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of webalizer V2.23:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-largefile     omit support for large files
+  --enable-static         Build as static executable       [default=no]
+  --enable-debug          Compile with debugging code      [default=no]
+  --enable-dns            Enable DNS/GeoDB lookup code     [default=yes]
+  --enable-bz2            Enable BZip2 decompression code  [default=no]
+  --enable-geoip          Enable GeoIP geolocation code    [default=no]
+  --enable-oldhash        Use old hash function (slower)   [default=no]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gd=DIR           Alternate location for gd header files
+  --with-gdlib=DIR        Alternate location for gd library
+  --with-png=DIR          Alternate location for png header files
+  --with-pnglib=DIR       Alternate location for png library
+  --with-z=DIR            Alternate location for libz header files
+  --with-zlib=DIR         Alternate location for z library
+  --with-db=DIR           Alternate location for libdb header files
+  --with-dblib=DIR        Alternate location for db library
+  --with-bz2=DIR          Alternate location for bz2 header files
+  --with-bz2lib=DIR       Alternate location for bz2 library
+  --with-geoip=DIR        Alternate location for libGeoIP header files
+  --with-geoiplib=DIR     Alternate location for geoip library
+  --with-geodb=DIR        Default GeoDB data dir [/usr/share/GeoDB]
+  --with-language=name    Use language 'name' (default is english)
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+webalizer configure V2.23
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by webalizer $as_me V2.23, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+       ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+OPTS=${DEFS}
+LIBS=${LIBS}
+
+
+
+
+DEFAULT_LANG="english"
+
+
+
+IN_CFLAGS=${CFLAGS}
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
+fi
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+           break 3
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+        # IRIX 6.2 and later do not support large files by default,
+        # so use the C compiler's -n32 option if that helps.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+        rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+        CC="$CC -n32"
+        rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_sys_largefile_CC=' -n32'; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+        break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  while :; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_sys_file_offset_bits=no; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_sys_file_offset_bits=64; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -f conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  while :; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_sys_large_files=no; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_sys_large_files=1; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+echo "${ECHO_T}$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -f conftest*
+  fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_GREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_EGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+{ echo "$as_me:$LINENO: checking whether char is unsigned" >&5
+echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6; }
+if test "${ac_cv_c_char_unsigned+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((char) -1) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_char_unsigned=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_char_unsigned=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5
+echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6; }
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define __CHAR_UNSIGNED__ 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for u_int64_t" >&5
+echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_u_int64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef u_int64_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_u_int64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_u_int64_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6; }
+if test $ac_cv_type_u_int64_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define u_int64_t unsigned long long
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether altzone is declared" >&5
+echo $ECHO_N "checking whether altzone is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_altzone+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <time.h>
+
+int
+main ()
+{
+#ifndef altzone
+  (void) altzone;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_altzone=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_altzone=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_altzone" >&5
+echo "${ECHO_T}$ac_cv_have_decl_altzone" >&6; }
+if test $ac_cv_have_decl_altzone = yes; then
+  OPTS="-DHAVE_ALTZONE ${OPTS}"
+fi
+
+
+
+if test "$GCC" = "yes"; then
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; LDFLAGS="--static ${LDFLAGS}"
+fi
+
+
+  if test "$IN_CFLAGS" = ""; then
+    CFLAGS="-Wall -O2"
+  fi
+  if test "$ac_cv_c_char_unsigned" = "yes"; then
+    CFLAGS="-fsigned-char ${CFLAGS}"
+  fi
+
+  # Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug; CFLAGS="-g ${CFLAGS}"
+fi
+
+
+else
+  if test "$IN_CFLAGS" = ""; then
+    CFLAGS="-g"
+  fi
+fi
+
+
+
+# Check whether --with-gd was given.
+if test "${with_gd+set}" = set; then
+  withval=$with_gd; S_GD="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-gdlib was given.
+if test "${with_gdlib+set}" = set; then
+  withval=$with_gdlib; S_GDLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+# Check whether --with-png was given.
+if test "${with_png+set}" = set; then
+  withval=$with_png; S_PNG="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-pnglib was given.
+if test "${with_pnglib+set}" = set; then
+  withval=$with_pnglib; S_PNGLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+# Check whether --with-z was given.
+if test "${with_z+set}" = set; then
+  withval=$with_z; S_Z="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval=$with_zlib; S_ZLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+# Check whether --with-db was given.
+if test "${with_db+set}" = set; then
+  withval=$with_db; S_DB="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-dblib was given.
+if test "${with_dblib+set}" = set; then
+  withval=$with_dblib; S_DBLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking for main in -l44bsd" >&5
+echo $ECHO_N "checking for main in -l44bsd... $ECHO_C" >&6; }
+if test "${ac_cv_lib_44bsd_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l44bsd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_44bsd_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_44bsd_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_44bsd_main" >&5
+echo "${ECHO_T}$ac_cv_lib_44bsd_main" >&6; }
+if test $ac_cv_lib_44bsd_main = yes; then
+  LIBS="-l44bsd ${LIBS}"
+fi
+
+
+for ac_header in getopt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ echo "$as_me:$LINENO: checking for main in -lm" >&5
+echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6; }
+if test "${ac_cv_lib_m_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_m_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_m_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5
+echo "${ECHO_T}$ac_cv_lib_m_main" >&6; }
+if test $ac_cv_lib_m_main = yes; then
+  LIBS="-lm ${LIBS}"; HAVE_LIBM="1"
+fi
+
+if test "${HAVE_LIBM}" = "1"; then
+
+for ac_header in math.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+
+{ echo "$as_me:$LINENO: checking for main in -lz" >&5
+echo $ECHO_N "checking for main in -lz... $ECHO_C" >&6; }
+if test "${ac_cv_lib_z_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_z_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_z_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_main" >&5
+echo "${ECHO_T}$ac_cv_lib_z_main" >&6; }
+if test $ac_cv_lib_z_main = yes; then
+  LIBZ="yes"; LIBS="-lz ${LIBS}"
+fi
+
+if test "${LIBZ}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for gzrewind in -lz" >&5
+echo $ECHO_N "checking for gzrewind in -lz... $ECHO_C" >&6; }
+if test "${ac_cv_lib_z_gzrewind+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gzrewind ();
+int
+main ()
+{
+return gzrewind ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_z_gzrewind=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_z_gzrewind=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzrewind" >&5
+echo "${ECHO_T}$ac_cv_lib_z_gzrewind" >&6; }
+if test $ac_cv_lib_z_gzrewind = yes; then
+  LIBZ="yes"
+else
+  LIBZ="no"
+fi
+
+  if test "${LIBZ}" = "no"; then
+    { { echo "$as_me:$LINENO: error: Old version of libz found.. please upgrade!" >&5
+echo "$as_me: error: Old version of libz found.. please upgrade!" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  { { echo "$as_me:$LINENO: error: z library not found.. please install libz" >&5
+echo "$as_me: error: z library not found.. please install libz" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+if test "${ac_cv_header_zlib_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for zlib.h" >&5
+echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_zlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_zlib_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking zlib.h usability" >&5
+echo $ECHO_N "checking zlib.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <zlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking zlib.h presence" >&5
+echo $ECHO_N "checking zlib.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <zlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: zlib.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: zlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for zlib.h" >&5
+echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_zlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_zlib_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_zlib_h" >&6; }
+
+fi
+if test $ac_cv_header_zlib_h = yes; then
+  HDR="yes"
+else
+  HDR="no"
+fi
+
+
+if test "${HDR}" = "no"; then
+  { { echo "$as_me:$LINENO: error: zlib.h header not found.. please install" >&5
+echo "$as_me: error: zlib.h header not found.. please install" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+{ echo "$as_me:$LINENO: checking for main in -lpng" >&5
+echo $ECHO_N "checking for main in -lpng... $ECHO_C" >&6; }
+if test "${ac_cv_lib_png_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpng  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_png_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_png_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_png_main" >&5
+echo "${ECHO_T}$ac_cv_lib_png_main" >&6; }
+if test $ac_cv_lib_png_main = yes; then
+  LIBPNG="yes"; LIBS="-lpng ${LIBS}"
+else
+  LIBPNG="no"
+fi
+
+if test "${LIBPNG}" = "no"; then
+  { { echo "$as_me:$LINENO: error: png library not found.. please install libpng" >&5
+echo "$as_me: error: png library not found.. please install libpng" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+{ echo "$as_me:$LINENO: checking for main in -lgd" >&5
+echo $ECHO_N "checking for main in -lgd... $ECHO_C" >&6; }
+if test "${ac_cv_lib_gd_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_gd_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_gd_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_gd_main" >&5
+echo "${ECHO_T}$ac_cv_lib_gd_main" >&6; }
+if test $ac_cv_lib_gd_main = yes; then
+  LIBGD="yes"; LIBS="-lgd ${LIBS}"
+fi
+
+if test "${LIBGD}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for gdImagePng in -lgd" >&5
+echo $ECHO_N "checking for gdImagePng in -lgd... $ECHO_C" >&6; }
+if test "${ac_cv_lib_gd_gdImagePng+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gdImagePng ();
+int
+main ()
+{
+return gdImagePng ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_gd_gdImagePng=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_gd_gdImagePng=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_gd_gdImagePng" >&5
+echo "${ECHO_T}$ac_cv_lib_gd_gdImagePng" >&6; }
+if test $ac_cv_lib_gd_gdImagePng = yes; then
+  LIBGD="yes"
+else
+  LIBGD="no"
+fi
+
+  if test "${LIBGD}" = "no"; then
+    { { echo "$as_me:$LINENO: error: Old version of libgd found.. please upgrade!" >&5
+echo "$as_me: error: Old version of libgd found.. please upgrade!" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  { { echo "$as_me:$LINENO: error: gd library not found.. please install libgd" >&5
+echo "$as_me: error: gd library not found.. please install libgd" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+if test "${ac_cv_header_gd_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for gd.h" >&5
+echo $ECHO_N "checking for gd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_gd_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_gd_h" >&5
+echo "${ECHO_T}$ac_cv_header_gd_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking gd.h usability" >&5
+echo $ECHO_N "checking gd.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <gd.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking gd.h presence" >&5
+echo $ECHO_N "checking gd.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <gd.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: gd.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: gd.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: gd.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: gd.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: gd.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: gd.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: gd.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: gd.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: gd.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: gd.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: gd.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for gd.h" >&5
+echo $ECHO_N "checking for gd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_gd_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_gd_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_gd_h" >&5
+echo "${ECHO_T}$ac_cv_header_gd_h" >&6; }
+
+fi
+if test $ac_cv_header_gd_h = yes; then
+  HDR="yes"
+else
+  HDR="no"
+fi
+
+
+if test "${HDR}" = "no"; then
+  { { echo "$as_me:$LINENO: error: gd.h header not found.. please install" >&5
+echo "$as_me: error: gd.h header not found.. please install" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+# Check whether --enable-dns was given.
+if test "${enable_dns+set}" = set; then
+  enableval=$enable_dns; USE_DNS="${enableval}"
+else
+  USE_DNS="yes"
+fi
+
+
+if test "${USE_DNS}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for main in -ldb" >&5
+echo $ECHO_N "checking for main in -ldb... $ECHO_C" >&6; }
+if test "${ac_cv_lib_db_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldb  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_db_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_db_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_main" >&5
+echo "${ECHO_T}$ac_cv_lib_db_main" >&6; }
+if test $ac_cv_lib_db_main = yes; then
+  USE_DNS="yes"
+else
+  USE_DNS="no"; { echo "$as_me:$LINENO: WARNING: libdb not found.. DNS/GeoDB code disabled!" >&5
+echo "$as_me: WARNING: libdb not found.. DNS/GeoDB code disabled!" >&2;}
+fi
+
+fi
+
+if test "${USE_DNS}" = "yes"; then
+  if test "${ac_cv_header_db_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for db.h" >&5
+echo $ECHO_N "checking for db.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_db_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_db_h" >&5
+echo "${ECHO_T}$ac_cv_header_db_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking db.h usability" >&5
+echo $ECHO_N "checking db.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <db.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking db.h presence" >&5
+echo $ECHO_N "checking db.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <db.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: db.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: db.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: db.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: db.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: db.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: db.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: db.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: db.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: db.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: db.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: db.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for db.h" >&5
+echo $ECHO_N "checking for db.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_db_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_db_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_db_h" >&5
+echo "${ECHO_T}$ac_cv_header_db_h" >&6; }
+
+fi
+if test $ac_cv_header_db_h = yes; then
+  USE_DNS="yes"
+else
+  USE_DNS="no"; { echo "$as_me:$LINENO: WARNING: db.h not found.. DNS/GeoDB code disabled!" >&5
+echo "$as_me: WARNING: db.h not found.. DNS/GeoDB code disabled!" >&2;}
+fi
+
+
+fi
+
+if test "${USE_DNS}" = "yes"; then
+    OPTS="-DUSE_DNS ${OPTS}"
+  LIBS="-ldb ${LIBS}"
+  WCMGR_LIBS="-ldb"
+  { echo "$as_me:$LINENO: checking for fdatasync" >&5
+echo $ECHO_N "checking for fdatasync... $ECHO_C" >&6; }
+if test "${ac_cv_func_fdatasync+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define fdatasync to an innocuous variant, in case <limits.h> declares fdatasync.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define fdatasync innocuous_fdatasync
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char fdatasync (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef fdatasync
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fdatasync ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_fdatasync || defined __stub___fdatasync
+choke me
+#endif
+
+int
+main ()
+{
+return fdatasync ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_fdatasync=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_fdatasync=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_fdatasync" >&5
+echo "${ECHO_T}$ac_cv_func_fdatasync" >&6; }
+if test $ac_cv_func_fdatasync = yes; then
+  DUMMY=""
+fi
+
+  if test "$ac_cv_func_fdatasync" = "no"; then
+    { echo "$as_me:$LINENO: checking for fdatasync in -lrt" >&5
+echo $ECHO_N "checking for fdatasync in -lrt... $ECHO_C" >&6; }
+if test "${ac_cv_lib_rt_fdatasync+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fdatasync ();
+int
+main ()
+{
+return fdatasync ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_rt_fdatasync=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_rt_fdatasync=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_rt_fdatasync" >&5
+echo "${ECHO_T}$ac_cv_lib_rt_fdatasync" >&6; }
+if test $ac_cv_lib_rt_fdatasync = yes; then
+  LIBS="-lrt ${LIBS}";WCMGR_LIBS="-lrt ${WCMGR_LIBS}"
+fi
+
+  fi
+  { echo "$as_me:$LINENO: checking for socket" >&5
+echo $ECHO_N "checking for socket... $ECHO_C" >&6; }
+if test "${ac_cv_func_socket+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define socket to an innocuous variant, in case <limits.h> declares socket.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define socket innocuous_socket
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char socket (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef socket
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_socket || defined __stub___socket
+choke me
+#endif
+
+int
+main ()
+{
+return socket ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_socket=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_socket=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_socket" >&5
+echo "${ECHO_T}$ac_cv_func_socket" >&6; }
+if test $ac_cv_func_socket = yes; then
+  DUMMY=""
+else
+  DUMMY=""
+fi
+
+  if test "$ac_cv_func_socket" = "no"; then
+    { echo "$as_me:$LINENO: checking for main in -lsocket" >&5
+echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6; }
+if test "${ac_cv_lib_socket_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_socket_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_socket_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_main" >&6; }
+if test $ac_cv_lib_socket_main = yes; then
+  LIBS="-lsocket ${LIBS}"
+fi
+
+  fi
+
+for ac_header in sys/socket.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+  { echo "$as_me:$LINENO: checking for inet_pton" >&5
+echo $ECHO_N "checking for inet_pton... $ECHO_C" >&6; }
+if test "${ac_cv_func_inet_pton+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define inet_pton to an innocuous variant, in case <limits.h> declares inet_pton.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define inet_pton innocuous_inet_pton
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char inet_pton (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef inet_pton
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_pton ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_inet_pton || defined __stub___inet_pton
+choke me
+#endif
+
+int
+main ()
+{
+return inet_pton ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_inet_pton=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_inet_pton=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_inet_pton" >&5
+echo "${ECHO_T}$ac_cv_func_inet_pton" >&6; }
+if test $ac_cv_func_inet_pton = yes; then
+  DUMMY=""
+else
+  DUMMY=""
+fi
+
+  if test "$ac_cv_func_inet_pton" = "no"; then
+    { echo "$as_me:$LINENO: checking for inet_pton in -lnsl" >&5
+echo $ECHO_N "checking for inet_pton in -lnsl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_inet_pton+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_pton ();
+int
+main ()
+{
+return inet_pton ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_nsl_inet_pton=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_nsl_inet_pton=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_pton" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_inet_pton" >&6; }
+if test $ac_cv_lib_nsl_inet_pton = yes; then
+  LIBS="-lnsl ${LIBS}"
+fi
+
+  fi
+fi
+
+
+# Check whether --enable-bz2 was given.
+if test "${enable_bz2+set}" = set; then
+  enableval=$enable_bz2; USE_BZIP="${enableval}"
+else
+  USE_BZIP="no"
+fi
+
+
+
+# Check whether --with-bz2 was given.
+if test "${with_bz2+set}" = set; then
+  withval=$with_bz2; S_BZ2="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-bz2lib was given.
+if test "${with_bz2lib+set}" = set; then
+  withval=$with_bz2lib; S_BZ2LIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+if test "${USE_BZIP}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for main in -lbz2" >&5
+echo $ECHO_N "checking for main in -lbz2... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bz2_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbz2  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_bz2_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_bz2_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bz2_main" >&5
+echo "${ECHO_T}$ac_cv_lib_bz2_main" >&6; }
+if test $ac_cv_lib_bz2_main = yes; then
+  USE_BZIP="yes"
+else
+  USE_BZIP="no"; { echo "$as_me:$LINENO: WARNING: libbz2 not found.. bzip2 code will will be disabled!" >&5
+echo "$as_me: WARNING: libbz2 not found.. bzip2 code will will be disabled!" >&2;}
+fi
+
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for BZ2_bzopen in -lbz2" >&5
+echo $ECHO_N "checking for BZ2_bzopen in -lbz2... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bz2_BZ2_bzopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbz2  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char BZ2_bzopen ();
+int
+main ()
+{
+return BZ2_bzopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_bz2_BZ2_bzopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_bz2_BZ2_bzopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bz2_BZ2_bzopen" >&5
+echo "${ECHO_T}$ac_cv_lib_bz2_BZ2_bzopen" >&6; }
+if test $ac_cv_lib_bz2_BZ2_bzopen = yes; then
+  USE_BZIP="yes"
+else
+  USE_BZIP="no"; { echo "$as_me:$LINENO: WARNING: Old bz2 library found.. bzip2 code will be disabled!" >&5
+echo "$as_me: WARNING: Old bz2 library found.. bzip2 code will be disabled!" >&2;}
+fi
+
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+  if test "${ac_cv_header_bzlib_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for bzlib.h" >&5
+echo $ECHO_N "checking for bzlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_bzlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_bzlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_bzlib_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking bzlib.h usability" >&5
+echo $ECHO_N "checking bzlib.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <bzlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking bzlib.h presence" >&5
+echo $ECHO_N "checking bzlib.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <bzlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: bzlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: bzlib.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: bzlib.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: bzlib.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: bzlib.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: bzlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: bzlib.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bzlib.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: bzlib.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for bzlib.h" >&5
+echo $ECHO_N "checking for bzlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_bzlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_bzlib_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_bzlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_bzlib_h" >&6; }
+
+fi
+if test $ac_cv_header_bzlib_h = yes; then
+  USE_BZIP="yes"
+else
+  USE_BZIP="no"; { echo "$as_me:$LINENO: WARNING: bzlib.h not found.. bzip2 code will be disabled!" >&5
+echo "$as_me: WARNING: bzlib.h not found.. bzip2 code will be disabled!" >&2;}
+fi
+
+
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+    OPTS="-DUSE_BZIP ${OPTS}"
+  LIBS="-lbz2 ${LIBS}"
+fi
+
+
+# Check whether --enable-geoip was given.
+if test "${enable_geoip+set}" = set; then
+  enableval=$enable_geoip; USE_GEOIP="${enableval}"
+else
+  USE_GEOIP="no"
+fi
+
+
+
+# Check whether --with-geoip was given.
+if test "${with_geoip+set}" = set; then
+  withval=$with_geoip; S_GEOIP="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}"
+fi
+
+
+# Check whether --with-geoiplib was given.
+if test "${with_geoiplib+set}" = set; then
+  withval=$with_geoiplib; S_GEOIPLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}"
+fi
+
+
+if test "${USE_GEOIP}" = "yes"; then
+  { echo "$as_me:$LINENO: checking for main in -lGeoIP" >&5
+echo $ECHO_N "checking for main in -lGeoIP... $ECHO_C" >&6; }
+if test "${ac_cv_lib_GeoIP_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lGeoIP  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_GeoIP_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_GeoIP_main=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_GeoIP_main" >&5
+echo "${ECHO_T}$ac_cv_lib_GeoIP_main" >&6; }
+if test $ac_cv_lib_GeoIP_main = yes; then
+  USE_GEOIP="yes"
+else
+  USE_GEOIP="no"; { echo "$as_me:$LINENO: WARNING: libGeoIP not found.. GeoIP code will be disabled!" >&5
+echo "$as_me: WARNING: libGeoIP not found.. GeoIP code will be disabled!" >&2;}
+fi
+
+fi
+
+if test "${USE_GEOIP}" = "yes"; then
+  if test "${ac_cv_header_GeoIP_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for GeoIP.h" >&5
+echo $ECHO_N "checking for GeoIP.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_GeoIP_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_GeoIP_h" >&5
+echo "${ECHO_T}$ac_cv_header_GeoIP_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking GeoIP.h usability" >&5
+echo $ECHO_N "checking GeoIP.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <GeoIP.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking GeoIP.h presence" >&5
+echo $ECHO_N "checking GeoIP.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <GeoIP.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: GeoIP.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: GeoIP.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: GeoIP.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: GeoIP.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: GeoIP.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: GeoIP.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: GeoIP.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: GeoIP.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: GeoIP.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for GeoIP.h" >&5
+echo $ECHO_N "checking for GeoIP.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_GeoIP_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_GeoIP_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_GeoIP_h" >&5
+echo "${ECHO_T}$ac_cv_header_GeoIP_h" >&6; }
+
+fi
+if test $ac_cv_header_GeoIP_h = yes; then
+  USE_GEOIP="yes"
+else
+  USE_GEOIP="no"; { echo "$as_me:$LINENO: WARNING: GeoIP.h not found.. GeoIP code will be disabled!" >&5
+echo "$as_me: WARNING: GeoIP.h not found.. GeoIP code will be disabled!" >&2;}
+fi
+
+
+fi
+
+if test "${USE_GEOIP}" = "yes"; then
+    OPTS="-DUSE_GEOIP ${OPTS}"
+  LIBS="-lGeoIP ${LIBS}"
+fi
+
+
+
+# Check whether --with-geodb was given.
+if test "${with_geodb+set}" = set; then
+  withval=$with_geodb; GEODB_LOC="${withval}"
+else
+  GEODB_LOC="/usr/share/GeoDB"
+fi
+
+
+
+# Check whether --enable-oldhash was given.
+if test "${enable_oldhash+set}" = set; then
+  enableval=$enable_oldhash; OLDHASH=${enableval}
+else
+  OLDHASH="no"
+fi
+
+  if test "$OLDHASH" = "yes"; then OPTS="-DUSE_OLDHASH"; fi
+
+
+LANG_CACHE=yes
+
+# Check whether --with-language was given.
+if test "${with_language+set}" = set; then
+  withval=$with_language; WEBALIZER_LANG="${withval}"; LANG_CACHE=no
+else
+  LANG_CACHE=yes
+fi
+
+if test "$WEBALIZER_LANG" = "no"; then WEBALIZER_LANG=english; fi
+
+
+{ echo "$as_me:$LINENO: checking for language file" >&5
+echo $ECHO_N "checking for language file... $ECHO_C" >&6; }
+if test "$LANG_CACHE" = "yes"; then
+  if test "${ac_cv_language+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_language=$DEFAULT_LANG
+fi
+
+  WEBALIZER_LANG=$ac_cv_language
+fi
+
+if test -f lang/webalizer_lang.${WEBALIZER_LANG}; then
+{ echo "$as_me:$LINENO: result: yes - ${WEBALIZER_LANG}" >&5
+echo "${ECHO_T}yes - ${WEBALIZER_LANG}" >&6; }
+else
+ if test -f lang/webalizer_lang.${DEFAULT_LANG}; then
+  { echo "$as_me:$LINENO: result: '${WEBALIZER_LANG}' not found - using ${DEFAULT_LANG}" >&5
+echo "${ECHO_T}'${WEBALIZER_LANG}' not found - using ${DEFAULT_LANG}" >&6; }
+  WEBALIZER_LANG=${DEFAULT_LANG}
+ else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  { { echo "$as_me:$LINENO: error: language files not found... fix before continuing" >&5
+echo "$as_me: error: language files not found... fix before continuing" >&2;}
+   { (exit 1); exit 1; }; }
+ fi
+fi
+ac_cv_language=${WEBALIZER_LANG}
+
+
+ac_sources="lang/webalizer_lang.${WEBALIZER_LANG}"
+ac_dests="webalizer_lang.h"
+while test -n "$ac_sources"; do
+  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+  set $ac_sources; ac_source=$1; shift; ac_sources=$*
+  ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
+done
+ac_config_links="$ac_config_links $ac_config_links_1"
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+t clear
+:clear
+s/^[    ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[    ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[     `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+       g
+       s/^\n//
+       s/\n/ /g
+       p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by webalizer $as_me V2.23, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_links="$ac_config_links"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration links:
+$config_links
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+webalizer config.status V2.23
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "$ac_config_links_1") CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+OPTS!$OPTS$ac_delim
+WCMGR_LIBS!$WCMGR_LIBS$ac_delim
+DEFAULT_LANG!$DEFAULT_LANG$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+LN_S!$LN_S$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+GEODB_LOC!$GEODB_LOC$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 57; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES    :L $CONFIG_LINKS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+
+  :L)
+  #
+  # CONFIG_LINK
+  #
+
+  { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5
+echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;}
+
+  if test ! -r "$srcdir/$ac_source"; then
+    { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5
+echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  rm -f "$ac_file"
+
+  # Try a relative symlink, then a hard link, then a copy.
+  case $srcdir in
+  [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;;
+      *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;;
+  esac
+  ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+    ln "$srcdir/$ac_source" "$ac_file" 2>/dev/null ||
+    cp -p "$srcdir/$ac_source" "$ac_file" ||
+    { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5
+echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+ ;;
+
+  esac
+
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+{ echo "$as_me:$LINENO: Done.  Type 'make' to continue with build." >&5
+echo "$as_me: Done.  Type 'make' to continue with build." >&6;}
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..705b4ea
--- /dev/null
@@ -0,0 +1,322 @@
+dnl
+dnl The Webalizer - A web server log file analysis program
+dnl Copyright (C) 1997-2011 by Bradford L. Barrett
+dnl
+dnl configure.in template for The Webalizer Version 2.23
+dnl Process this file with autoconf to produce a configure script.
+dnl
+
+AC_INIT(webalizer,V2.23)
+
+OPTS=${DEFS}
+LIBS=${LIBS}
+AC_SUBST(OPTS)
+AC_SUBST(WCMGR_LIBS)
+
+dnl ------------------------------------------
+dnl default language (don't change!)
+dnl ------------------------------------------
+
+DEFAULT_LANG="english"
+AC_SUBST(DEFAULT_LANG)
+
+dnl ------------------------------------------
+dnl Checks for required programs.
+dnl ------------------------------------------
+
+IN_CFLAGS=${CFLAGS}
+AC_PROG_CC
+AC_PROG_LN_S
+AC_PROG_INSTALL
+
+dnl ------------------------------------------
+dnl check for platform specific settings
+dnl ------------------------------------------
+
+AC_SYS_LARGEFILE
+AC_C_CHAR_UNSIGNED
+AC_CHECK_TYPE(u_int64_t, unsigned long long)
+AC_CHECK_DECL(altzone,OPTS="-DHAVE_ALTZONE ${OPTS}",,[#include <time.h>])
+
+dnl ------------------------------------------
+dnl force our own CFLAGS defaults if GCC
+dnl ------------------------------------------
+
+if test "$GCC" = "yes"; then
+
+  AC_ARG_ENABLE(static,
+  [  --enable-static         Build as static executable       [[default=no]]],
+  LDFLAGS="--static ${LDFLAGS}")
+
+  if test "$IN_CFLAGS" = ""; then
+    CFLAGS="-Wall -O2"
+  fi
+  if test "$ac_cv_c_char_unsigned" = "yes"; then
+    CFLAGS="-fsigned-char ${CFLAGS}"
+  fi
+
+  AC_ARG_ENABLE(debug,
+  [  --enable-debug          Compile with debugging code      [[default=no]]],
+  CFLAGS="-g ${CFLAGS}")
+
+else
+  if test "$IN_CFLAGS" = ""; then
+    CFLAGS="-g"
+  fi
+fi
+
+dnl ------------------------------------------
+dnl check command line arguments
+dnl ------------------------------------------
+
+AC_ARG_WITH(gd,
+  [  --with-gd=DIR           Alternate location for gd header files],
+  S_GD="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(gdlib,
+  [  --with-gdlib=DIR        Alternate location for gd library],
+  S_GDLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+AC_ARG_WITH(png,
+  [  --with-png=DIR          Alternate location for png header files],
+  S_PNG="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(pnglib,
+  [  --with-pnglib=DIR       Alternate location for png library],
+  S_PNGLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+AC_ARG_WITH(z,
+  [  --with-z=DIR            Alternate location for libz header files],
+  S_Z="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(zlib,
+  [  --with-zlib=DIR         Alternate location for z library],
+  S_ZLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+AC_ARG_WITH(db,
+  [  --with-db=DIR           Alternate location for libdb header files],
+  S_DB="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(dblib,
+  [  --with-dblib=DIR        Alternate location for db library],
+  S_DBLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+
+dnl ------------------------------------------
+dnl these are needed on some platforms
+dnl ------------------------------------------
+
+AC_CHECK_LIB(44bsd, main, LIBS="-l44bsd ${LIBS}")
+AC_CHECK_HEADERS(getopt.h)
+AC_CHECK_LIB(m, main, LIBS="-lm ${LIBS}"; HAVE_LIBM="1")
+if test "${HAVE_LIBM}" = "1"; then
+  AC_CHECK_HEADERS(math.h)
+fi
+
+dnl ------------------------------------------
+dnl ensure current libz is present - required!
+dnl ------------------------------------------
+
+AC_CHECK_LIB(z, main, LIBZ="yes"; LIBS="-lz ${LIBS}")
+if test "${LIBZ}" = "yes"; then
+  AC_CHECK_LIB(z, gzrewind,LIBZ="yes",LIBZ="no")
+  if test "${LIBZ}" = "no"; then
+    AC_MSG_ERROR(Old version of libz found.. please upgrade!)
+  fi
+else
+  AC_MSG_ERROR(z library not found.. please install libz)
+fi
+
+AC_CHECK_HEADER(zlib.h, HDR="yes", HDR="no")
+if test "${HDR}" = "no"; then
+  AC_MSG_ERROR(zlib.h header not found.. please install)
+fi
+
+dnl ------------------------------------------
+dnl ensure libpng is present - required!
+dnl ------------------------------------------
+
+AC_CHECK_LIB(png, main, LIBPNG="yes"; LIBS="-lpng ${LIBS}",LIBPNG="no")
+if test "${LIBPNG}" = "no"; then
+  AC_MSG_ERROR(png library not found.. please install libpng)
+fi
+
+dnl ------------------------------------------
+dnl ensure libgd is present - required!
+dnl ------------------------------------------
+
+AC_CHECK_LIB(gd, main, LIBGD="yes"; LIBS="-lgd ${LIBS}")
+if test "${LIBGD}" = "yes"; then
+  AC_CHECK_LIB(gd, gdImagePng, LIBGD="yes", LIBGD="no")
+  if test "${LIBGD}" = "no"; then
+    AC_MSG_ERROR(Old version of libgd found.. please upgrade!)
+  fi
+else
+  AC_MSG_ERROR(gd library not found.. please install libgd)
+fi
+
+AC_CHECK_HEADER(gd.h, HDR="yes", HDR="no")
+if test "${HDR}" = "no"; then
+  AC_MSG_ERROR(gd.h header not found.. please install)
+fi
+
+dnl ------------------------------------------
+dnl DNS/GeoDB lookup specific tests
+dnl ------------------------------------------
+
+AC_ARG_ENABLE(dns,
+  [  --enable-dns            Enable DNS/GeoDB lookup code     [[default=yes]]],
+  USE_DNS="${enableval}", USE_DNS="yes")
+
+if test "${USE_DNS}" = "yes"; then
+  AC_CHECK_LIB(db, main, USE_DNS="yes",
+    USE_DNS="no"; AC_MSG_WARN(libdb not found.. DNS/GeoDB code disabled!))
+fi
+
+if test "${USE_DNS}" = "yes"; then
+  AC_CHECK_HEADER(db.h, USE_DNS="yes",
+    USE_DNS="no"; AC_MSG_WARN(db.h not found.. DNS/GeoDB code disabled!))
+fi
+
+if test "${USE_DNS}" = "yes"; then
+  dnl we have both library and header.. proceed
+  OPTS="-DUSE_DNS ${OPTS}"
+  LIBS="-ldb ${LIBS}"
+  WCMGR_LIBS="-ldb"
+  AC_CHECK_FUNC(fdatasync,DUMMY="")
+  if test "$ac_cv_func_fdatasync" = "no"; then
+    AC_CHECK_LIB(rt, fdatasync,
+      LIBS="-lrt ${LIBS}";WCMGR_LIBS="-lrt ${WCMGR_LIBS}")
+  fi
+  AC_CHECK_FUNC(socket,DUMMY="",DUMMY="")
+  if test "$ac_cv_func_socket" = "no"; then
+    AC_CHECK_LIB(socket, main, LIBS="-lsocket ${LIBS}")
+  fi
+  AC_CHECK_HEADERS(sys/socket.h)
+  AC_CHECK_FUNC(inet_pton,DUMMY="",DUMMY="")
+  if test "$ac_cv_func_inet_pton" = "no"; then
+    AC_CHECK_LIB(nsl,inet_pton, LIBS="-lnsl ${LIBS}")
+  fi
+fi
+
+dnl ------------------------------------------
+dnl BZip2 code specific tests
+dnl ------------------------------------------
+
+AC_ARG_ENABLE(bz2,
+  [  --enable-bz2            Enable BZip2 decompression code  [[default=no]]],
+  USE_BZIP="${enableval}", USE_BZIP="no")
+
+AC_ARG_WITH(bz2,
+  [  --with-bz2=DIR          Alternate location for bz2 header files],
+  S_BZ2="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(bz2lib,
+  [  --with-bz2lib=DIR       Alternate location for bz2 library],
+  S_BZ2LIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+
+if test "${USE_BZIP}" = "yes"; then
+  AC_CHECK_LIB(bz2, main, USE_BZIP="yes",
+    USE_BZIP="no"; AC_MSG_WARN(libbz2 not found.. bzip2 code will will be disabled!))
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+  AC_CHECK_LIB(bz2, BZ2_bzopen, USE_BZIP="yes",
+    USE_BZIP="no"; AC_MSG_WARN(Old bz2 library found.. bzip2 code will be disabled!))
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+  AC_CHECK_HEADER(bzlib.h, USE_BZIP="yes",
+    USE_BZIP="no"; AC_MSG_WARN(bzlib.h not found.. bzip2 code will be disabled!))
+fi
+
+if test "${USE_BZIP}" = "yes"; then
+  dnl we have both library and header.. proceed
+  OPTS="-DUSE_BZIP ${OPTS}"
+  LIBS="-lbz2 ${LIBS}"
+fi
+
+dnl ------------------------------------------
+dnl GeoIP code specific tests
+dnl ------------------------------------------
+
+AC_ARG_ENABLE(geoip,
+  [  --enable-geoip          Enable GeoIP geolocation code    [[default=no]]],
+  USE_GEOIP="${enableval}", USE_GEOIP="no")
+
+AC_ARG_WITH(geoip,
+  [  --with-geoip=DIR        Alternate location for libGeoIP header files],
+  S_GEOIP="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}")
+AC_ARG_WITH(geoiplib,
+  [  --with-geoiplib=DIR     Alternate location for geoip library],
+  S_GEOIPLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}")
+
+if test "${USE_GEOIP}" = "yes"; then
+  AC_CHECK_LIB(GeoIP, main, USE_GEOIP="yes",
+    USE_GEOIP="no"; AC_MSG_WARN(libGeoIP not found.. GeoIP code will be disabled!))
+fi
+
+if test "${USE_GEOIP}" = "yes"; then
+  AC_CHECK_HEADER(GeoIP.h, USE_GEOIP="yes",
+    USE_GEOIP="no"; AC_MSG_WARN(GeoIP.h not found.. GeoIP code will be disabled!))
+fi
+
+if test "${USE_GEOIP}" = "yes"; then
+  dnl we have both library and header.. proceed
+  OPTS="-DUSE_GEOIP ${OPTS}"
+  LIBS="-lGeoIP ${LIBS}"
+fi
+
+dnl ------------------------------------------
+dnl check for default GeoDB directory
+dnl ------------------------------------------
+
+AC_ARG_WITH(geodb,
+  [  --with-geodb=DIR        Default GeoDB data dir [[/usr/share/GeoDB]]],
+  GEODB_LOC="${withval}", GEODB_LOC="/usr/share/GeoDB")
+AC_SUBST(GEODB_LOC)
+
+dnl ------------------------------------------
+dnl check which hash function to use
+dnl ------------------------------------------
+AC_ARG_ENABLE(oldhash,
+  [  --enable-oldhash        Use old hash function (slower)   [[default=no]]],
+  OLDHASH=${enableval}, OLDHASH="no")
+  if test "$OLDHASH" = "yes"; then OPTS="-DUSE_OLDHASH"; fi
+
+dnl ------------------------------------------
+dnl check language to use (default is english)
+dnl ------------------------------------------
+
+LANG_CACHE=yes
+AC_ARG_WITH(language,
+  [  --with-language=name    Use language 'name' (default is english)], 
+  WEBALIZER_LANG="${withval}"; LANG_CACHE=no, LANG_CACHE=yes)
+if test "$WEBALIZER_LANG" = "no"; then WEBALIZER_LANG=english; fi
+
+dnl ------------------------------------------
+dnl check if specfied language is valid
+dnl ------------------------------------------
+
+AC_MSG_CHECKING(for language file)
+if test "$LANG_CACHE" = "yes"; then
+  AC_CACHE_VAL(ac_cv_language, ac_cv_language=$DEFAULT_LANG)
+  WEBALIZER_LANG=$ac_cv_language
+fi
+
+if test -f lang/webalizer_lang.${WEBALIZER_LANG}; then
+AC_MSG_RESULT(yes - ${WEBALIZER_LANG})
+else
+ if test -f lang/webalizer_lang.${DEFAULT_LANG}; then
+  AC_MSG_RESULT('${WEBALIZER_LANG}' not found - using ${DEFAULT_LANG})
+  WEBALIZER_LANG=${DEFAULT_LANG}
+ else
+  AC_MSG_RESULT(no)
+  AC_MSG_ERROR(language files not found... fix before continuing)
+ fi
+fi
+ac_cv_language=${WEBALIZER_LANG}
+
+dnl ------------------------------------------
+dnl create link to language file
+dnl ------------------------------------------
+
+AC_LINK_FILES(lang/webalizer_lang.${WEBALIZER_LANG}, webalizer_lang.h)
+
+dnl ------------------------------------------
+dnl done.. write out our Makefile
+dnl ------------------------------------------
+
+AC_OUTPUT(Makefile)
+AC_MSG_NOTICE(Done.  Type 'make' to continue with build.)
diff --git a/country-codes.txt b/country-codes.txt
new file mode 100644 (file)
index 0000000..1cb7388
--- /dev/null
@@ -0,0 +1,279 @@
+ac      Ascension Island
+ad      Andorra
+ae      United Arab Emirates
+af      Afghanistan
+ag      Antigua and Barbuda
+ai      Anguilla
+al      Albania
+am      Armenia
+an      Netherlands Antilles
+ao      Angola
+aq      Antarctica
+ar      Argentina
+as      American Samoa
+at      Austria
+au      Australia
+aw      Aruba
+ax      Aland Islands
+az      Azerbaijan
+ba      Bosnia and Herzegovina
+bb      Barbados
+bd      Bangladesh
+be      Belgium
+bf      Burkina Faso
+bg      Bulgaria
+bh      Bahrain
+bi      Burundi
+bj      Benin
+bl      Saint Barthelemy
+bm      Bermuda
+bn      Brunei Darussalam
+bo      Bolivia
+br      Brazil
+bs      Bahamas
+bt      Bhutan
+bv      Bouvet Island
+bw      Botswana
+by      Belarus
+bz      Belize
+ca      Canada
+cc      Cocos (Keeling) Islands
+cd      Congo, Democratic Republic
+cf      Central African Republic
+cg      Congo
+ch      Switzerland
+ci      Cote D'Ivoire (Ivory Coast)
+ck      Cook Islands
+cl      Chile
+cm      Cameroon
+cn      China
+co      Colombia
+cr      Costa Rica
+cu      Cuba
+cv      Cape Verde
+cx      Christmas Island
+cy      Cyprus
+cz      Czech Republic
+de      Germany
+dj      Djibouti
+dk      Denmark
+dm      Dominica
+do      Dominican Republic
+dz      Algeria
+ec      Ecuador
+ee      Estonia
+eg      Egypt
+eh      Western Sahara
+er      Eritrea
+es      Spain
+et      Ethiopia
+eu      European Union
+fi      Finland
+fj      Fiji
+fk      Falkland Islands (Malvinas)
+fm      Micronesia
+fo      Faroe Islands
+fr      France
+ga      Gabon
+gb      Great Britain (UK)
+gd      Grenada
+ge      Georgia
+gf      French Guiana
+gg      Guernsey
+gh      Ghana
+gi      Gibraltar
+gl      Greenland
+gm      Gambia
+gn      Guinea
+gp      Guadeloupe
+gq      Equatorial Guinea
+gr      Greece
+gs      S. Georgia and S. Sandwich Isls.
+gt      Guatemala
+gu      Guam
+gw      Guinea-Bissau
+gy      Guyana
+hk      Hong Kong
+hm      Heard and McDonald Islands
+hn      Honduras
+hr      Croatia
+ht      Haiti
+hu      Hungary
+id      Indonesia
+ie      Ireland
+il      Israel
+im      Isle of Man
+in      India
+io      British Indian Ocean Territory
+iq      Iraq
+ir      Iran
+is      Iceland
+it      Italy
+je      Jersey
+jm      Jamaica
+jo      Jordan
+jp      Japan
+ke      Kenya
+kg      Kyrgyzstan
+kh      Cambodia
+ki      Kiribati
+km      Comoros
+kn      Saint Kitts and Nevis
+kp      Korea, Democratic Republic of
+kr      Korea, Republic of
+kw      Kuwait
+ky      Cayman Islands
+kz      Kazakhstan
+la      Laos
+lb      Lebanon
+lc      Saint Lucia
+li      Liechtenstein
+lk      Sri Lanka
+lr      Liberia
+ls      Lesotho
+lt      Lithuania
+lu      Luxembourg
+lv      Latvia
+ly      Libya
+ma      Morocco
+mc      Monaco
+md      Moldova
+me      Montenegro
+mf      Saint Martin (French part)
+mg      Madagascar
+mh      Marshall Islands
+mk      Macedonia
+ml      Mali
+mm      Myanmar
+mn      Mongolia
+mo      Macau
+mp      Northern Mariana Islands
+mq      Martinique
+mr      Mauritania
+ms      Montserrat
+mt      Malta
+mu      Mauritius
+mv      Maldives
+mw      Malawi
+mx      Mexico
+my      Malaysia
+mz      Mozambique
+na      Namibia
+nc      New Caledonia
+ne      Niger
+nf      Norfolk Island
+ng      Nigeria
+ni      Nicaragua
+nl      Netherlands
+no      Norway
+np      Nepal
+nr      Nauru
+nu      Niue
+nz      New Zealand (Aotearoa)
+om      Oman
+pa      Panama
+pe      Peru
+pf      French Polynesia
+pg      Papua New Guinea
+ph      Philippines
+pk      Pakistan
+pl      Poland
+pm      St. Pierre and Miquelon
+pn      Pitcairn
+pr      Puerto Rico
+ps      Palestinian Territory, Occupied
+pt      Portugal
+pw      Palau
+py      Paraguay
+qa      Qatar
+re      Reunion
+ro      Romania
+rs      Serbia
+ru      Russian Federation
+rw      Rwanda
+sa      Saudi Arabia
+sb      Solomon Islands
+sc      Seychelles
+sd      Sudan
+se      Sweden
+sg      Singapore
+sh      St. Helena
+si      Slovenia
+sj      Svalbard and Jan Mayen Islands
+sk      Slovakia
+sl      Sierra Leone
+sm      San Marino
+sn      Senegal
+so      Somalia
+sr      Suriname
+st      Sao Tome and Principe
+su      Soviet Union
+sv      El Salvador
+sy      Syrian Arab Republic
+sz      Swaziland
+tc      Turks and Caicos Islands
+td      Chad
+tf      French Southern Territories
+tg      Togo
+th      Thailand
+tj      Tajikistan
+tk      Tokelau
+tl      Timor-Leste
+tm      Turkmenistan
+tn      Tunisia
+to      Tonga
+tp      Portuguese Timor
+tr      Turkey
+tt      Trinidad and Tobago
+tv      Tuvalu
+tw      Taiwan
+tz      Tanzania
+ua      Ukraine
+ug      Uganda
+uk      United Kingdom
+um      US Minor Outlying Islands
+us      United States
+uy      Uruguay
+uz      Uzbekistan
+va      Vatican City State (Holy See)
+vc      Saint Vincent and the Grenadines
+ve      Venezuela
+vg      Virgin Islands (British)
+vi      Virgin Islands (U.S.)
+vn      Viet Nam
+vu      Vanuatu
+wf      Wallis and Futuna Islands
+ws      Samoa
+ye      Yemen
+yt      Mayotte
+yu      Yugoslavia
+za      South Africa
+zm      Zambia
+zw      Zimbabwe
+com     US Commercial (com)
+edu     US Educational (edu)
+gov     US Government (gov)
+int     International (int)
+mil     US Military (mil)
+net     Network (net)
+org     Non-Profit Organization (org)
+biz     Generic Business (biz)
+cat     Catalan Community (cat)
+pro     Professional (pro)
+tel     Ind. Contact Data (tel)
+aero    Air Transport Industry (aero)
+asia    Asia Pacific Community (asia)
+coop    Cooperative Association (coop)
+info    Generic TLD (info)
+jobs    Human Resources (jobs)
+mobi    Generic Mobile TLD (mobi)
+name    Individual (name)
+arpa    Address Routing (arpa)
+nato    Nato field (nato)
+museum  Museums (museum)
+travel  Travel Ind. (travel)
+a1      Anonymous Proxy
+a2      Satellite Provider
+o1      Other
+ap      Asia/Pacific Region
+lan     Local Network (lan)
diff --git a/dns_resolv.c b/dns_resolv.c
new file mode 100644 (file)
index 0000000..74ad6a5
--- /dev/null
@@ -0,0 +1,923 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <sys/utsname.h>
+#include <zlib.h>
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* Need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#ifdef USE_DNS                   /* skip everything in this file if no DNS */
+
+#include <netinet/in.h>          /* include stuff we need for dns lookups, */
+#include <arpa/inet.h>           /* DB access, file control, etc...        */
+#include <fcntl.h>
+#include <netdb.h>               /* ensure getaddrinfo/getnameinfo         */
+#include <signal.h>
+#include <sys/signal.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <db.h>                                /* DB header ****************/
+#include "webalizer.h"                         /* main header              */
+#include "lang.h"                              /* language declares        */
+#include "hashtab.h"                           /* hash table functions     */
+#include "parser.h"                            /* log parser functions     */
+#include "dns_resolv.h"                        /* our header               */
+
+/* local data */
+
+DB       *dns_db   = NULL;                     /* DNS cache database       */
+int      dns_fd    = 0;
+
+DB       *geo_db   = NULL;                     /* GeoDB database           */
+DBC      *geo_dbc  = NULL;                     /* GeoDB database cursor    */
+
+struct   dns_child child[MAXCHILD];            /* DNS child pipe data      */
+
+DNODEPTR host_table[MAXHASH];                  /* hostname/ip hash table   */
+
+char     buffer[BUFSIZE];                      /* log file record buffer   */
+char     tmp_buf[BUFSIZE];                     /* used to temp save above  */
+struct   utsname system_info;                  /* system info structure    */
+
+int      raiseSigChild = 1;
+
+time_t runtime;
+time_t start_time, end_time;
+float  temp_time;
+
+extern char *our_gzgets(void *, char *, int);  /* external our_gzgets func */
+
+/* internal function prototypes */
+
+static void process_list(DNODEPTR);
+static void sigChild(int);
+static void db_put(char *, char *, int);
+void   set_fl(int, int);
+void   clr_fl(int, int);
+int    iptype(char *, unsigned char *);
+
+/*********************************************/
+/* RESOLVE_DNS - lookup IP in cache          */
+/*********************************************/
+
+void resolve_dns(struct log_struct *log_rec)
+{
+   DBT    query, response;
+   int    i;
+   /* aligned dnsRecord to prevent Solaris from doing a dump */
+   /* (not found in debugger, as it can dereference it :(    */
+   struct dnsRecord alignedRecord;
+
+   if (!dns_db) return;   /* ensure we have a dns db */
+
+   memset(&query, 0, sizeof(query));
+   memset(&response, 0, sizeof(response));
+   query.data = log_rec->hostname;
+   query.size = strlen(log_rec->hostname);
+
+   if (debug_mode) fprintf(stderr,"Checking %s...", log_rec->hostname);
+
+   if ( (i=dns_db->get(dns_db, NULL, &query, &response, 0)) == 0)
+   {
+      memcpy(&alignedRecord, response.data, sizeof(struct dnsRecord));
+      strncpy (log_rec->hostname,
+               ((struct dnsRecord *)response.data)->hostName,
+               MAXHOST);
+      log_rec->hostname[MAXHOST-1]=0;
+      if (debug_mode)
+         fprintf(stderr," found: %s (%ld)\n",
+           log_rec->hostname, alignedRecord.timeStamp);
+   }
+   else  /* not found or error occured during get */
+   {
+      if (debug_mode)
+      {
+         if (i==DB_NOTFOUND) fprintf(stderr," not found\n");
+         else                fprintf(stderr," error (%d)\n",i);
+      }
+   }
+}
+
+/*********************************************/
+/* DNS_RESOLVER - read log and lookup IP's   */
+/*********************************************/
+
+int dns_resolver(void *log_fp)
+{
+   DNODEPTR  h_entries;
+   DNODEPTR  l_list = NULL;
+
+   int       i;
+   int       save_verbose=verbose;
+
+   u_int64_t listEntries = 0;
+
+   struct sigaction sigPipeAction;
+   struct stat dbStat;
+   /* aligned dnsRecord to prevent Solaris from doing a dump */
+   /* (not found in debugger, as it can dereference it :(    */
+   struct dnsRecord alignedRecord;
+
+   struct    flock tmp_flock;
+
+   tmp_flock.l_whence=SEEK_SET;    /* default flock fields */
+   tmp_flock.l_start=0;
+   tmp_flock.l_len=0;
+   tmp_flock.l_pid=0;
+
+   time(&runtime);
+
+   /* get processing start time */
+   start_time = time(NULL);
+
+   /* minimal sanity check on it */
+   if(stat(dns_cache, &dbStat) < 0)
+   {
+      if(errno != ENOENT)
+      {
+         dns_cache=NULL;
+         dns_db=NULL; return 0;  /* disable cache */
+      }
+   }
+   else
+   {
+      if(!dbStat.st_size)  /* bogus file, probably from a crash */
+      {
+         unlink(dns_cache);  /* remove it so we can recreate... */
+      }
+   }
+  
+   /* open cache file */
+   if ( (db_create(&dns_db, NULL, 0) != 0)   ||
+        (dns_db->open(dns_db, NULL,
+           dns_cache, NULL, DB_HASH,
+           DB_CREATE, 0644) != 0) )
+   {
+      /* Error: Unable to open DNS cache file <filename> */
+      if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nodb,dns_cache);
+      dns_cache=NULL;
+      dns_db=NULL;
+      return 0;                  /* disable cache */
+   }
+
+   /* get file descriptor */
+   dns_db->fd(dns_db, &dns_fd);
+
+   tmp_flock.l_type=F_WRLCK;                    /* set read/write lock type */
+   if (fcntl(dns_fd,F_SETLK,&tmp_flock) < 0)    /* and barf if we cant lock */
+   {
+      /* Error: Unable to lock DNS cache file <filename> */
+      if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nolk,dns_cache);
+      dns_db->close(dns_db, 0);
+      dns_cache=NULL;
+      dns_db=NULL;
+      return 0;                  /* disable cache */
+   }
+
+   /* Setup signal handlers */
+   sigPipeAction.sa_handler = SIG_IGN;
+   sigPipeAction.sa_flags   = SA_RESTART;
+   sigemptyset(&sigPipeAction.sa_mask);
+
+   sigaction(SIGPIPE, &sigPipeAction, NULL);
+
+   /* disable warnings/errors for this run... */
+   verbose=0;
+
+   /* Main loop to read log records (either regular or zipped) */
+   while ( (gz_log)?(our_gzgets((void *)log_fp,buffer,BUFSIZE) != Z_NULL):
+           (fgets(buffer,BUFSIZE,log_fname?(FILE *)log_fp:stdin) != NULL))
+   {
+      if (strlen(buffer) == (BUFSIZE-1))
+      {
+         /* get the rest of the record */
+         while ( (gz_log)?(our_gzgets((void *)log_fp,buffer,BUFSIZE)!=Z_NULL):
+                 (fgets(buffer,BUFSIZE,log_fname?(FILE *)log_fp:stdin)!=NULL))
+         {
+            if (strlen(buffer) < BUFSIZE-1) break;
+         }
+         continue;                        /* go get next record if any    */
+      }
+
+      strcpy(tmp_buf, buffer);            /* save buffer in case of error */
+      if(parse_record(buffer))            /* parse the record             */
+      {
+         struct addrinfo hints, *ares;
+         memset(&hints, 0, sizeof(hints));
+         hints.ai_family   = AF_UNSPEC;
+         hints.ai_socktype = SOCK_STREAM;
+         hints.ai_flags    = AI_NUMERICHOST;
+         if (0 == getaddrinfo(log_rec.hostname, "0", &hints, &ares))
+         {
+            DBT q, r;
+            memset(&q, 0, sizeof(q));
+            memset(&r, 0, sizeof(r));
+            q.data = log_rec.hostname;
+            q.size = strlen(log_rec.hostname);
+
+            /* Check if we have it in DB */
+            if ( (i=dns_db->get(dns_db, NULL, &q, &r, 0)) == 0 )
+            {
+               /* have a record for this address */
+               memcpy(&alignedRecord, r.data, sizeof(struct dnsRecord));
+               if (alignedRecord.timeStamp != 0)
+                  /* If it's not permanent, check if it's TTL has expired */
+                  if ( (runtime-alignedRecord.timeStamp ) > (86400*cache_ttl) )
+                     put_dnode(log_rec.hostname, ares->ai_addr,
+                               ares->ai_addrlen,  host_table);
+            }
+            else
+            {
+               if (i==DB_NOTFOUND)
+                   put_dnode(log_rec.hostname, ares->ai_addr,
+                             ares->ai_addrlen, host_table);
+            }
+            freeaddrinfo(ares);
+         }
+      }
+   }
+   verbose = save_verbose;     /* restore verbosity level... */
+
+   listEntries = 0;
+  
+   /* build our linked list l_list  */
+   for(i=0;i < MAXHASH; i++)
+   {
+      for(h_entries=host_table[i]; h_entries ; h_entries = h_entries->next)
+      {
+         h_entries->llist = l_list;
+         l_list = h_entries;
+         listEntries++;
+      }
+   }
+
+   if(!l_list)
+   {
+      /* No valid addresses found... */
+      if (verbose>1) printf("%s\n",msg_dns_none);
+      tmp_flock.l_type=F_UNLCK;
+      fcntl(dns_fd, F_SETLK, &tmp_flock);
+      dns_db->close(dns_db, 0);
+      return 0;
+   }
+
+   /* process our list now... */
+   process_list(l_list);
+
+   /* get processing end time */
+   end_time = time(NULL);
+
+   /* display DNS processing statistics */
+   if (time_me || (verbose>1))
+   {
+      if (verbose<2 && time_me) printf("DNS: ");
+      printf("%llu %s ",listEntries, msg_addresses);
+
+      /* total processing time in seconds */
+      temp_time = difftime(end_time,start_time);
+      if (temp_time==0) temp_time=1;
+      printf("%s %.0f %s", msg_in, temp_time, msg_seconds);
+
+      /* calculate records per second */
+      if (temp_time)
+         i=( (int)((float)listEntries/temp_time) );
+      else i=0;
+
+      if ( (i>0) && (i<=listEntries) ) printf(", %d/sec\n", i);
+         else  printf("\n");
+   }
+
+   /* processing done, exit   */
+   tmp_flock.l_type=F_UNLCK;
+   fcntl(dns_fd, F_SETLK, &tmp_flock);
+   dns_db->close(dns_db, 0);
+   return 0;
+
+}
+
+/*********************************************/
+/* PROCESS_LIST - do the resoluton...        */
+/*********************************************/
+
+static void process_list(DNODEPTR l_list)
+{
+   DNODEPTR  trav;
+
+   char   child_buf[MAXHOST+3-((unsigned long)&trav+sizeof(trav))%3];
+   char   dns_buf[MAXHOST];
+   int    i;
+   int    pid;
+   int    nof_children = 0;
+   fd_set rd_set;
+   char   hbuf[NI_MAXHOST];
+  
+   struct sigaction sigChildAction;
+  
+   sigChildAction.sa_handler = sigChild;
+   sigChildAction.sa_flags   = SA_NOCLDSTOP|SA_RESTART;
+   sigemptyset(&sigChildAction.sa_mask);
+
+   raiseSigChild = 0;
+  
+   sigaction(SIGCHLD, &sigChildAction, NULL);
+  
+   /* fire up our child processes */
+   for(i=0; i < dns_children; i++)
+   {
+      if(pipe(child[i].inpipe))
+      {
+         if (verbose) fprintf(stderr,"INPIPE creation error");
+         return;   /* exit(1) */
+      }
+
+      if(pipe(child[i].outpipe))
+      {
+         if (verbose) fprintf(stderr,"OUTPIPE creation error");
+         return;   /* exit(1); */
+      }
+
+      /* fork it off */
+      switch(pid=fork())
+      {
+         case -1:
+         {
+            if (verbose) fprintf(stderr,"FORK error");
+            return;  /* exit(1); */
+         }
+         
+         case 0:             /* Child */
+         {
+            int size;
+
+            close(child[i].inpipe[0]);
+            close(child[i].outpipe[1]);
+
+            /* get struct sockaddr_storage here */
+            while((size = read(child[i].outpipe[0], child_buf, MAXHOST)))
+            {
+               if(size < 0)
+               {
+                  perror("read error");
+                  exit(1);
+               }
+               else
+               {
+                  /* Clear out our buffer */
+                  memset(hbuf,0,NI_MAXHOST);
+
+                  if(0 == getnameinfo((struct sockaddr*)child_buf, size,
+                                     hbuf, sizeof(hbuf), NULL, 0, NI_NAMEREQD))
+                  {
+                     /* must be at least 4 chars */
+                     if (strlen(hbuf)>3)
+                     {
+                        /* If long hostname, take max domain name part */
+                        if ((size = strlen(hbuf)) > MAXHOST-2)
+                           strcpy(child_buf,(hbuf+(size-MAXHOST+1)));
+                        else strcpy(child_buf, hbuf);
+                        size = strlen(child_buf);
+                     }
+                     else
+                     {
+                        if (debug_mode)
+                           printf("Child %d getnameinfo bad hbuf!\n",i);
+                     }
+                  }
+                  else
+                  {
+                     if(debug_mode)
+                       printf("Child %d getnameinfo failed!\n",i);
+                  }
+
+                  if (write(child[i].inpipe[1], child_buf, size) == -1)
+                  {
+                     perror("write error");
+                     exit(1);
+                  }
+               }
+            }
+            close(child[i].inpipe[1]);
+            close(child[i].outpipe[0]);
+               
+            if(debug_mode)
+               printf( "Child %d got closed input, shutting down\n", i);  
+
+            fflush(stdout);
+            exit(0);
+         }  /* case 0 */
+               
+         default:
+         {
+            child[i].pid = pid;
+            child[i].flags = DNS_CHILD_READY|DNS_CHILD_RUNNING;
+            nof_children++;
+            close(child[i].inpipe[1]);
+            close(child[i].outpipe[0]);
+
+            set_fl(child[i].inpipe[0], O_NONBLOCK);
+         }
+      }
+   }
+
+   trav = l_list;
+
+   while(nof_children)
+   {
+      static struct timeval selectTimeval;
+      int res;
+      int max_fd;
+         
+      FD_ZERO(&rd_set);
+      max_fd = 0;
+
+      if(raiseSigChild)
+      {
+         int pid;
+
+         while((pid = waitpid(-1, NULL, WNOHANG)) > 0)
+         {
+            for(i=0;i<dns_children;i++)
+            {
+               if(child[i].pid == pid)
+               {
+                  child[i].pid = 0;
+                  child[i].flags &= ~(DNS_CHILD_READY|DNS_CHILD_RUNNING);
+                  nof_children--;
+
+                  if(debug_mode)
+                  printf("Reaped Child %d\n", pid);
+
+                  break;
+               }
+            }
+         }
+         raiseSigChild--;
+         continue; /* while, nof children has just changed */
+      }
+
+      for(i=0;i<dns_children;i++)
+      {
+         if(child[i].flags & DNS_CHILD_RUNNING) /* Child is running */
+         {
+            if(child[i].flags & DNS_CHILD_READY)
+            {
+               child[i].flags  &= ~DNS_CHILD_READY;
+
+               if(trav)  /* something to resolve */
+               {
+                  if (write(child[i].outpipe[1], &trav->addr,
+                     trav->addrlen) != -1)
+                  {
+                     /* We will watch this child */
+                     child[i].cur    = trav;
+                     FD_SET(child[i].inpipe[0], &rd_set);
+                     max_fd = MAX(max_fd, child[i].inpipe[0]);
+
+                     if(debug_mode)
+                        printf("Giving %d bytes to Child %d\n",
+                        trav->addrlen, i);
+
+                     trav = trav->llist;
+                  }
+                  else  /* write error */
+                  {
+                     if(errno != EINTR)           /* Could be a signal */
+                     {
+                        perror("Could not write to pipe");
+                        close(child[i].outpipe[1]);           /* kill     */
+                        child[i].flags &= ~DNS_CHILD_RUNNING; /* child    */
+                     }
+                 }
+               }
+               else /* List is complete */
+               {
+                  close(child[i].outpipe[1]);            /* Go away       */
+                  child[i].flags &= ~DNS_CHILD_RUNNING;  /* Child is dead */
+               }
+            }
+            else
+            {
+               /* Look, the busy child... */
+               FD_SET(child[i].inpipe[0], &rd_set);
+               max_fd = MAX(max_fd, child[i].inpipe[0]);
+            }
+         }
+      }
+
+      selectTimeval.tv_sec =  5; /* This stuff ticks in 5 second intervals */
+      selectTimeval.tv_usec = 0;
+
+      switch(res = select(max_fd+1, &rd_set, NULL, NULL, &selectTimeval))
+      {
+         case -1:
+         {
+            if(errno != EINTR)   /* Could be a signal */
+            perror("Error in select");
+
+            break;
+         }
+
+         case 0:   /* Timeout, just fall once through the child loop */
+         {
+            if(debug_mode)
+            printf("tick\n");
+               
+            break;
+         }
+
+         default:
+         {
+            for(i=0; i< dns_children;i++)
+            {
+               if(!res)   /* All file descriptors done */
+               break;
+
+               if(FD_ISSET(child[i].inpipe[0], &rd_set))
+               {
+                  int size;
+
+                  res--;  /* One less... */
+
+                  switch (size=read(child[i].inpipe[0], dns_buf, MAXHOST))
+                  {
+                     case -1:
+                     {
+                        if(errno != EINTR)
+                        perror("Could not read from pipe");
+                        break;
+                     }
+                     case 0:
+                     {
+                        /* EOF. Child has closed Pipe. It shouldn't have */
+                        /*  done that, could be an error or something.   */
+                        /*  Reap it                                      */
+                        close(child[i].outpipe[1]);
+                        child[i].flags &= ~DNS_CHILD_RUNNING;
+
+                        if(debug_mode)
+                           printf("Child %d wants to be reaped\n", i);
+
+                        break;
+                     }
+
+                     default:
+                     {
+                        dns_buf[size] = '\0';
+                        if( strlen(dns_buf) > 1 &&
+                             memcmp(dns_buf, &(child[i].cur->addr),
+                                    sizeof(child[i].cur->addr)))
+                        {
+                           if(debug_mode)
+                              printf("Child %d Got a result: %s -> %s\n",
+                                     i, child[i].cur->string, dns_buf);
+                           db_put(child[i].cur->string, dns_buf, 0);
+                        }
+                        else
+                        {
+                           if(debug_mode)
+                              printf("Child %d could not resolve: %s (%s)\n",
+                                     i, child[i].cur->string,
+                                     (cache_ips)?"cache":"no cache");
+                           if (cache_ips)      /* Cache non-resolved? */
+                              db_put(child[i].cur->string,
+                                     child[i].cur->string,1);
+                        }
+
+                        if(debug_mode)
+                           printf("Child %d back in task pool\n", i);
+
+                        /* Child is back in the task pool */
+                        child[i].flags |= DNS_CHILD_READY;
+                        break;
+                     }
+                  }
+               }
+            }
+            break;
+         }
+      }
+   }
+   return;
+}
+
+/*********************************************/
+/* SET_FL - set flag on pipe FD              */
+/*********************************************/
+
+void set_fl(int fd, int flags)
+{
+   int val;
+
+   /* get current flags */
+   if ((val=fcntl(fd, F_GETFL, 0)) < 0)
+      if (verbose) fprintf(stderr,"set_fl F_GETFL error\n");
+
+   /* set them */
+   val |= flags;
+
+   /* and write them back */
+   if ((val=fcntl(fd, F_SETFL, val)) < 0)
+      if (verbose) fprintf(stderr,"set_fl F_SETFL error\n");
+}
+
+/*********************************************/
+/* CLR_FL - clear flag on pipe FD            */
+/*********************************************/
+
+void clr_fl(int fd, int flags)
+{
+   int val;
+
+   /* Get current flags */
+   if ((val=fcntl(fd, F_GETFL, 0)) < 0)
+      if (verbose) fprintf(stderr,"clr_fl F_GETFL error\n");
+
+   /* set them */
+   val &= ~flags;
+
+   /* and write them back */
+   if ((val=fcntl(fd, F_SETFL, val)) < 0)
+      if (verbose) fprintf(stderr,"clr_fl F_SETFL error\n");
+}
+
+/*********************************************/
+/* DB_PUT - put key/val in the cache db      */
+/*********************************************/
+
+static void db_put(char *key, char *value, int numeric)
+{
+   DBT    k, v;
+   char   *cp;
+   struct dnsRecord *recPtr = NULL;
+   int    nameLen = strlen(value)+1;
+
+   /* Align to multiple of eight bytes */
+   int recSize = (sizeof(struct dnsRecord)+nameLen+7) & ~0x7;
+       
+   /* make sure we have a db ;) */
+   if(dns_db)
+   {
+      if((recPtr = calloc(1, recSize)))
+      {
+         recPtr->timeStamp = runtime;
+         recPtr->numeric = numeric;
+         memcpy(&recPtr->hostName, value, nameLen);
+         memset(&k, 0, sizeof(k));
+         memset(&v, 0, sizeof(v));
+
+         /* Ensure all data is lowercase */
+         cp=key;   while (*cp++!='\0') *cp=tolower(*cp);
+         cp=value; while (*cp++!='\0') *cp=tolower(*cp);
+
+         k.data = key;
+         k.size = strlen(key);
+
+         v.size = recSize;
+         v.data = recPtr;
+
+         if ( dns_db->put(dns_db, NULL, &k, &v, 0) != 0 )
+            if (verbose>1) fprintf(stderr,"db_put fail!\n");
+         free(recPtr);
+      }
+   }
+}
+
+/*********************************************/
+/* SIGCHILD - raise our signal               */
+/*********************************************/
+
+static void sigChild(int signum)
+{
+   raiseSigChild++;
+}
+
+/*********************************************/
+/* OPEN_CACHE - open our cache file RDONLY   */
+/*********************************************/
+
+int open_cache()
+{
+   struct stat  dbStat;
+   struct flock tmp_flock;
+
+   tmp_flock.l_whence=SEEK_SET;    /* default flock fields */
+   tmp_flock.l_start=0;
+   tmp_flock.l_len=0;
+   tmp_flock.l_pid=0;
+   tmp_flock.l_type=F_RDLCK;
+
+   /* double check filename was specified */
+   if(!dns_cache) { dns_db=NULL; return 0; }
+
+   /* minimal sanity check on it */
+   if(stat(dns_cache, &dbStat) < 0)
+   {
+      if(errno != ENOENT) return 0;
+   }
+   else
+   {
+      if(!dbStat.st_size)  /* bogus file, probably from a crash */
+      {
+         unlink(dns_cache);  /* remove it so we can recreate... */
+      }
+   }
+  
+   /* open cache file */
+   if ( (db_create(&dns_db, NULL, 0) != 0)   ||
+        (dns_db->open(dns_db, NULL,
+           dns_cache, NULL, DB_HASH,
+           DB_RDONLY, 0644) != 0) )
+   {
+      /* Error: Unable to open DNS cache file <filename> */
+      if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nodb,dns_cache);
+      return 0;                  /* disable cache */
+   }
+
+   /* get file descriptor */
+   dns_db->fd(dns_db, &dns_fd);
+
+   /* Get shared lock on cache file */
+   if (fcntl(dns_fd, F_SETLK, &tmp_flock) < 0)
+   {
+      if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nolk,dns_cache);
+      dns_db->close(dns_db, 0);
+      return 0;
+   }
+   return 1;
+}
+
+/*********************************************/
+/* CLOSE_CACHE - close our RDONLY cache      */
+/*********************************************/
+
+int close_cache()
+{
+   struct flock tmp_flock;
+
+   tmp_flock.l_whence=SEEK_SET;    /* default flock fields */
+   tmp_flock.l_start=0;
+   tmp_flock.l_len=0;
+   tmp_flock.l_pid=0;
+   tmp_flock.l_type=F_UNLCK;
+
+   /* clear lock and close cache file */
+   fcntl(dns_fd, F_SETLK, &tmp_flock);
+   dns_db->close(dns_db, 0);
+   return 1;
+}
+
+/*********************************************/
+/* GEODB_OPEN - Open GeoDB database/cursor   */
+/*********************************************/
+
+DB *geodb_open(char *dbname)
+{
+   char buf[1025];
+
+   if (dbname==NULL)
+      snprintf(buf,sizeof(buf),"%s/GeoDB.dat",GEODB_LOC);
+   else
+      strncpy(buf,dbname,sizeof(buf)-1);
+   buf[sizeof(buf)-1]='\0';
+
+   /* create database thingie */
+   if ( db_create(&geo_db, NULL, 0) ) return NULL;
+
+   /* open the database */
+   if (geo_db->open(geo_db,NULL,buf,NULL,DB_BTREE,DB_RDONLY,0)) return NULL;
+
+   /* create our cursor */
+   if (geo_db->cursor(geo_db,NULL,&geo_dbc,0))
+   {
+      geo_db->close(geo_db,0);
+      return NULL;
+   }
+   /* all is well in the world */
+   return geo_db;
+}
+
+/*********************************************/
+/* GEODB_VER - Get database version info     */
+/*********************************************/
+
+char *geodb_ver(DB *db, char *str)
+{
+   int       i;
+   DBT       k,v;
+   unsigned  char x[16];
+
+   memset(&x,   0, sizeof(x));
+   memset(&k,   0, sizeof(k));
+   memset(&v,   0, sizeof(v));
+   k.data=&x;
+   k.size=sizeof(x);
+
+   i=geo_db->get(geo_db, NULL, &k, &v, 0);
+
+   if (i) strncpy(str, "Unknown", 8);
+   else   strncpy(str, v.data+3, v.size-3);
+   return str;
+}
+
+/*********************************************/
+/* GEODB_GET_CC - Get country code for IP    */
+/*********************************************/
+
+char *geodb_get_cc(DB *db, char *ip, char *buf)
+{
+   int      i;
+   DBT      k,v;
+   unsigned char addr[16];
+
+   memset(addr, 0, sizeof(addr));
+   strncpy(buf, "--", 3);
+
+   /* get IP address */
+   if (!iptype(ip, addr)) return buf;
+
+   /* kludge for IPv6 mapped IPv4 */
+   if (addr[0]==0 && addr[1]==0 && addr[2]==0) { addr[10]=0; addr[11]=0; }
+
+   /* kludge for IPv6 6to4 (RFC3056) */
+   if (addr[0]==0x20 && addr[1]==0x02)
+   {
+      memcpy(&addr[12],&addr[2],4);
+      memset(&addr,0,12);
+   }
+
+   memset(&k, 0, sizeof(k));
+   memset(&v, 0, sizeof(v));
+   k.data=&addr;
+   k.size=sizeof(addr);
+
+   i=geo_dbc->c_get(geo_dbc, &k, &v, DB_SET_RANGE);
+   if (!i) memcpy(buf, v.data, 2);
+   return buf;
+}
+
+/*********************************************/
+/* GEODB_CLOSE - close GeoDB database        */
+/*********************************************/
+
+void geodb_close(DB *db)
+{
+   db->close(db,0);
+}
+
+/*********************************************/
+/* IPTYPE - get IP type and format addr buf  */
+/*********************************************/
+
+int iptype(char *ip, unsigned char *buf)
+{
+   if (inet_pton(AF_INET6, ip, buf)>0)     return 2;
+   if (inet_pton(AF_INET,  ip, buf+12)>0)  return 1;
+   else return 0;
+}
+
+#endif  /* USE_DNS */
diff --git a/dns_resolv.h b/dns_resolv.h
new file mode 100644 (file)
index 0000000..29066f7
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _DNS_RESOLV_H
+#define _DNS_RESOLV_H
+
+#ifdef USE_DNS    /* skip whole file if not using DNS stuff...             */
+
+struct dnsRecord { time_t    timeStamp;       /* Timestamp of resolv data  */
+                   int       numeric;         /* 0: Name, 1: IP-address    */
+                   char      hostName[1]; };  /* Hostname (var length)     */
+
+struct dns_child             /* Defines the communication with a DNS child */
+{
+  int inpipe[2];             /* Pipe Child  -> Father */
+  int outpipe[2];            /* Pipe Father -> Child */
+  int pid;                   /* PID of Child */
+  int flags;                 /* see below */
+  struct dnode *cur;         /* Currently processed node */
+};
+
+extern void resolve_dns(struct log_struct *);
+extern DB   *dns_db;
+extern int  dns_fd;
+extern int  dns_resolver(void *);
+extern int  open_cache();
+extern int  close_cache();
+
+extern DB   *geo_db;
+extern DB   *geodb_open(char *);
+extern char *geodb_ver(DB *, char *);
+extern char *geodb_get_cc(DB *, char *, char *);
+extern void  geodb_close(DB *);
+
+#define DNS_CHILD_READY   0x1         /* Our child flags                    */
+#define DNS_CHILD_RUNNING 0x2
+
+#define MAXCHILD          100         /* Maximum number of DNS children     */
+
+#ifndef GEODB_LOC
+#define GEODB_LOC "/usr/share/GeoDB"
+#endif
+
+#endif  /* USE_DNS */
+#endif  /* _DNS_RESOLV_H */
diff --git a/graphs.c b/graphs.c
new file mode 100644 (file)
index 0000000..767c1fc
--- /dev/null
+++ b/graphs.c
@@ -0,0 +1,903 @@
+/*
+    graphs.c  - produces graphs used by the Webalizer
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <gd.h>
+#include <gdfontt.h>
+#include <gdfonts.h>
+#include <gdfontmb.h>
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#include "webalizer.h"
+#include "preserve.h"
+#include "lang.h"
+#include "graphs.h"
+
+/* Some systems don't define this */
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+#define HITCOLOR   hit_or_green            /* graph color - hits  */
+#define FILECOLOR  file_or_blue            /* files               */
+#define SITECOLOR  site_or_orange          /* sites               */
+#define KBYTECOLOR kbyte_or_red            /* KBytes              */
+#define PAGECOLOR  page_or_cyan            /* Files               */
+#define VISITCOLOR visit_or_yellow         /* Visits              */
+
+/* shortcuts to convert ASCII hex color for gdImageColorAllocate() */
+
+#define getred(s) (ashex2int((s[0] == '#')?s+1:s))
+/* returns the red base-10 integer value from a html color */
+
+#define getgreen(s) (ashex2int((s[0] == '#')?s+3:s+2))
+/* returns the green base-10 integer value from a html color */
+
+#define getblue(s) (ashex2int((s[0] == '#')?s+5:s+4))
+/* returns the blue base-10 integer value from a html color */
+
+#define CX 156                             /* center x (for pie)  */
+#define CY 150                             /* center y  (chart)   */
+#define XRAD 240                           /* X-axis radius       */
+#define YRAD 200                           /* Y-axis radius       */
+
+/* forward reference internal routines */
+
+void    init_graph(char *, int, int);
+struct  pie_data *calc_arc(float, float);
+int     ashex2int(char *);
+
+/* common public declarations */
+
+char *numchar[] = { " 0"," 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10",
+                    "11","12","13","14","15","16","17","18","19","20",
+                    "21","22","23","24","25","26","27","28","29","30","31"};
+
+gdImagePtr      im;                        /* image buffer        */
+FILE            *out;                      /* output file for PNG */
+struct stat     out_stat;                  /* stat struct for PNG */
+char            maxvaltxt[32];             /* graph values        */
+float           percent;                   /* percent storage     */
+u_int64_t       julday;                    /* julday value        */
+
+struct pie_data { int x; int y;            /* line x,y            */
+                  int mx; int my; };       /* midpoint x,y        */
+/* colors */
+int             black, white, grey, dkgrey, kbyte_or_red,
+                file_or_blue, site_or_orange, hit_or_green,
+                page_or_cyan, visit_or_yellow, blue;
+
+/*****************************************************************/
+/*                                                               */
+/* YEAR_GRAPH6x  - Year graph from array of hist_rec structs     */
+/*                                                               */
+/*****************************************************************/
+
+int year_graph6x(char *fname, char *title, struct hist_rec data[HISTSIZE])
+{
+
+   /* local variables */
+   int i,j,x1,y1,x2;
+   int s_mth,s_year=0;
+   float cw,cs,co,ci;
+
+   u_int64_t  maxval=1;
+   double     fmaxval=0.0;
+
+   /* initalize the graph */
+   init_graph(title,512,256);              /* init as 512 x 256  */
+
+   gdImageLine(im, 305,25,305,233,black);  /* draw section lines */
+   gdImageLine(im, 304,25,304,233,white);
+   gdImageLine(im, 305,130,490,130,black);
+   gdImageLine(im, 305,129,490,129,white);
+
+   /* index lines? */
+   if (graph_lines)
+   {
+      y1=210/(graph_lines+1);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,21,((i+1)*y1)+25,303,((i+1)*y1)+25,dkgrey);
+      y1=105/(graph_lines+1);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,306,((i+1)*y1)+25,489,((i+1)*y1)+25,dkgrey);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,306,((i+1)*y1)+130,489,((i+1)*y1)+130,dkgrey);
+   }
+
+   /* color coded legends? */
+   if (graph_legend)
+   {
+      /* Kbytes Legend */
+      i = (strlen(msg_h_xfer)*6);
+      gdImageString(im,gdFontSmall,491-i,237,
+                    (unsigned char *)msg_h_xfer,dkgrey);
+      gdImageString(im,gdFontSmall,490-i,236,
+                    (unsigned char *)msg_h_xfer,KBYTECOLOR);
+
+      /* Sites/Visits Legend */
+      i = (strlen(msg_h_visits)*6);
+      j = (strlen(msg_h_sites)*6);
+      gdImageString(im,gdFontSmall,491-i-j-12,11,
+                    (unsigned char *)msg_h_visits,dkgrey);
+      gdImageString(im,gdFontSmall,490-i-j-12,10,
+                    (unsigned char *)msg_h_visits,VISITCOLOR);
+      gdImageString(im,gdFontSmall,491-j-9,11,(unsigned char *)"/",dkgrey);
+      gdImageString(im,gdFontSmall,490-j-9,10,(unsigned char *)"/",black);
+      gdImageString(im,gdFontSmall,491-j,11,
+                    (unsigned char *)msg_h_sites,dkgrey);
+      gdImageString(im,gdFontSmall,490-j,10,
+                    (unsigned char *)msg_h_sites,SITECOLOR);
+
+      /* Hits/Files/Pages Legend */
+      i = (strlen(msg_h_pages)*6);
+      j = (strlen(msg_h_files)*6);
+      gdImageStringUp(im,gdFontSmall,6,231,
+                      (unsigned char *)msg_h_pages,dkgrey);
+      gdImageStringUp(im,gdFontSmall,5,230,
+                      (unsigned char *)msg_h_pages,PAGECOLOR);
+      gdImageStringUp(im,gdFontSmall,6,231-i-3,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,5,230-i-3,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,6,231-i-12,
+                      (unsigned char *)msg_h_files,dkgrey);
+      gdImageStringUp(im,gdFontSmall,5,230-i-12,
+                      (unsigned char *)msg_h_files,FILECOLOR);
+      gdImageStringUp(im,gdFontSmall,6,231-i-j-15,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,5,230-i-j-15,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,6,231-i-j-24,
+                      (unsigned char *)msg_h_hits,dkgrey);
+      gdImageStringUp(im,gdFontSmall,5,230-i-j-24,
+                      (unsigned char *)msg_h_hits,HITCOLOR);
+   }
+
+   /* Now draw data areas */
+   s_mth = HISTSIZE-graph_mths;
+   cs = 280.0/graph_mths; cw = cs/2;
+   co = (48/graph_mths<1)?1:48/graph_mths;
+   ci = 22+((cw-co)/2);
+
+   /* x-axis legend */
+   for (i=s_mth;i<HISTSIZE;i++)
+   {
+      if (graph_mths<16)
+      {
+         gdImageString(im,gdFontSmall,ci+((i-s_mth)*cs)+(((cw+co+co)-18)/2)+1,
+                     236,(unsigned char *)s_month[data[i].month-1],black);
+      }
+      else if (graph_mths<36)
+      {
+         gdImageChar(im,gdFontSmall,ci+((i-s_mth)*cs)+(((cw+co+co)-6)/2)+1,
+                     236,s_month[data[i].month-1][0],
+                     (data[i].month==1)?blue:black);
+      }
+      else
+      {
+         if (s_year!=data[i].year)  /* year change only */
+         {
+            if (data[i].month==1 && (i-s_mth)!=0)
+               gdImageChar(im,gdFontSmall, ci+((i-s_mth)*cs)-3,236,'|',blue);
+            j=(12-data[i].month+1)*cs;
+            if ((HISTSIZE-i)*cs < j) j=(HISTSIZE-i)*cs;
+            if (j>28)
+            {
+               /* format the year string */
+               sprintf(maxvaltxt, "%04d", data[i].year);
+               gdImageString(im,gdFontSmall,ci+((i-s_mth)*cs)+(j/2)-12,
+                             236, (unsigned char *)maxvaltxt, black);
+            }
+            s_year=data[i].year;
+         }
+      }
+
+      if (data[i].hit   > maxval) maxval = data[i].hit;
+      if (data[i].files > maxval) maxval = data[i].files;
+      if (data[i].page  > maxval) maxval = data[i].page;
+   }
+   if (maxval <= 0) maxval = 1;
+   sprintf(maxvaltxt, "%llu", maxval);
+   gdImageStringUp(im,gdFontSmall,6,26+(strlen(maxvaltxt)*6),
+                   (unsigned char *)maxvaltxt,black);
+
+   /* hits */
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+      percent = ((float)data[i].hit / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = ci + ((i-s_mth)*cs);
+      x2 = x1 + cw;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, HITCOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* files */
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+      percent = ((float)data[i].files / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = ci + co + ((i-s_mth)*cs);
+      x2 = x1 + cw;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, FILECOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* pages */
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+      percent = ((float)data[i].page / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = ci + co + co + ((i-s_mth)*cs);
+      x2 = x1 + cw;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, PAGECOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   maxval=0;
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+       if (data[i].site  > maxval) maxval = data[i].site;
+       if (data[i].visit > maxval) maxval = data[i].visit;
+   }
+   if (maxval <= 0) maxval = 1;
+   sprintf(maxvaltxt, "%llu", maxval);
+   gdImageStringUp(im, gdFontSmall,493,26+(strlen(maxvaltxt)*6),
+                   (unsigned char *)maxvaltxt, black);
+
+   cs = 180.0/graph_mths; cw = cs/2;
+   co = (48/graph_mths<1)?1:48/graph_mths;
+   ci = 308+((cw-co)/2);
+
+   /* visits */
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+      percent = ((float)data[i].visit / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = ci + ((i-s_mth)*cs);
+      x2 = x1 + cw;
+      y1 = 127 - (percent * 98);
+      gdImageFilledRectangle(im, x1, y1, x2, 127, VISITCOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 127, black);
+   }
+
+   /* sites */
+   for (i=s_mth; i<HISTSIZE; i++)
+   {
+      percent = ((float)data[i].site / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = ci + co + ((i-s_mth)*cs);
+      x2 = x1 + cw;
+      y1 = 127 - (percent * 98);
+      gdImageFilledRectangle(im, x1, y1, x2, 127, SITECOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 127, black);
+   }
+
+   fmaxval=0.0;
+   for (i=s_mth; i<HISTSIZE; i++)
+       if (data[i].xfer > fmaxval) fmaxval = data[i].xfer;
+   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);
+
+   /* 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);
+      x2 = x1 + cw;
+      y1 = 232 - (percent * 98);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, KBYTECOLOR);
+      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* stat the file */
+   if ( !(lstat(fname, &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,fname);
+         return(EBADF);
+      }
+   }
+
+   /* save PNG image */
+   if ((out = fopen(fname, "wb")) != NULL)
+   {
+      gdImagePng(im, out);
+      fclose(out);
+   }
+   /* deallocate memory */
+   gdImageDestroy(im);
+
+   return (0);
+}
+
+/*****************************************************************/
+/*                                                               */
+/* MONTH_GRAPH6  - Month graph with six data sets                */
+/*                                                               */
+/*****************************************************************/
+
+#define YSIZE 400
+
+int month_graph6(     char  *fname,        /* filename           */
+                      char  *title,        /* graph title        */
+                      int   month,         /* graph month        */
+                      int   year,          /* graph year         */
+                 u_int64_t  data1[31],     /* data1 (hits)       */
+                 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)     */
+{
+
+   /* local variables */
+   int         i,j,s,x1,y1,x2;
+   u_int64_t   maxval=0;
+   double      fmaxval=0.0;
+
+   /* calc julian date for month */
+   julday = (jdate(1, month,year) % 7);
+
+   /* initalize the graph */
+   init_graph(title,512,400);
+
+   gdImageLine(im, 21, 180, 490, 180, black); /* draw section lines */
+   gdImageLine(im, 21, 179, 490, 179, white);
+   gdImageLine(im, 21, 280, 490, 280, black);
+   gdImageLine(im, 21, 279, 490, 279, white);
+
+   /* index lines? */
+   if (graph_lines)
+   {
+      y1=154/(graph_lines+1);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,21,((i+1)*y1)+25,489,((i+1)*y1)+25,dkgrey);
+      y1=100/(graph_lines+1);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,21,((i+1)*y1)+180,489,((i+1)*y1)+180,dkgrey);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,21,((i+1)*y1)+280,489,((i+1)*y1)+280,dkgrey);
+   }
+
+   /* x-axis legend */
+   for (i=0;i<31;i++)
+   {
+      if ((julday % 7 == 6) || (julday % 7 == 0))
+       gdImageString(im,gdFontSmall,25+(i*15),382,
+                     (unsigned char *)numchar[i+1],HITCOLOR);
+      else
+       gdImageString(im,gdFontSmall,25+(i*15),382,
+                     (unsigned char *)numchar[i+1],black);
+      julday++;
+   }
+
+   /* y-axis legend */
+   for (i=0; i<31; i++)
+   {
+       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 (maxval <= 0) maxval = 1;
+   sprintf(maxvaltxt, "%llu", maxval);
+   gdImageStringUp(im, gdFontSmall,8,26+(strlen(maxvaltxt)*6),
+                   (unsigned char *)maxvaltxt,black);
+
+   if (graph_legend)                           /* Print color coded legends? */
+   {
+      /* Kbytes Legend */
+      gdImageStringUp(im,gdFontSmall,494,376,
+                      (unsigned char *)msg_h_xfer,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,375,
+                      (unsigned char *)msg_h_xfer,KBYTECOLOR);
+
+      /* Sites/Visits Legend */
+      i = (strlen(msg_h_sites)*6);
+      gdImageStringUp(im,gdFontSmall,494,276,
+                      (unsigned char *)msg_h_sites,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,275,
+                      (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,
+                      (unsigned char *)msg_h_visits,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,275-i-12,
+                      (unsigned char *)msg_h_visits,VISITCOLOR);
+
+      /* Pages/Files/Hits Legend */
+      s = ( i=(strlen(msg_h_pages)*6) )+
+          ( j=(strlen(msg_h_files)*6) )+
+          ( strlen(msg_h_hits)*6 )+ 52;
+      gdImageStringUp(im,gdFontSmall,494,s,
+                      (unsigned char *)msg_h_pages,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-1,
+                      (unsigned char *)msg_h_pages,PAGECOLOR);
+      gdImageStringUp(im,gdFontSmall,494,s-i-3,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-4,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,494,s-i-12,
+                      (unsigned char *)msg_h_files,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-13,
+                      (unsigned char *)msg_h_files,FILECOLOR);
+      gdImageStringUp(im,gdFontSmall,494,s-i-j-15,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-j-16,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,494,s-i-j-24,
+                      (unsigned char *)msg_h_hits,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-j-25,
+                      (unsigned char *)msg_h_hits,HITCOLOR);
+   }
+
+   /* data1 */
+   for (i=0; i<31; i++)
+   {
+      percent = ((float)data1[i] / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = 25 + (i*15);
+      x2 = x1 + 7;
+      y1 = 176 - (percent * 147);
+      gdImageFilledRectangle(im, x1, y1, x2, 176, HITCOLOR);
+      gdImageRectangle(im, x1, y1, x2, 176, black);
+   }
+
+   /* data2 */
+   for (i=0; i<31; i++)
+   {
+      percent = ((float)data2[i] / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = 27 + (i*15);
+      x2 = x1 + 7;
+      y1 = 176 - (percent * 147);
+      gdImageFilledRectangle(im, x1, y1, x2, 176, FILECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 176, black);
+   }
+
+   /* data5 */
+   for (i=0; i<31; i++)
+   {
+      if (data5[i]==0) continue;
+      percent = ((float)data5[i] / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = 29 + (i*15);
+      x2 = x1 + 7;
+      y1 = 176 - (percent * 147);
+      gdImageFilledRectangle(im, x1, y1, x2, 176, PAGECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 176, black);
+   }
+
+   /* sites / visits */
+   maxval=0;
+   for (i=0; i<31; i++)
+   {
+      if (data3[i]>maxval) maxval = data3[i];
+      if (data6[i]>maxval) maxval = data6[i];
+   }
+   if (maxval <= 0) maxval = 1;
+   sprintf(maxvaltxt, "%llu", maxval);
+   gdImageStringUp(im, gdFontSmall,8,180+(strlen(maxvaltxt)*6),
+                   (unsigned char *)maxvaltxt, black);
+   
+   /* data 6 */
+   for (i=0; i<31; i++)
+   {
+      percent = ((float)data6[i] / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = 25 + (i*15);
+      x2 = x1 + 8;
+      y1 = 276 - (percent * 92);
+      gdImageFilledRectangle(im, x1, y1, x2, 276, VISITCOLOR);
+      gdImageRectangle(im, x1, y1, x2, 276, black);
+   }
+
+   /* data 3 */
+   for (i=0; i<31; i++)
+   {
+      percent = ((float)data3[i] / (float)maxval);
+      if (percent <= 0.0) continue;
+      x1 = 29 + (i*15);
+      x2 = x1 + 7;
+      y1 = 276 - (percent * 92);
+      gdImageFilledRectangle(im, x1, y1, x2, 276, SITECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 276, black);
+   }
+
+   /* data4 */
+   fmaxval=0.0;
+   for (i=0; i<31; i++)
+      if (data4[i]>fmaxval) fmaxval = data4[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);
+   
+   for (i=0; i<31; i++)
+   {
+      percent = data4[i] / fmaxval;
+      if (percent <= 0.0) continue;
+      x1 = 26 + (i*15);
+      x2 = x1 + 10;
+      y1 = 375 - ( percent * 91 );
+      gdImageFilledRectangle(im, x1, y1, x2, 375, KBYTECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 375, black);
+   }
+
+   /* stat the file */
+   if ( !(lstat(fname, &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,fname);
+         return(EBADF);
+      }
+   }
+
+   /* save PNG image */
+   if ((out = fopen(fname, "wb")) != NULL)
+   {
+      gdImagePng(im, out);
+      fclose(out);
+   }
+   /* deallocate memory */
+   gdImageDestroy(im);
+
+   return (0);
+}
+
+/*****************************************************************/
+/*                                                               */
+/* DAY_GRAPH3  - Day graph with three data sets                  */
+/*                                                               */
+/*****************************************************************/
+
+int day_graph3(     char  *fname,
+                    char  *title,
+               u_int64_t  data1[24],
+               u_int64_t  data2[24],
+               u_int64_t  data3[24])
+{
+
+   /* local variables */
+   int       i,j,s,x1,y1,x2;
+   u_int64_t maxval=0;
+
+   /* initalize the graph */
+   init_graph(title,512,256);
+
+   /* index lines? */
+   if (graph_lines)
+   {
+      y1=210/(graph_lines+1);
+      for (i=0;i<graph_lines;i++)
+       gdImageLine(im,21,((i+1)*y1)+25,489,((i+1)*y1)+25,dkgrey);
+   }
+
+   /* x-axis legend */
+   for (i=0;i<24;i++)
+   {
+      gdImageString(im,gdFontSmall,33+(i*19),238,
+                    (unsigned char *)numchar[i],black);
+      if (data1[i] > maxval) maxval = data1[i];           /* get max val    */
+      if (data2[i] > maxval) maxval = data2[i];
+      if (data3[i] > maxval) maxval = data3[i];
+   }
+   if (maxval <= 0) maxval = 1;
+   sprintf(maxvaltxt, "%llu", maxval);
+   gdImageStringUp(im, gdFontSmall, 8, 26+(strlen(maxvaltxt)*6),
+                   (unsigned char *)maxvaltxt, black);
+   
+   if (graph_legend)                          /* print color coded legends? */
+   {
+      /* Pages/Files/Hits Legend */
+      s = ( i=(strlen(msg_h_pages)*6) )+
+          ( j=(strlen(msg_h_files)*6) )+
+          ( strlen(msg_h_hits)*6 )+ 52;
+      gdImageStringUp(im,gdFontSmall,494,s,
+                      (unsigned char *)msg_h_pages,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-1,
+                      (unsigned char *)msg_h_pages,PAGECOLOR);
+      gdImageStringUp(im,gdFontSmall,494,s-i-3,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-4,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,494,s-i-12,
+                      (unsigned char *)msg_h_files,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-13,
+                      (unsigned char *)msg_h_files,FILECOLOR);
+      gdImageStringUp(im,gdFontSmall,494,s-i-j-15,(unsigned char *)"/",dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-j-16,(unsigned char *)"/",black);
+      gdImageStringUp(im,gdFontSmall,494,s-i-j-24,
+                      (unsigned char *)msg_h_hits,dkgrey);
+      gdImageStringUp(im,gdFontSmall,493,s-i-j-25,
+                      (unsigned char *)msg_h_hits,HITCOLOR);
+   }
+
+   /* data1 */
+   for (i=0; i<24; i++)
+   {
+      percent = ((float)data1[i] / (float)maxval);  /* percent of 100% */
+      if (percent <= 0.0) continue;
+      x1 = 29 + (i*19);
+      x2 = x1 + 10;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, HITCOLOR);
+      gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* data2 */
+   for (i=0; i<24; i++)
+   {
+      percent = ((float)data2[i] / (float)maxval);  /* percent of 100% */
+      if (percent <= 0.0) continue;
+      x1 = 32 + (i*19);
+      x2 = x1 + 10;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, FILECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* data3 */
+   for (i=0; i<24; i++)
+   {
+      percent = ((float)data3[i] / (float)maxval);  /* percent of 100% */
+      if (percent <= 0.0) continue;
+      x1 = 35 + (i*19);
+      x2 = x1 + 10;
+      y1 = 232 - (percent * 203);
+      gdImageFilledRectangle(im, x1, y1, x2, 232, PAGECOLOR);
+      gdImageRectangle(im, x1, y1, x2, 232, black);
+   }
+
+   /* stat the file */
+   if ( !(lstat(fname, &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,fname);
+         return(EBADF);
+      }
+   }
+
+   /* save PNG image */
+   if ((out = fopen(fname, "wb")) != NULL)
+   {
+      gdImagePng(im, out);
+      fclose(out);
+   }
+   /* deallocate memory */
+   gdImageDestroy(im);
+
+   return (0);
+}
+
+/*****************************************************************/
+/*                                                               */
+/* PIE_CHART  - draw a pie chart (10 data items max)             */
+/*                                                               */
+/*****************************************************************/
+
+int pie_chart(char *fname, char *title, u_int64_t t_val,
+              u_int64_t data1[], char *legend[])
+{
+   int i,x,percent,y=47;
+   double s_arc=0.0;
+   int purple_or_pie1, ltgreen_or_pie2, ltpurple_or_pie3, brown_or_pie4;
+   int r, g, b;
+   char buffer[128];
+
+   struct pie_data gdata;
+
+   /* init graph and colors */
+   init_graph(title,512,300);
+   r=getred(pie_color1); g=getgreen(pie_color1); b=getblue(pie_color1);
+   purple_or_pie1  = gdImageColorAllocate(im, r, g, b);
+   r=getred(pie_color2); g=getgreen(pie_color2); b=getblue(pie_color2);
+   ltgreen_or_pie2 = gdImageColorAllocate(im, r, g, b);
+   r=getred(pie_color3); g=getgreen(pie_color3); b=getblue(pie_color3);
+   ltpurple_or_pie3= gdImageColorAllocate(im, r, g, b);
+   r=getred(pie_color4); g=getgreen(pie_color4); b=getblue(pie_color4);
+   brown_or_pie4 = gdImageColorAllocate(im, r, g, b);
+
+   /* do the circle... */
+   gdImageArc(im, CX, CY, XRAD, YRAD, 0, 360, black);
+   gdImageArc(im, CX, CY+10, XRAD-2, YRAD-2, 2, 178, black);
+   gdImageFillToBorder(im, CX, CY+(YRAD/2)+1, black, black);
+
+   /* slice the pie */
+   gdata=*calc_arc(0.0,0.0);
+   gdImageLine(im,CX,CY,gdata.x,gdata.y,black);  /* inital line           */
+
+   for (i=0;i<10;i++)                      /* run through data array      */
+   {
+      if ((data1[i]!=0)&&(s_arc<1.0))      /* make sure valid slice       */
+      {
+         percent=(((double)data1[i]/t_val)+0.005)*100.0;
+         if (percent<1) break;
+
+         if (s_arc+((double)percent/100.0)>=1.0)
+         {
+            gdata=*calc_arc(s_arc,1.0);
+            s_arc=1.0;
+         }
+         else
+         {
+            gdata=*calc_arc(s_arc,s_arc+((double)percent/100.0));
+            s_arc+=(double)percent/100.0;
+         }
+
+         gdImageLine(im, CX, CY, gdata.x, gdata.y, black);
+         gdImageFill(im, gdata.mx, gdata.my, i+5);
+
+        snprintf(buffer,sizeof(buffer),"%s (%d%%)",legend[i], percent);
+         x=480-(strlen(buffer)*7);
+         gdImageString(im,gdFontMediumBold, x+1, y+1,
+                       (unsigned char *)buffer, black);
+         gdImageString(im,gdFontMediumBold, x, y,
+                       (unsigned char *)buffer, i+5);
+         y+=20;
+      }
+   }
+
+   if (s_arc < 1.0)                         /* anything left over?        */
+   {
+      gdata=*calc_arc(s_arc,1.0);
+
+      gdImageFill(im, gdata.mx, gdata.my, white);
+      snprintf(buffer,sizeof(buffer),"%s (%d%%)",
+           msg_h_other,100-(int)(s_arc*100));
+      x=480-(strlen(buffer)*7);
+      gdImageString(im,gdFontMediumBold, x+1, y+1,
+                    (unsigned char *)buffer, black);
+      gdImageString(im,gdFontMediumBold, x, y,
+                    (unsigned char *)buffer, white);
+   }
+
+   /* stat the file */
+   if ( !(lstat(fname, &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,fname);
+         return(EBADF);
+      }
+   }
+
+   /* save PNG image */
+   if ((out = fopen(fname, "wb")) != NULL)
+   {
+      gdImagePng(im, out);
+      fclose(out);
+   }
+   /* deallocate memory */
+   gdImageDestroy(im);
+
+   return (0);
+}
+
+/*****************************************************************/
+/*                                                               */
+/* CALC_ARC  - generate x,y coordinates for pie chart            */
+/*                                                               */
+/*****************************************************************/
+
+struct pie_data *calc_arc(float min, float max)
+{
+   static struct pie_data data;
+   double d;
+
+   /* Calculate max line */
+   d=max;
+   data.x=cos(d*(2*PI))*((XRAD-2)/2)+CX;
+   data.y=sin(d*(2*PI))*((YRAD-2)/2)+CY;
+   /* Now get mid-point  */
+   d=((min+max)/2);
+   data.mx=cos(d*(2*PI))*(XRAD/3)+CX;
+   data.my=sin(d*(2*PI))*(YRAD/3)+CY;
+   return &data;
+}
+
+/*****************************************************************/
+/*                                                               */
+/* INIT_GRAPH  - initalize graph and draw borders                */
+/*                                                               */
+/*****************************************************************/
+
+void init_graph(char *title, int xsize, int ysize)
+{
+   int i, r, g, b;
+
+   im = gdImageCreate(xsize,ysize);
+
+   /* allocate color maps, background color first (grey) */
+   grey    = gdImageColorAllocate(im, 192, 192, 192);
+   dkgrey  = gdImageColorAllocate(im, 128, 128, 128);
+   black   = gdImageColorAllocate(im, 0, 0, 0);
+   white   = gdImageColorAllocate(im, 255, 255, 255);
+   blue    = gdImageColorAllocate(im, 0, 0, 255);
+   r=getred(hit_color); g=getgreen(hit_color); b=getblue(hit_color);
+   hit_or_green = gdImageColorAllocate(im, r, g, b);
+   r=getred(site_color); g=getgreen(site_color); b=getblue(site_color);
+   site_or_orange = gdImageColorAllocate(im, r, g, b);
+   r=getred(file_color); g=getgreen(file_color); b=getblue(file_color);
+   file_or_blue = gdImageColorAllocate(im, r, g, b);
+   r=getred(kbyte_color); g=getgreen(kbyte_color); b=getblue(kbyte_color);
+   kbyte_or_red = gdImageColorAllocate(im, r, g, b);
+   r=getred(page_color); g=getgreen(page_color); b=getblue(page_color);
+   page_or_cyan = gdImageColorAllocate(im, r, g, b);
+   r=getred(visit_color); g=getgreen(visit_color); b=getblue(visit_color);
+   visit_or_yellow = gdImageColorAllocate(im, r, g, b);
+
+   /* black outside border */
+   gdImageRectangle(im, 0, 0, xsize-1, ysize-1, black);
+
+   /* do shadow effect (bevel) border */
+   for (i=1; i<5 ;i++)
+   {
+      gdImageLine(im, i, i, xsize-i-2, i, white);
+      gdImageLine(im, i, i, i, ysize-i-2, white);
+      gdImageLine(im, i+1, ysize-i-1, xsize-i-1, ysize-i-1, dkgrey);
+      gdImageLine(im, xsize-i-1, i+1, xsize-i-1, ysize-i-1, dkgrey);
+   }
+
+   /* generic inside shadow box */
+   gdImageRectangle(im, 20, 25, xsize-21, ysize-21, black);
+   gdImageRectangle(im, 19, 24, xsize-22, ysize-22, white);
+
+   /* display the graph title */
+   gdImageString(im, gdFontMediumBold, 20, 8,
+                 (unsigned char *)title, blue);
+
+   return;
+}
+
+/****************************************************************/
+/*                                                              */
+/* ASHEX2INT - ASCII HEX TO INT CONVERTER                       */
+/*                                                              */
+/****************************************************************/
+
+int ashex2int(char *str)
+{
+   /* returns base-10 integer value from a 2 ASCII hex number   */
+   return from_hex(str[1])+(from_hex(str[0])*16);
+}
diff --git a/graphs.h b/graphs.h
new file mode 100644 (file)
index 0000000..b75daa5
--- /dev/null
+++ b/graphs.h
@@ -0,0 +1,10 @@
+#ifndef _GRAPHS_H
+#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 *);
+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 **);
+
+#endif  /* _GRAPHS_H */
diff --git a/hashtab.c b/hashtab.c
new file mode 100644 (file)
index 0000000..af33591
--- /dev/null
+++ b/hashtab.c
@@ -0,0 +1,1284 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <sys/utsname.h>
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* some need for uint* */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#include "webalizer.h"                        /* main header              */
+#include "lang.h"
+#include "linklist.h"
+#include "hashtab.h"
+
+/* internal function prototypes */
+
+HNODEPTR new_hnode(char *);                   /* new host node            */
+UNODEPTR new_unode(char *);                   /* new url node             */
+RNODEPTR new_rnode(char *);                   /* new referrer node        */
+ANODEPTR new_anode(char *);                   /* new user agent node      */
+SNODEPTR new_snode(char *);                   /* new search string..      */
+INODEPTR new_inode(char *);                   /* new ident node           */
+#ifdef USE_DNS
+DNODEPTR new_dnode(char *);                   /* new DNS node             */
+#endif  /* USE_DNS */
+
+void     update_entry(char *);                /* update entry/exit        */
+void     update_exit(char *);                 /* page totals              */
+
+unsigned int hash(char *);                    /* hash function            */
+
+/* local data */
+
+HNODEPTR sm_htab[MAXHASH];                    /* hash tables              */
+HNODEPTR sd_htab[MAXHASH];
+UNODEPTR um_htab[MAXHASH];                    /* for hits, sites,         */
+RNODEPTR rm_htab[MAXHASH];                    /* referrers and agents...  */
+ANODEPTR am_htab[MAXHASH];
+SNODEPTR sr_htab[MAXHASH];                    /* search string table      */
+INODEPTR im_htab[MAXHASH];                    /* ident table (username)   */
+#ifdef USE_DNS
+DNODEPTR host_table[MAXHASH];                 /* DNS hash table           */
+#endif  /* USE_DNS */
+
+/* Last node pointers */
+HNODEPTR lm_hnode=NULL;
+HNODEPTR ld_hnode=NULL;
+RNODEPTR l_rnode=NULL;
+
+/*********************************************/
+/* DEL_HTABS - clear out our hash tables     */
+/*********************************************/
+
+void del_htabs()
+{
+   del_hlist(sd_htab);                        /* Clear out our various    */
+   del_ulist(um_htab);                        /* hash tables here by      */
+   del_hlist(sm_htab);                        /* calling the appropriate  */
+   del_rlist(rm_htab);                        /* del_* fuction for each   */
+   del_alist(am_htab);
+   del_slist(sr_htab);
+   del_ilist(im_htab);
+#ifdef USE_DNS
+/* del_dlist(host_table);  */                    /* delete DNS hash table    */
+#endif  /* USE_DNS */
+}
+
+/*********************************************/
+/* NEW_HNODE - create host node              */
+/*********************************************/
+
+HNODEPTR new_hnode(char *str)
+{
+   HNODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXHOST)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_hnode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXHOST-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (HNODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct hnode))) != NULL)
+   {
+      newptr->string    =sptr;
+      newptr->visit     =0;
+      newptr->tstamp    =0;
+      newptr->lasturl   =blank_str;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_HNODE - insert/update host node       */
+/*********************************************/
+
+int put_hnode( char      *str,  /* Hostname  */
+               int       type,  /* obj type  */
+               u_int64_t count, /* hit count */
+               u_int64_t file,  /* File flag */
+               double    xfer,  /* xfer size */
+               u_int64_t *ctr,  /* counter   */
+               u_int64_t visit, /* visits    */
+               u_int64_t tstamp,/* timestamp */
+               char      *lasturl, /* lasturl */
+               HNODEPTR  *htab)  /* ptr>next  */
+{
+   HNODEPTR cptr,nptr;
+   unsigned int hval;
+
+   /* check if hashed */
+   hval=hash(str);
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_hnode(str)) != NULL)
+      {
+         if (htab==sm_htab) lm_hnode=nptr;
+         else               ld_hnode=nptr;
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->files = file;
+         nptr->xfer  = xfer;
+         nptr->next  = NULL;
+         htab[hval] = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+
+         if (visit)
+         {
+            nptr->visit=(visit-1);
+            nptr->lasturl=find_url(lasturl);
+            nptr->tstamp=tstamp;
+            return 0;
+         }
+         else
+         {
+            if (ispage(log_rec.url))
+            {
+               if (htab==sm_htab) update_entry(log_rec.url);
+               nptr->lasturl=find_url(log_rec.url);
+               nptr->tstamp=tstamp;
+               nptr->visit=1;
+            }
+         }
+      }
+   }
+   else
+   {
+      /* hashed (SPEEDUP) */
+      if (htab==sm_htab)
+      {
+         if (lm_hnode!=NULL && strcmp(lm_hnode->string,str)==0) cptr=lm_hnode;
+      }
+      else
+      {
+         if (ld_hnode!=NULL && strcmp(ld_hnode->string,str)==0) cptr=ld_hnode;
+      }
+
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+            {
+               /* found... bump counter */
+               cptr->count+=count;
+               cptr->files+=file;
+               cptr->xfer +=xfer;
+
+               if (ispage(log_rec.url))
+               {
+                  if ((tstamp-cptr->tstamp)>=visit_timeout)
+                  {
+                     cptr->visit++;
+                     if (htab==sm_htab)
+                     {
+                        update_exit(cptr->lasturl);
+                        update_entry(log_rec.url);
+                     }
+                  }
+                  cptr->lasturl=find_url(log_rec.url);
+                  cptr->tstamp=tstamp;
+               }
+               if (htab==sm_htab) lm_hnode=cptr;
+               else               ld_hnode=cptr;
+               return 0;
+            }
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_hnode(str)) != NULL)
+      {
+         if (htab==sm_htab) lm_hnode=nptr;
+         else               ld_hnode=nptr;
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->files = file;
+         nptr->xfer  = xfer;
+         nptr->next  = htab[hval];
+         htab[hval]=nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+
+         if (visit)
+         {
+            nptr->visit = (visit-1);
+            nptr->lasturl=find_url(lasturl);
+            nptr->tstamp= tstamp;
+            return 0;
+         }
+         else
+         {
+            if (ispage(log_rec.url))
+            {
+               if (htab==sm_htab) update_entry(log_rec.url);
+               nptr->lasturl=find_url(log_rec.url);
+               nptr->tstamp= tstamp;
+               nptr->visit=1;
+            }
+         }
+      }
+   }
+
+   if (nptr!=NULL)
+   {
+      /* set object type */
+      if (type==OBJ_GRP) nptr->flag=OBJ_GRP;            /* is it a grouping? */
+      else
+      {
+         /* check if it's a hidden object */
+         if ((hide_sites)||(isinlist(hidden_sites,nptr->string)!=NULL))
+           nptr->flag=OBJ_HIDE;
+         if (htab==sm_htab) lm_hnode=nptr;
+         else               ld_hnode=nptr;
+      }
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_HLIST - delete host hash table        */
+/*********************************************/
+
+void   del_hlist(HNODEPTR *htab)
+{
+   /* free memory used by hash table */
+   HNODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);    /* free hostname string space */
+            free (aptr);            /* free hostname structure    */
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+   lm_hnode=NULL;
+   ld_hnode=NULL;
+}
+
+/*********************************************/
+/* NEW_UNODE - URL node creation             */
+/*********************************************/
+
+UNODEPTR new_unode(char *str)
+{
+   UNODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXURLH)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_unode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXURLH-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL) return (UNODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct unode))) != NULL)
+   {
+      newptr->string=sptr;
+      newptr->count = 0;
+      newptr->flag  = OBJ_REG;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_UNODE - insert/update URL node        */
+/*********************************************/
+
+int put_unode(char *str, int type, u_int64_t count, double xfer,
+              u_int64_t *ctr, u_int64_t entry, u_int64_t exit, UNODEPTR *htab)
+{
+   UNODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if (str[0]=='-') return 0;
+
+   hval = hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_unode(str)) != NULL)
+      {
+         nptr->flag = type;
+         nptr->count= count;
+         nptr->xfer = xfer;
+         nptr->next = NULL;
+         nptr->entry= entry;
+         nptr->exit = exit;
+         htab[hval] = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   else
+   {
+      /* hashed */
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+            {
+               /* found... bump counter */
+               cptr->count+=count;
+               cptr->xfer += xfer;
+               return 0;
+            }
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_unode(str)) != NULL)
+      {
+         nptr->flag = type;
+         nptr->count= count;
+         nptr->xfer = xfer;
+         nptr->next = htab[hval];
+         nptr->entry= entry;
+         nptr->exit = exit;
+         htab[hval] = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   if (nptr!=NULL)
+   {
+      if (type==OBJ_GRP) nptr->flag=OBJ_GRP;
+      else if (isinlist(hidden_urls,nptr->string)!=NULL)
+                         nptr->flag=OBJ_HIDE;
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_ULIST - delete URL hash table         */
+/*********************************************/
+
+void   del_ulist(UNODEPTR *htab)
+{
+   /* free memory used by hash table */
+   UNODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);  /* free up URL string memory */
+            free (aptr);          /* free up URL struct node   */
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+}
+
+/*********************************************/
+/* NEW_RNODE - Referrer node creation        */
+/*********************************************/
+
+RNODEPTR new_rnode(char *str)
+{
+   RNODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXREFH)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_rnode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXREFH-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (RNODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct rnode))) != NULL)
+   {
+      newptr->string= sptr;
+      newptr->count = 1;
+      newptr->flag  = OBJ_REG;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_RNODE - insert/update referrer node   */
+/*********************************************/
+
+int put_rnode(char *str, int type, u_int64_t count,
+              u_int64_t *ctr, RNODEPTR *htab)
+{
+   RNODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if (str[0]=='-') strcpy(str,"- (Direct Request)");
+
+   hval = hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_rnode(str)) != NULL)
+      {
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->next  = NULL;
+         htab[hval]  = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   else
+   {
+      /* hashed (SPEEDUP) */
+      if (l_rnode!=NULL && strcmp(l_rnode->string,str)==0) cptr=l_rnode;
+
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+            {
+               /* found... bump counter */
+               cptr->count+=count;
+               return 0;
+            }
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_rnode(str)) != NULL)
+      {
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->next  = htab[hval];
+         htab[hval]  = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   if (nptr!=NULL)
+   {
+      if (type==OBJ_GRP) nptr->flag=OBJ_GRP;
+      else if (isinlist(hidden_refs,nptr->string)!=NULL)
+                         nptr->flag=OBJ_HIDE;
+      l_rnode=nptr;
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_RLIST - delete referrer hash table    */
+/*********************************************/
+
+void   del_rlist(RNODEPTR *htab)
+{
+   /* free memory used by hash table */
+   RNODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);
+            free (aptr);
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+   l_rnode=NULL;
+}
+
+/*********************************************/
+/* NEW_ANODE - User Agent node creation      */
+/*********************************************/
+
+ANODEPTR new_anode(char *str)
+{
+   ANODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXAGENT)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_anode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXAGENT-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (ANODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct anode))) != NULL)
+   {
+      newptr->string= sptr;
+      newptr->count = 1;
+      newptr->flag  = OBJ_REG;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_ANODE - insert/update user agent node */
+/*********************************************/
+
+int put_anode(char *str, int type, u_int64_t count,
+              u_int64_t *ctr, ANODEPTR *htab)
+{
+   ANODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if (str[0]=='-') return 0;     /* skip bad user agents */
+
+   hval = hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_anode(str)) != NULL)
+      {
+         nptr->flag = type;
+         nptr->count= count;
+         nptr->next = NULL;
+         htab[hval] = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   else
+   {
+      /* hashed */
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+            {
+               /* found... bump counter */
+               cptr->count+=count;
+               return 0;
+            }
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_anode(str)) != NULL)
+      {
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->next  = htab[hval];
+         htab[hval]  = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+      }
+   }
+   if (type==OBJ_GRP) nptr->flag=OBJ_GRP;
+   else if (isinlist(hidden_agents,nptr->string)!=NULL)
+                      nptr->flag=OBJ_HIDE;
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_ALIST - delete user agent hash table  */
+/*********************************************/
+
+void   del_alist(ANODEPTR *htab)
+{
+   /* free memory used by hash table */
+   ANODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);
+            free (aptr);
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+}
+
+/*********************************************/
+/* NEW_SNODE - Search str node creation      */
+/*********************************************/
+
+SNODEPTR new_snode(char *str)
+{
+   SNODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXSRCHH)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_snode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXSRCHH-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (SNODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct snode))) != NULL)
+   {
+      newptr->string= sptr;
+      newptr->count = 1;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_SNODE - insert/update search str node */
+/*********************************************/
+
+int put_snode(char *str, u_int64_t count, SNODEPTR *htab)
+{
+   SNODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if (str[0]==0 || str[0]==' ') return 0;     /* skip bad search strs */
+
+   hval=hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_snode(str)) != NULL)
+      {
+         nptr->count = count;
+         nptr->next = NULL;
+         htab[hval] = nptr;
+      }
+   }
+   else
+   {
+      /* hashed */
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            /* found... bump counter */
+            cptr->count+=count;
+            return 0;
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_snode(str)) != NULL)
+      {
+         nptr->count = count;
+         nptr->next  = htab[hval];
+         htab[hval]  = nptr;
+      }
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_SLIST - delete search str hash table  */
+/*********************************************/
+
+void   del_slist(SNODEPTR *htab)
+{
+   /* free memory used by hash table */
+   SNODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);
+            free (aptr);
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+}
+
+/*********************************************/
+/* NEW_INODE - create ident (username) node  */
+/*********************************************/
+
+INODEPTR new_inode(char *str)
+{
+   INODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXIDENT)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_inode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXIDENT-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (INODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct inode))) != NULL)
+   {
+      newptr->string    =sptr;
+      newptr->visit     =1;
+      newptr->tstamp    =0;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_INODE - insert/update ident node      */
+/*********************************************/
+
+int put_inode( char      *str,  /* ident str */
+               int       type,  /* obj type  */
+               u_int64_t count, /* hit count */
+               u_int64_t file,  /* File flag */
+               double    xfer,  /* xfer size */
+               u_int64_t *ctr,  /* counter   */
+               u_int64_t visit, /* visits    */
+               u_int64_t tstamp,/* timestamp */
+               INODEPTR  *htab) /* hashtable */
+{
+   INODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if ((str[0]=='-') || (str[0]==0)) return 0;  /* skip if no username */
+
+   hval = hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_inode(str)) != NULL)
+      {
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->files = file;
+         nptr->xfer  = xfer;
+         nptr->next  = NULL;
+         htab[hval] = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+
+         if (visit)
+         {
+            nptr->visit=(visit-1);
+            nptr->tstamp=tstamp;
+            return 0;
+         }
+         else
+         {
+            if (ispage(log_rec.url)) nptr->tstamp=tstamp;
+         }
+      }
+   }
+   else
+   {
+      /* hashed */
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+         {
+            if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+            {
+               /* found... bump counter */
+               cptr->count+=count;
+               cptr->files+=file;
+               cptr->xfer +=xfer;
+
+               if (ispage(log_rec.url))
+               {
+                  if ((tstamp-cptr->tstamp)>=visit_timeout)
+                     cptr->visit++;
+                  cptr->tstamp=tstamp;
+               }
+               return 0;
+            }
+         }
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_inode(str)) != NULL)
+      {
+         nptr->flag  = type;
+         nptr->count = count;
+         nptr->files = file;
+         nptr->xfer  = xfer;
+         nptr->next  = htab[hval];
+         htab[hval]  = nptr;
+         if (type!=OBJ_GRP) (*ctr)++;
+
+         if (visit)
+         {
+            nptr->visit = (visit-1);
+            nptr->tstamp= tstamp;
+            return 0;
+         }
+         else
+         {
+            if (ispage(log_rec.url)) nptr->tstamp= tstamp;
+         }
+      }
+   }
+
+   if (nptr!=NULL)
+   {
+      /* set object type */
+      if (type==OBJ_GRP) nptr->flag=OBJ_GRP;            /* is it a grouping? */
+      else
+      {
+         /* check if it's a hidden object */
+         if (isinlist(hidden_users,nptr->string)!=NULL)
+           nptr->flag=OBJ_HIDE;
+      }
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_ILIST - delete ident hash table       */
+/*********************************************/
+
+void   del_ilist(INODEPTR *htab)
+{
+   /* free memory used by hash table */
+   INODEPTR aptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         aptr = htab[i];
+         while (aptr != NULL)
+         {
+            temp = aptr->next;
+            free (aptr->string);    /* free ident string space */
+            free (aptr);            /* free ident structure    */
+            aptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+}
+
+#ifdef USE_DNS   /* only add these for DNS   */
+
+/*********************************************/
+/* NEW_DNODE - DNS resolver node creation    */
+/*********************************************/
+
+DNODEPTR new_dnode(char *str)
+{
+   DNODEPTR newptr;
+   char     *sptr;
+
+   if (strlen(str) >= MAXHOST)
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"[new_dnode] %s (%d)",msg_big_one,strlen(str));
+         if (debug_mode)
+            fprintf(stderr,":\n--> %s",str);
+         fprintf(stderr,"\n");
+      }
+      str[MAXHOST-1]=0;
+   }
+
+   if ( (sptr=malloc(strlen(str)+1))==NULL ) return (DNODEPTR)NULL;
+   strcpy(sptr,str);
+
+   if (( newptr = malloc(sizeof(struct dnode))) != NULL)
+   {
+      newptr->string= sptr;
+   }
+   else free(sptr);
+   return newptr;
+}
+
+/*********************************************/
+/* PUT_DNODE - insert/update dns host node   */
+/*********************************************/
+
+int put_dnode(char *str, void *addr, int len, DNODEPTR *htab)
+{
+   DNODEPTR cptr,nptr;
+   unsigned int hval;
+
+   if (str[0]==0 || str[0]==' ') return 0;     /* skip bad hostnames */
+
+   hval = hash(str);
+   /* check if hashed */
+   if ( (cptr = htab[hval]) == NULL)
+   {
+      /* not hashed */
+      if ( (nptr=new_dnode(str)) != NULL)
+      {
+         if (addr) memcpy(&nptr->addr, addr, len);
+            else   memset(&nptr->addr, 0, sizeof(struct sockaddr_storage));
+         nptr->addrlen = len;
+         nptr->next = NULL;
+         htab[hval] = nptr;
+      }
+   }
+   else
+   {
+      /* hashed */
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0) return 0;
+         cptr = cptr->next;
+      }
+      /* not found... */
+      if ( (nptr = new_dnode(str)) != NULL)
+      {
+         if (addr) memcpy(&nptr->addr, addr, len);
+            else   memset(&nptr->addr, 0, sizeof(struct sockaddr_storage));
+         nptr->addrlen = len;
+         nptr->next  = htab[hval];
+         htab[hval]  = nptr;
+      }
+   }
+   return nptr==NULL;
+}
+
+/*********************************************/
+/* DEL_DLIST - delete dns hash table         */
+/*********************************************/
+
+void   del_dlist(DNODEPTR *htab)
+{
+   /* free memory used by hash table */
+   DNODEPTR dptr,temp;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      if (htab[i] != NULL)
+      {
+         dptr = htab[i];
+         while (dptr != NULL)
+         {
+            temp = dptr->next;
+            free (dptr->string);
+            free (dptr);
+            dptr = temp;
+         }
+         htab[i]=NULL;
+      }
+   }
+}
+
+#endif /* USE_DNS */
+
+/*********************************************/
+/* FIND_URL - Find URL in hash table         */
+/*********************************************/
+
+char *find_url(char *str)
+{
+   UNODEPTR cptr;
+
+   if ( (cptr=um_htab[hash(str)]) != NULL)
+   {
+      while (cptr != NULL)
+      {
+         if (strcmp(cptr->string,str)==0)
+            return cptr->string;
+         cptr = cptr->next;
+      }
+   }
+   return blank_str;   /* shouldn't get here */
+}
+
+/*********************************************/
+/* UPDATE_ENTRY - update entry page total    */
+/*********************************************/
+
+void update_entry(char *str)
+{
+   UNODEPTR uptr;
+
+   if (str==NULL) return;
+   if ( (uptr = um_htab[hash(str)]) == NULL) return;
+   else
+   {
+      while (uptr != NULL)
+      {
+         if (strcmp(uptr->string,str)==0)
+         {
+            if (uptr->flag!=OBJ_GRP)
+            {
+               uptr->entry++;
+               return;
+            }
+         }
+         uptr=uptr->next;
+      }
+   }
+}
+
+/*********************************************/
+/* UPDATE_EXIT  - update exit page total     */
+/*********************************************/
+
+void update_exit(char *str)
+{
+   UNODEPTR uptr;
+
+   if (str==NULL) return;
+   if ( (uptr = um_htab[hash(str)]) == NULL) return;
+   else
+   {
+      while (uptr != NULL)
+      {
+         if (strcmp(uptr->string,str)==0)
+         {
+            if (uptr->flag!=OBJ_GRP)
+            {
+               uptr->exit++;
+               return;
+            }
+         }
+         uptr=uptr->next;
+      }
+   }
+}
+
+/*********************************************/
+/* MONTH_UPDATE_EXIT  - eom exit page update */
+/*********************************************/
+
+void month_update_exit(u_int64_t tstamp)
+{
+   HNODEPTR nptr;
+   int i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      nptr=sm_htab[i];
+      while (nptr!=NULL)
+      {
+         if (nptr->flag!=OBJ_GRP)
+         {
+            if ((tstamp-nptr->tstamp)>=visit_timeout)
+               update_exit(nptr->lasturl);
+         }
+         nptr=nptr->next;
+      }
+   }
+}
+
+/*********************************************/
+/* TOT_VISIT - calculate total visits        */
+/*********************************************/
+
+u_int64_t tot_visit(HNODEPTR *list)
+{
+   HNODEPTR   hptr;
+   u_int64_t  tot=0;
+   int        i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      hptr=list[i];
+      while (hptr!=NULL)
+      {
+         if (hptr->flag!=OBJ_GRP) tot+=hptr->visit;
+         hptr=hptr->next;
+      }
+   }
+   return tot;
+}
+
+#ifdef USE_OLDHASH
+/*********************************************/
+/* HASH - return hash value for string       */
+/*********************************************/
+
+unsigned int hash(char *str)
+{
+   uint32_t  hashval=0;
+
+   for (hashval = 0; *str != '\0'; str++)
+      hashval = *str + (hashval << 5) - hashval;
+
+   return hashval % MAXHASH;
+}
+
+#else /* USE_OLDHASH */
+/*********************************************/
+/* HASH (SuperFastHash by Paul Hsieh)        */
+/*********************************************/
+
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+  || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
+                       +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+
+unsigned int hash(char *str)
+{
+   int len=strlen(str);
+   uint32_t hash = len, tmp;
+   int rem;
+
+   if (len <= 0 || str == NULL) return 0;
+
+   rem = len & 3;
+   len >>= 2;
+
+   /* Main loop */
+   for (;len > 0; len--)
+   {
+      hash  += get16bits (str);
+      tmp    = (get16bits (str+2) << 11) ^ hash;
+      hash   = (hash << 16) ^ tmp;
+      str   += 2*sizeof (uint16_t);
+      hash  += hash >> 11;
+   }
+
+   /* Handle end cases */
+   switch (rem)
+   {
+      case 3: hash += get16bits (str);
+              hash ^= hash << 16;
+              hash ^= str[sizeof (uint16_t)] << 18;
+              hash += hash >> 11;
+              break;
+      case 2: hash += get16bits (str);
+              hash ^= hash << 11;
+              hash += hash >> 17;
+              break;
+      case 1: hash += *str;
+              hash ^= hash << 10;
+              hash += hash >> 1;
+   }
+
+   /* Force "avalanching" of final 127 bits */
+   hash ^= hash << 3;
+   hash += hash >> 5;
+   hash ^= hash << 4;
+   hash += hash >> 17;
+   hash ^= hash << 25;
+   hash += hash >> 6;
+
+   return hash % MAXHASH;
+}
+#endif /* USE_OLDHASH */
diff --git a/hashtab.h b/hashtab.h
new file mode 100644 (file)
index 0000000..df5d3cf
--- /dev/null
+++ b/hashtab.h
@@ -0,0 +1,107 @@
+#ifndef _HASHTAB_H
+#define _HASHTAB_H
+
+typedef struct hnode *HNODEPTR;            /* site node (host) pointer     */
+typedef struct unode *UNODEPTR;            /* url node pointer             */
+typedef struct rnode *RNODEPTR;            /* referrer node                */
+typedef struct anode *ANODEPTR;            /* user agent node pointer      */
+typedef struct snode *SNODEPTR;            /* Search string node pointer   */
+typedef struct inode *INODEPTR;            /* user (ident) node pointer    */
+#ifdef USE_DNS
+typedef struct dnode *DNODEPTR;            /* DNS hash table node struct   */
+#endif
+
+/* Object flags */
+#define OBJ_REG  0                         /* Regular object               */
+#define OBJ_HIDE 1                         /* Hidden object                */
+#define OBJ_GRP  2                         /* Grouped object               */
+
+#ifdef USE_DNS
+struct dnode {  char *string;              /* DNS node hash table struct   */
+              struct sockaddr_storage  addr;
+                 int addrlen;
+              struct dnode    *llist;
+              struct dnode    *next; };
+#endif
+
+struct hnode {  char *string;              /* host hash table structure    */
+                 int flag;
+           u_int64_t count;
+           u_int64_t files;
+           u_int64_t visit;                /* visit information            */
+           u_int64_t tstamp;
+                char *lasturl;
+              double xfer;
+              struct hnode *next; };
+
+struct unode {  char *string;              /* url hash table structure     */
+                 int flag;                 /* Object type (REG, HIDE, GRP) */
+           u_int64_t count;                /* requests counter             */
+           u_int64_t files;                /* files counter                */
+           u_int64_t entry;                /* entry page counter           */
+           u_int64_t exit;                 /* exit page counter            */
+              double xfer;                 /* xfer size in bytes           */
+              struct unode *next; };       /* pointer to next node         */
+
+struct rnode {  char *string;              /* referrer hash table struct   */
+                 int flag;
+           u_int64_t count;
+              struct rnode *next; };
+
+struct anode {  char *string;
+                 int flag;
+           u_int64_t count;
+              struct anode *next; };
+
+struct snode {  char *string;                 /* search string struct      */
+           u_int64_t count;
+              struct snode *next; };
+
+struct inode {  char *string;                 /* host hash table struct    */
+                 int flag;
+           u_int64_t count;
+           u_int64_t files;
+           u_int64_t visit;
+           u_int64_t tstamp;
+              double xfer;
+              struct inode *next; };
+
+extern HNODEPTR sm_htab[MAXHASH];             /* hash tables               */
+extern HNODEPTR sd_htab[MAXHASH];
+extern UNODEPTR um_htab[MAXHASH];             /* for hits, sites,          */
+extern RNODEPTR rm_htab[MAXHASH];             /* referrers and agents...   */
+extern ANODEPTR am_htab[MAXHASH];
+extern SNODEPTR sr_htab[MAXHASH];             /* search string table       */
+extern INODEPTR im_htab[MAXHASH];             /* ident table (username)    */
+#ifdef USE_DNS
+extern DNODEPTR host_table[MAXHASH];          /* DNS resolver table        */
+#endif
+
+extern int    put_hnode(char *, int, u_int64_t, u_int64_t, 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 *,
+                        u_int64_t, u_int64_t, UNODEPTR *);
+extern int    put_inode(char *, int, u_int64_t, u_int64_t, 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 *);
+extern int    put_snode(char *, u_int64_t, SNODEPTR *);
+
+#ifdef USE_DNS
+extern int    put_dnode(char *, void *, int, DNODEPTR *);
+extern void   del_dlist(DNODEPTR *);
+#endif
+
+extern void   del_htabs();                    /* delete hash tables        */
+extern void   del_hlist(HNODEPTR *);          /* delete host htab          */
+extern void   del_ulist(UNODEPTR *);          /* delete url htab           */
+extern void   del_rlist(RNODEPTR *);          /* delete referrer htab      */
+extern void   del_alist(ANODEPTR *);          /* delete host htab          */
+extern void   del_slist(SNODEPTR *);          /* delete host htab          */
+extern void   del_ilist(INODEPTR *);          /* delete host htab          */
+
+extern void      month_update_exit(u_int64_t);
+extern u_int64_t tot_visit(HNODEPTR *);
+extern char     *find_url(char *);
+
+#endif  /* _HASHTAB_H */
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..ebc6691
--- /dev/null
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/lang.h b/lang.h
new file mode 100644 (file)
index 0000000..88a3ecc
--- /dev/null
+++ b/lang.h
@@ -0,0 +1,182 @@
+#ifndef _LANG_H
+#define _LANG_H
+
+extern char *language    ;
+extern char *langcode    ;
+
+extern char *msg_records ;
+extern char *msg_addresses;
+extern char *msg_ignored ;
+extern char *msg_bad     ;
+extern char *msg_in      ;
+extern char *msg_seconds ;
+
+extern char *msg_log_err ;
+extern char *msg_log_use ;
+extern char *msg_dir_err ;
+extern char *msg_dir_use ;
+extern char *msg_cur_dir ;
+extern char *msg_hostname;
+extern char *msg_ign_hist;
+extern char *msg_no_hist ;
+extern char *msg_get_hist;
+extern char *msg_put_hist;
+extern char *msg_hist_err;
+extern char *msg_bad_hist;
+extern char *msg_bad_conf;
+extern char *msg_bad_key ;
+extern char *msg_bad_date;
+extern char *msg_ign_nscp;
+extern char *msg_bad_rec ;
+extern char *msg_no_vrec ;
+extern char *msg_gen_rpt ;
+extern char *msg_gen_sum ;
+extern char *msg_get_data;
+extern char *msg_put_data;
+extern char *msg_no_data ;
+extern char *msg_bad_data;
+extern char *msg_data_err;
+extern char *msg_dup_data;
+
+extern char *msg_dns_nocf;
+extern char *msg_dns_nodb;
+extern char *msg_dns_nolk;
+extern char *msg_dns_usec;
+extern char *msg_dns_rslf;
+extern char *msg_dns_none;
+extern char *msg_dns_abrt;
+
+extern char *msg_geo_open;
+extern char *msg_geo_use ;
+extern char *msg_geo_nolu;
+extern char *msg_geo_dflt;
+
+extern char *msg_nomem_ts;
+extern char *msg_nomem_tr;
+extern char *msg_nomem_tu;
+extern char *msg_nomem_tc;
+extern char *msg_nomem_ta;
+extern char *msg_nomem_tsr;
+extern char *msg_nomem_ti;
+extern char *msg_nomem_dh;
+extern char *msg_nomem_mh;
+extern char *msg_nomem_u ;
+extern char *msg_nomem_a ;
+extern char *msg_nomem_r ;
+extern char *msg_nomem_sc;
+extern char *msg_nomem_i ;
+
+extern char *msg_big_rec ;
+extern char *msg_big_host;
+extern char *msg_big_date;
+extern char *msg_big_req ;
+extern char *msg_big_ref ;
+extern char *msg_big_user;
+extern char *msg_big_one ;
+
+extern char *msg_no_open ;
+
+extern char *h_usage1    ;
+extern char *h_usage2    ;
+extern char *h_msg[];
+
+/* HTML Strings */
+
+extern char *msg_hhdr_sp ;
+extern char *msg_hhdr_gt ;
+
+extern char *msg_main_us ;
+extern char *msg_main_per;
+extern char *msg_main_sum;
+extern char *msg_main_da ;
+extern char *msg_main_mt ;
+
+extern char *msg_hmth_du ;
+extern char *msg_hmth_hu ;
+
+extern char *msg_h_by    ;
+extern char *msg_h_avg   ;
+extern char *msg_h_max   ;
+extern char *msg_h_total ;
+extern char *msg_h_totals;
+extern char *msg_h_day   ;
+extern char *msg_h_mth   ;
+extern char *msg_h_hour  ;
+extern char *msg_h_hits  ;
+extern char *msg_h_pages ;
+extern char *msg_h_visits;
+extern char *msg_h_files ;
+extern char *msg_h_sites ;
+extern char *msg_h_xfer  ;
+extern char *msg_h_hname ;
+extern char *msg_h_url   ;
+extern char *msg_h_agent ;
+extern char *msg_h_ref   ;
+extern char *msg_h_ctry  ;
+extern char *msg_h_search;
+extern char *msg_h_uname ;
+
+extern char *msg_hlnk_ds ;
+extern char *msg_hlnk_hs ;
+extern char *msg_hlnk_u  ;
+extern char *msg_hlnk_s  ;
+extern char *msg_hlnk_a  ;
+extern char *msg_hlnk_c  ;
+extern char *msg_hlnk_r  ;
+extern char *msg_hlnk_en ;
+extern char *msg_hlnk_ex ;
+extern char *msg_hlnk_sr ;
+extern char *msg_hlnk_i  ;
+
+extern char *msg_mtot_ms ;
+extern char *msg_mtot_th ;
+extern char *msg_mtot_tf ;
+extern char *msg_mtot_tx ;
+extern char *msg_mtot_us ;
+extern char *msg_mtot_ur ;
+extern char *msg_mtot_ua ;
+extern char *msg_mtot_uu ;
+extern char *msg_mtot_ui ;
+extern char *msg_mtot_mhd;
+extern char *msg_mtot_mhh;
+extern char *msg_mtot_mfd;
+extern char *msg_mtot_mpd;
+extern char *msg_mtot_msd;
+extern char *msg_mtot_mvd;
+extern char *msg_mtot_mkd;
+extern char *msg_mtot_rc ;
+
+extern char *msg_dtot_ds ;
+
+extern char *msg_htot_hs ;
+
+extern char *msg_ctry_use;
+
+extern char *msg_top_top ;
+extern char *msg_top_of  ;
+extern char *msg_top_s   ;
+extern char *msg_top_u   ;
+extern char *msg_top_r   ;
+extern char *msg_top_a   ;
+extern char *msg_top_c   ;
+extern char *msg_top_en  ;
+extern char *msg_top_ex  ;
+extern char *msg_top_sr  ;
+extern char *msg_top_i   ;
+extern char *msg_v_sites ;
+extern char *msg_v_urls  ;
+extern char *msg_v_refs  ;
+extern char *msg_v_agents;
+extern char *msg_v_search;
+extern char *msg_v_users ;
+
+extern char *msg_title   ;
+extern char *msg_h_other ;
+
+extern char *s_month[12];
+extern char *l_month[12];
+
+extern struct response_code response[];
+extern struct country_code ctry[];
+
+#endif  /* _LANG_H */
diff --git a/lang/webalizer_lang.albanian b/lang/webalizer_lang.albanian
new file mode 100644 (file)
index 0000000..76ce297
--- /dev/null
@@ -0,0 +1,616 @@
+/*
+   webalizer_lang.albanian
+
+   Kartelë Mbulimi Gjuhësor për Shqipen për Webalizer V2.0x.
+   06-Mar-2006 nga Besnik Bleta besnik@programeshqip.org)
+   12-May-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+/* char *language  = "Shqip"; */
+char *language  = "Albanian";
+char *langcode  = "sq";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "regjistrime";
+char *msg_addresses="vendndodhje";
+char *msg_ignored = "shpërfillur";
+char *msg_bad     = "i dëmtuar";
+char *msg_in      = "në";
+char *msg_seconds = "sekonda";
+
+/* mesazhi gabimi gjatë rregullimit dhe ecurisë */
+char *msg_log_err = "Gabim: S'hap dot kartelë regjistrimesh";
+char *msg_log_use = "Po përdor kartelë regjistrimesh";
+char *msg_dir_err = "Gabim: S'ndryshoj dot drejtorinë në";
+char *msg_dir_use = "Po krijoj përfundimet në";
+char *msg_cur_dir = "drejtorinë e çastit";
+char *msg_hostname= "Strehëemri për raportime është";
+char *msg_ign_hist= "Po shpërfill historikun e mëparshëm...";
+char *msg_no_hist = "Nuk u gjet kartelë historiku...";
+char *msg_get_hist= "Po lexoj kartelë historiku...";
+char *msg_put_hist= "Po ruaj të dhëna historiku...";
+char *msg_hist_err= "Gabim: I pazoti të shkruaj kartelë historiku";
+char *msg_bad_hist= "Gabim: Po shpërfill regjistrime të pavlefshëm historiku";
+char *msg_bad_conf= "Gabim: I pazoti të hap kartelë formësimi";
+char *msg_bad_key = "Kujdes: Fjalëkyç i pavlefshëm";
+char *msg_bad_date= "Gabim: Po anashkaloj regjistrime (datë e gabuar)";
+char *msg_ign_nscp= "Po anashkaloj regjistrim titujsh Netscape";
+char *msg_bad_rec = "Po anashkaloj regjistrim të dëmtuar";
+char *msg_no_vrec = "Nuk u gjetën regjistrime të vlefshëm!";
+char *msg_gen_rpt = "Po prodhoj raport për";
+char *msg_gen_sum = "Po prodhoj raport përmbledhës";
+char *msg_get_data= "Po lexoj të dhëna të mëparshme xhirimi..";
+char *msg_put_data= "Po ruaj të dhëna të tanishme xhirimi...";
+char *msg_no_data = "nuk u gjetën të dhëna të mëparshme xhirimi...";
+char *msg_bad_data= "Gabim: I pazoti të rikthej të dhëna xhirimi";
+char *msg_data_err= "Gabim: I pazoti të ruaj të dhëna të tanishme xhirimi";
+char *msg_dup_data= "Kujdes: Ka gjasa të jenë gjendur të dhëna të përsëritura";
+
+/* Gjëra DNS */
+char *msg_dns_nocf= "Nuk u tregua kartelë fshehtine, po e ndërpres...";
+char *msg_dns_nodb= "Error: I pazoti të hap kartelë fshehtine DNS";
+char *msg_dns_nolk= "Error: I pazoti të kyç kartelë fshehtine DNS";
+char *msg_dns_usec= "Po përdor kartelë fshehtine DNS";
+char *msg_dns_rslv= "Kërkim DNS";
+char *msg_dns_none= "Asnjë për t'u përpunuar";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* gabime sigurimi kujtese */
+char *msg_nomem_ts= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua \"Site\"-e Kryesues!";
+char *msg_nomem_tr= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Përmendësa Kryesues!";
+char *msg_nomem_tu= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua URL-ra Kryesuese!";
+char *msg_nomem_tc= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Vende Kryesues!";
+char *msg_nomem_ta= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Agjentë Kryesues Përdoruesi!";
+char *msg_nomem_tsr="Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Vargje Kryesuese Kërkimi!";
+char *msg_nomem_ti= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Emra Kryesues Përdoruesi!";
+char *msg_nomem_dh= "Gabim gjatë shtimit të nyjes për strehë (përditë), po e anashkaloj";
+char *msg_nomem_mh= "Gabim gjatë shtimit të nyjes për strehë (çdo muaj), po e anashkaloj";
+char *msg_nomem_u = "Gabim gjatë shtimit të nyjes për URL, po e anashkaloj";
+char *msg_nomem_a = "Gabim gjatë shtimit të nyjes për Agjent Përdoruesi, po e anashkaloj";
+char *msg_nomem_r = "Gabim gjatë shtimit të nyjes për Përmendës, po e anashkaloj";
+char *msg_nomem_sc= "Gabim gjatë shtimit të nyjes për Varg Kërkimi, po e anashkaloj";
+char *msg_nomem_i = "Gabim gjatë shtimit të nyjes për Emër përdoruesi, po e anashkaloj";
+
+/* gabime zërash regjistrimi */
+char *msg_big_rec = "Gabim: Po anashkolaj regjistrim më të madh se ç'duhet";
+char *msg_big_host= "Kujdes: Po cungoj emër strehe më të madh se ç'duhet";
+char *msg_big_date= "Kujdes: Po cungoj kuti date më të madhe se ç'duhet";
+char *msg_big_req = "Kujdes: Po cungoj kuti kërkese më të madhe se ç'duhet";
+char *msg_big_ref = "Kujdes: Po cungoj kuti përmendësi më të madhe se ç'duhet";
+char *msg_big_user= "Kujdes: Po cungoj emër përdoruesi më të madh se ç'duhet";
+char *msg_big_one = "Kujdes: Vargu tejkalon masën e lejuar";
+
+/* gabime të ndryshëm */
+char *msg_no_open = "Gabim: I pazoti të hap kartelën";
+
+/* Shfaqje e ndihmës... */
+char *h_usage1 = "Përdorimi";
+char *h_usage2 = "[mundësi] [kartelë regjistrimi]";
+char *h_msg[]= {
+         "-h        = shtyp këtë mesazh ndihme"            ,
+         "-V        = shtyp të dhëna versioni"             ,
+         "-v        = be verbose"                          ,
+         "-d        = shtyp të dhëna shtesë diagnostikimi" ,
+         "-F type   = Tip regjistrimi.  tipi= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = shpërfill kartelë historiku"         ,
+         "-p        = ruaj gjendje (shtues)"               ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = pa mesazhe informues"                ,
+         "-Q        = pa _ASNJË_ mesazh"                   ,
+         "-Y        = pa graf vendesh"                     ,
+         "-G        = pa graf të përorshëm"                ,
+         "-H        = pa statistika të përorshme"          ,
+         "-L        = pa legjenda me ngjyra për grafin"    ,
+         "-l num    = përdor në graf rreshta sfondi numrash",
+         "-m num    = Vlerë skadimi vizite (sekonda)"      ,
+         "-T        = print timing information"            ,
+         "-c file   = përdor kartelën e formësimit 'kartelë'",
+         "-n name   = emër strehe për t'u përdorur"        ,
+         "-o dir    = drejtori për t'u përdorur për përfundime",
+         "-t name   = titull raporti 'emër'"               ,
+         "-a name   = fshih agjentin e përdoruesi 'emër'"  ,
+         "-r name   = fshih përmendësin 'emër'"            ,
+         "-s name   = fshih \"site\"-in 'emër'"            ,
+         "-u name   = fshih URL-në 'emër'"                 ,
+         "-x name   = Përdor zgjerim emër kartelash 'emër'",
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Zgjerim tipi faqesh 'emër'"          ,
+         "-I name   = Alias treguesi 'emër'"               ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Shfaq num agjentësh kryesues"        ,
+         "-C num    = Shfaq num vendesh kryesuese"         ,
+         "-R num    = Shfaq num përmendësish kryesues"     ,
+         "-S num    = Shfaq num \"site\"-esh kryesues"     ,
+         "-U num    = Shfaq num URL-sh kryesuese"          ,
+         "-e num    = Shfaq num Faqesh Fillimi kryesuese"  ,
+         "-E num    = Shfaq num Faqesh Daljeje kryesues"   ,
+         "-g num    = Grupo Përkatësitë në 'num' nivele"   ,
+         "-X        = Fshih \"site\"-e individualë"        ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Përdor kartelë fshehtine DNS 'emër'" ,
+         "-N num    = Numër procesesh DNS (0=çaktivizoje)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoIP database 'emër'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'emër'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* Vargje HTML                                                         */
+/*                                                                     */
+/* Këta vargje përdoren si pjesë e përfundimit HTML të prodhuar nga    */
+/* Webalizer-i.                                                        */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Periudhë Përmbledhëse";
+char *msg_hhdr_gt = "Prodhuar";
+
+/* main index strings */
+char *msg_main_us = "Përmbledhje përdorimi për";
+/* char *msg_main_per= "12 Muajt e Fundit"; */
+char *msg_main_per= "Përmbledhje sipas Muajsh";
+char *msg_main_sum= "Përmbledhje sipas Muajsh";
+char *msg_main_da = "Mes. Ditore";
+char *msg_main_mt = "Tërësi Përmujore";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Përdorim ditor për";
+char *msg_hmth_hu = "Përdorim i përorshëm për";
+
+/* vargje titujsh tabelash */
+char *msg_h_by    = "Nga";
+char *msg_h_avg   = "Mes";
+char *msg_h_max   = "Maks";
+char *msg_h_total = "Gjithsej";
+char *msg_h_totals= "Tërësi";
+char *msg_h_day   = "Ditë";
+char *msg_h_mth   = "Muaj";
+char *msg_h_hour  = "Orë";
+char *msg_h_hits  = "Hapje";
+char *msg_h_pages = "Faqe";
+char *msg_h_visits= "Vizita";
+char *msg_h_files = "Kartela";
+char *msg_h_sites = "\"Site\"-e";
+char *msg_h_xfer  = "KBajt";
+char *msg_h_hname = "Emërstrehë";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Agjent Përdoruesi";
+char *msg_h_ref   = "Përmendës";
+char *msg_h_ctry  = "Vend";
+char *msg_h_search= "Varg Kërkimesh";
+char *msg_h_uname = "Emër Përdoruesi";
+
+/* lidhje përgjatë kryesh faqeje */
+char *msg_hlnk_ds = "Statistika Ditore";
+char *msg_hlnk_hs = "Statistika çdo Orë";
+char *msg_hlnk_u  = "URL-ra";
+char *msg_hlnk_s  = "\"Site\"-e";
+char *msg_hlnk_a  = "Agjentë";
+char *msg_hlnk_c  = "Vende";
+char *msg_hlnk_r  = "Përmendësa";
+char *msg_hlnk_en = "Hyrje";
+char *msg_hlnk_ex = "Dalje";
+char *msg_hlnk_sr = "Kërkim";
+char *msg_hlnk_i  = "Përdoruesa";
+
+/* tabelë tërësie mujore */
+char *msg_mtot_ms = "Statistika Mujore për";
+char *msg_mtot_th = "Hapje Gjithsej";
+char *msg_mtot_tf = "Kartela Gjithsej";
+char *msg_mtot_tx = "KBajt Gjithsej";
+char *msg_mtot_us = "\"Site\"-e Unikë Gjithsej";
+char *msg_mtot_ur = "Përmendësa Unikë Gjithsej";
+char *msg_mtot_ua = "Agjentë Unikë Përdoruesi Gjithsej";
+char *msg_mtot_uu = "URL Unike Gjithsej";
+char *msg_mtot_ui = "Emra Unikë përdoruesish Gjithsej";
+char *msg_mtot_mhd= "Hapje në Ditë";
+char *msg_mtot_mhh= "Hapje në Orë";
+char *msg_mtot_mfd= "Kartela në Ditë";
+char *msg_mtot_mpd= "Faqe në Ditë";
+char *msg_mtot_msd= "\"Site\"-e në Ditë";
+char *msg_mtot_mvd= "Vizita në Ditë";
+char *msg_mtot_mkd= "KBajt në Ditë";
+char *msg_mtot_rc = "Hapje sipas Kodi Përgjigjesh";
+
+/* tabelë tërësie ditore */
+char *msg_dtot_ds = "Statistika Ditore për";
+
+/* tabelë tërësie sipas orësh */
+char *msg_htot_hs = "Statistika të Përorshme për";
+
+/* grafik sipas vendesh */
+char *msg_ctry_use= "Përdorim sipas Vendesh për";
+
+/* tabela kryesimesh */
+/* Formatuar si "xxx kryesues e xxx Tërësisë së diçkaje" */
+char *msg_top_top = "Kryesues";
+char *msg_top_of  = "për";
+char *msg_top_s   = "\"Site\"-e Gjithsej";
+char *msg_top_u   = "URL-ra Gjithsej";
+char *msg_top_r   = "Përmendësa Gjithsej";
+char *msg_top_a   = "Agjentë Përdoruesish Gjithsej";
+char *msg_top_c   = "Vende Gjithsej";
+char *msg_top_en  = "Faqe Hyrjesh Gjithsej";
+char *msg_top_ex  = "Faqe Daljesh Gjithsej";
+char *msg_top_sr  = "Vargje Kërkimesh Gjithsej";
+char *msg_top_i   = "Emra përdoruesish Gjithsej";
+char *msg_v_sites = "Shihni Tërë \"Site\"-et";
+char *msg_v_urls  = "Shihni Tërë URL-tës";
+char *msg_v_refs  = "Shihni Tërë Përmendësit";
+char *msg_v_agents= "Shihni Tërë Agjentët e Përdoruesve";
+char *msg_v_search= "Shihni Tërë Vargjet e Kërkimeve";
+char *msg_v_users = "Shihni Tërë Emrat e përdoruesve";
+
+/* emrat e shkurtër për muajt DUHET TË JENË 3 SHENJA si madhësi... pad if needed*/
+char *s_month[12]={ "Jan", "Shk", "Mar",
+                    "Pri", "Maj", "Qer",
+                    "Kor", "Gus", "Sht",
+                    "Tet", "Nën", "Dhj"};
+
+/* emra të gjatë muajsh - gjatësi çfarëdo */
+char *l_month[12]={ "Janar",  "Shkurt", "Mars",   "Prill",
+                    "Maj",      "Qershor",     "Korrik",    "Gusht",
+                    "Shtator","Tetor",  "Nëntor","Dhjetor"};
+
+/* përshkrim kode përgjigjesh... renditja ËSHTË e rëndësishme!      */
+struct response_code response[] =
+       { { "Kod përgjigjeje të papërcaktuar",                      0 },
+         { "Kod 100 - Vazhdo",                                     0 },
+         { "Kod 101 - Po këmbehen Protokolle",                     0 },
+         { "Kod 200 - OK",                                         0 },
+         { "Kod 201 - Krijuar",                                    0 },
+         { "Kod 202 - Pranuar",                                    0 },
+         { "Kod 203 - Informacion Jo Autoritativ",                 0 },
+         { "Kod 204 - Pa Përmbajtje",                              0 },
+         { "Kod 205 - Rimerr Përmbajtje",                          0 },
+         { "Kod 206 - Përmbajtje e Pjesshme",                      0 },
+         { "Kod 300 - Zgjedhje të Shumëfishta",                    0 },
+         { "Kod 301 - Ikur Përgjithmonë",                          0 },
+         { "Kod 302 - U gjet",                                     0 },
+         { "Kod 303 - Shih Tjetër",                                0 },
+         { "Kod 304 - Pa Ndryshim",                                0 },
+         { "Kod 305 - Përdor Proxy",                               0 },
+         { "Kod 307 - Ikur Përkohësisht",                          0 },
+         { "Kod 400 - Kërkesë e Fabuar",                           0 },
+         { "Kod 401 - I paautorizuar",                             0 },
+         { "Kod 402 - Lipset Pagesë",                              0 },
+         { "Kod 403 - E ndaluar",                                  0 },
+         { "Kod 404 - Nuk Gjendet",                                0 },
+         { "Kod 405 - Metodë e Palejuar",                          0 },
+         { "Kod 406 - E papranueshme",                             0 },
+         { "Kod 407 - Lipset Mirëfilltësim Proxy",                 0 },
+         { "Kod 408 - Skadim Kohe Kërkese",                        0 },
+         { "Kod 409 - Përplasje",                                  0 },
+         { "Kod 410 - Ikur",                                       0 },
+         { "Kod 411 - Gjatësi e Nevojshme",                        0 },
+         { "Kod 412 - Prakushti Dështoi",                          0 },
+         { "Kod 413 - Entitet Kërkese Shumë i Gjerë",              0 },
+         { "Kod 414 - URI Kërkese Shumë I gjatë",                  0 },
+         { "Kod 415 - Tip I pambuluar Media",                      0 },
+         { "Kod 416 - U kërkua interval që s'mund të kënaqet",     0 },
+         { "Kod 417 - Shpresa Nuk u Pwrmbush",                     0 },
+         { "Kod 500 - Gabim i Brendshëm Shërbyesi",                0 },
+         { "Kod 501 - I pa vënë ende në jetë",                     0 },
+         { "Kod 502 - \"Gateway\" i Gabuar",                       0 },
+         { "Kod 503 - Shërbim jo i mundshëm",                      0 },
+         { "Kod 504 - Skadim Kohe \"Gateway\"-i",                  0 },
+         { "Kod 505 - Version HTTP i Pambuluar",                   0 } };
+
+char *msg_title   = "Statistika Përdorimi për";
+char *msg_h_other = "Tjetër";
+
+/* Kode Vendesh (dikur te ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "I paftilluar/I panjohur",                   0,0,0 },
+{ IDX_3C('c','o','m'),    "Tregtar (com)",                             0,0,0 },
+{ IDX_3C('e','d','u'),    "Edukativ (edu)",                            0,0,0 },
+{ IDX_3C('g','o','v'),    "US, Qeveritar (gov)",                       0,0,0 },
+{ IDX_3C('i','n','t'),    "Ndërkombëtar (int)",                        0,0,0 },
+{ IDX_3C('m','i','l'),    "US, Ushtarak (mil)",                        0,0,0 },
+{ IDX_3C('n','e','t'),    "Rrjet (net)",                               0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizëm Jofitimprurës (org)",             0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",                    0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",                   0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",                        0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",                   0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",             0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",             0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",            0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",                        0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",                    0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",                 0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                         0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet stil i vjetër (arpa)",              0,0,0 },
+{ IDX_4C('n','a','t','o'),"Fushë Nato (nato)",                         0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",                 0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",             0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                          0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                                   0,0,0 },
+{ IDX_2C('a','e'),        "Emiratet e Bashkuar Arabë",                 0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                                0,0,0 },
+{ IDX_2C('a','g'),        "Antigua dhe Barbuda",                       0,0,0 },
+{ IDX_2C('a','i'),        "Anguila",                                   0,0,0 },
+{ IDX_2C('a','l'),        "Shqipëri",                                  0,0,0 },
+{ IDX_2C('a','m'),        "Armeni",                                    0,0,0 },
+{ IDX_2C('a','n'),        "Antilet Holandeze",                         0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                                    0,0,0 },
+{ IDX_2C('a','q'),        "Antarktidë",                                0,0,0 },
+{ IDX_2C('a','r'),        "Argjentinë",                                0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Amerikane",                           0,0,0 },
+{ IDX_2C('a','t'),        "Austri",                                    0,0,0 },
+{ IDX_2C('a','u'),        "Australi",                                  0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                                     0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                             0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaixhan",                               0,0,0 },
+{ IDX_2C('b','a'),        "Bosnjë dhe Hercegovinë",                    0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                                  0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                                0,0,0 },
+{ IDX_2C('b','e'),        "Belgjikë",                                  0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                              0,0,0 },
+{ IDX_2C('b','g'),        "Bullgari",                                  0,0,0 },
+{ IDX_2C('b','h'),        "Bahrein",                                   0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                                   0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                                     0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                          0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                                   0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                         0,0,0 },
+{ IDX_2C('b','o'),        "Bolivi",                                    0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                                    0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                                   0,0,0 },
+{ IDX_2C('b','t'),        "Butan",                                     0,0,0 },
+{ IDX_2C('b','v'),        "Ishulli Buve",                              0,0,0 },
+{ IDX_2C('b','w'),        "Botsvanë",                                  0,0,0 },
+{ IDX_2C('b','y'),        "Bjellorusi",                                0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                                    0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                                    0,0,0 },
+{ IDX_2C('c','c'),        "Ishujt Kokos (Keeling)",                    0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",                0,0,0 },
+{ IDX_2C('c','f'),        "Republika e Afrikës Qendrore",              0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                                     0,0,0 },
+{ IDX_2C('c','h'),        "Zvicër",                                    0,0,0 },
+{ IDX_2C('c','i'),        "Bregu i Fildishtë",                         0,0,0 },
+{ IDX_2C('c','k'),        "Ishujt Kuk",                                0,0,0 },
+{ IDX_2C('c','l'),        "Kili",                                      0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                                   0,0,0 },
+{ IDX_2C('c','n'),        "Kinë",                                      0,0,0 },
+{ IDX_2C('c','o'),        "Kolombi",                                   0,0,0 },
+{ IDX_2C('c','r'),        "Kosta Rika",                                0,0,0 },
+{ IDX_2C('c','u'),        "Kubë",                                      0,0,0 },
+{ IDX_2C('c','v'),        "Kepi i Gjelbër",                            0,0,0 },
+{ IDX_2C('c','x'),        "Ishulli i Krishtlindjes",                   0,0,0 },
+{ IDX_2C('c','y'),        "Qipro",                                     0,0,0 },
+{ IDX_2C('c','z'),        "Republika Çeke",                            0,0,0 },
+{ IDX_2C('d','e'),        "Gjermani",                                  0,0,0 },
+{ IDX_2C('d','j'),        "Xhibuti",                                   0,0,0 },
+{ IDX_2C('d','k'),        "Danimarkë",                                 0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                                  0,0,0 },
+{ IDX_2C('d','o'),        "Republika Dominikane",                      0,0,0 },
+{ IDX_2C('d','z'),        "Algjeri",                                   0,0,0 },
+{ IDX_2C('e','c'),        "Ekuador",                                   0,0,0 },
+{ IDX_2C('e','e'),        "Estoni",                                    0,0,0 },
+{ IDX_2C('e','g'),        "Egjipt",                                    0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Perëndimore",                        0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                                   0,0,0 },
+{ IDX_2C('e','s'),        "Spanjë",                                    0,0,0 },
+{ IDX_2C('e','t'),        "Etiopi",                                    0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                            0,0,0 },
+{ IDX_2C('f','i'),        "Finlandë",                                  0,0,0 },
+{ IDX_2C('f','j'),        "Fixhi",                                     0,0,0 },
+{ IDX_2C('f','k'),        "Ishujt Folkland (Malvinas)",                0,0,0 },
+{ IDX_2C('f','m'),        "Mikronezi",                                 0,0,0 },
+{ IDX_2C('f','o'),        "Ishujt Faroe",                              0,0,0 },
+{ IDX_2C('f','r'),        "Francë",                                    0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                                     0,0,0 },
+{ IDX_2C('g','b'),        "Britani e Madhe (UK)",                      0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                                   0,0,0 },
+{ IDX_2C('g','e'),        "Gjeorgji",                                  0,0,0 },
+{ IDX_2C('g','f'),        "Guajana Franceze",                          0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                                  0,0,0 },
+{ IDX_2C('g','h'),        "Gana",                                      0,0,0 },
+{ IDX_2C('g','i'),        "Gjibraltar",                                0,0,0 },
+{ IDX_2C('g','l'),        "Groenlanda",                                0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                                    0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                                    0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupi",                                 0,0,0 },
+{ IDX_2C('g','q'),        "Guinea Ekuatoriale",                        0,0,0 },
+{ IDX_2C('g','r'),        "Greqi",                                     0,0,0 },
+{ IDX_2C('g','s'),        "Ishujt S. Jorgjia dhe S. Sandwich",         0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                                 0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                                      0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bisau",                              0,0,0 },
+{ IDX_2C('g','y'),        "Gujanë",                                    0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                                 0,0,0 },
+{ IDX_2C('h','m'),        "Ishujt Heard dhe McDonald",                 0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                                  0,0,0 },
+{ IDX_2C('h','r'),        "Kroaci",                                    0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                                     0,0,0 },
+{ IDX_2C('h','u'),        "Hungari",                                   0,0,0 },
+{ IDX_2C('i','d'),        "Indonezi",                                  0,0,0 },
+{ IDX_2C('i','e'),        "Irlandë",                                   0,0,0 },
+{ IDX_2C('i','l'),        "Izrael",                                    0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                               0,0,0 },
+{ IDX_2C('i','n'),        "Indi",                                      0,0,0 },
+{ IDX_2C('i','o'),        "Territoret Britanike të Oqeanit Indian",    0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                                      0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                                      0,0,0 },
+{ IDX_2C('i','s'),        "Islandë",                                   0,0,0 },
+{ IDX_2C('i','t'),        "Itali",                                     0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                                    0,0,0 },
+{ IDX_2C('j','m'),        "Xhamaika",                                  0,0,0 },
+{ IDX_2C('j','o'),        "Jordani",                                   0,0,0 },
+{ IDX_2C('j','p'),        "Japoni",                                    0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                                     0,0,0 },
+{ IDX_2C('k','g'),        "Kirgizstan",                                0,0,0 },
+{ IDX_2C('k','h'),        "Kamboxhia",                                 0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                                  0,0,0 },
+{ IDX_2C('k','m'),        "Komoros",                                   0,0,0 },
+{ IDX_2C('k','n'),        "Shën Kits dhe Nevis",                       0,0,0 },
+{ IDX_2C('k','p'),        "Korea (e Veriut)",                          0,0,0 },
+{ IDX_2C('k','r'),        "Korea (e Jugut)",                           0,0,0 },
+{ IDX_2C('k','w'),        "Kuvajt",                                    0,0,0 },
+{ IDX_2C('k','y'),        "Ishujt Kajman",                             0,0,0 },
+{ IDX_2C('k','z'),        "Kazakistan",                                0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                                      0,0,0 },
+{ IDX_2C('l','b'),        "Liban",                                     0,0,0 },
+{ IDX_2C('l','c'),        "Shën Luçia",                                0,0,0 },
+{ IDX_2C('l','i'),        "Lihtenshtejn",                              0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                                 0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                                   0,0,0 },
+{ IDX_2C('l','s'),        "Lesoto",                                    0,0,0 },
+{ IDX_2C('l','t'),        "Lituani",                                   0,0,0 },
+{ IDX_2C('l','u'),        "Luksemburg",                                0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                                    0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                                     0,0,0 },
+{ IDX_2C('m','a'),        "Marok",                                     0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                                    0,0,0 },
+{ IDX_2C('m','d'),        "Moldavi",                                   0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                                0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",                0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                                0,0,0 },
+{ IDX_2C('m','h'),        "Ishujt Marshall",                           0,0,0 },
+{ IDX_2C('m','k'),        "Maqedoni",                                  0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                                      0,0,0 },
+{ IDX_2C('m','m'),        "Mianmar",                                   0,0,0 },
+{ IDX_2C('m','n'),        "Mongoli",                                   0,0,0 },
+{ IDX_2C('m','o'),        "Makao",                                     0,0,0 },
+{ IDX_2C('m','p'),        "Ishujt e Marianës Veriore",                 0,0,0 },
+{ IDX_2C('m','q'),        "Martinikë",                                 0,0,0 },
+{ IDX_2C('m','r'),        "Mauritani",                                 0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                                0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                                     0,0,0 },
+{ IDX_2C('m','u'),        "Mauricius",                                 0,0,0 },
+{ IDX_2C('m','v'),        "Maldive",                                   0,0,0 },
+{ IDX_2C('m','w'),        "Malaui",                                    0,0,0 },
+{ IDX_2C('m','x'),        "Meksikë",                                   0,0,0 },
+{ IDX_2C('m','y'),        "Malajzia",                                  0,0,0 },
+{ IDX_2C('m','z'),        "Mozambik",                                  0,0,0 },
+{ IDX_2C('n','a'),        "Namibi",                                    0,0,0 },
+{ IDX_2C('n','c'),        "Kaledonia e Re",                            0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                                     0,0,0 },
+{ IDX_2C('n','f'),        "Ishulli Norfolk",                           0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                                   0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                                 0,0,0 },
+{ IDX_2C('n','l'),        "Holandë",                                   0,0,0 },
+{ IDX_2C('n','o'),        "Norvegji",                                  0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                                     0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                                     0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                                      0,0,0 },
+{ IDX_2C('n','z'),        "Zelandë e Re",                              0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                                      0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                                    0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                                      0,0,0 },
+{ IDX_2C('p','f'),        "Polinezia Franceze",                        0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                          0,0,0 },
+{ IDX_2C('p','h'),        "Filipine",                                  0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                                  0,0,0 },
+{ IDX_2C('p','l'),        "Poloni",                                    0,0,0 },
+{ IDX_2C('p','m'),        "St. Pier dhe Mikelon",                      0,0,0 },
+{ IDX_2C('p','n'),        "Pitkern",                                   0,0,0 },
+{ IDX_2C('p','r'),        "Porto Riko",                                0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",           0,0,0 },
+{ IDX_2C('p','t'),        "Portugali",                                 0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                                     0,0,0 },
+{ IDX_2C('p','y'),        "Paraguaj",                                  0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                                     0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                                   0,0,0 },
+{ IDX_2C('r','o'),        "Rumani",                                    0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                                    0,0,0 },
+{ IDX_2C('r','u'),        "Federata Ruse",                             0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                                    0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudite",                            0,0,0 },
+{ IDX_2C('s','b'),        "Ishujt Solomon",                            0,0,0 },
+{ IDX_2C('s','c'),        "Sejshelle",                                 0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                                     0,0,0 },
+{ IDX_2C('s','e'),        "Suedi",                                     0,0,0 },
+{ IDX_2C('s','g'),        "Singapor",                                  0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                                0,0,0 },
+{ IDX_2C('s','i'),        "Sloveni",                                   0,0,0 },
+{ IDX_2C('s','j'),        "Ishujt Svalbard dhe Jan Mayen",             0,0,0 },
+{ IDX_2C('s','k'),        "Republika Slovake",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                              0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                                0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                                   0,0,0 },
+{ IDX_2C('s','o'),        "Somali",                                    0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                                   0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome dhe Principe",                     0,0,0 },
+{ IDX_2C('s','u'),        "USSR (të dikurshëm)",                       0,0,0 },
+{ IDX_2C('s','v'),        "Salvador",                                  0,0,0 },
+{ IDX_2C('s','y'),        "Siri",                                      0,0,0 },
+{ IDX_2C('s','z'),        "Svaziland",                                 0,0,0 },
+{ IDX_2C('t','c'),        "Ishujt Turq dhe Kaiko",                     0,0,0 },
+{ IDX_2C('t','d'),        "Çad",                                       0,0,0 },
+{ IDX_2C('t','f'),        "Territoret Franceze Jugore",                0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                                      0,0,0 },
+{ IDX_2C('t','h'),        "Tailandë",                                  0,0,0 },
+{ IDX_2C('t','j'),        "Taxhikistan",                               0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                                   0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                               0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                              0,0,0 },
+{ IDX_2C('t','n'),        "Tunizi",                                    0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                                     0,0,0 },
+{ IDX_2C('t','p'),        "Timori Lindor",                             0,0,0 },
+{ IDX_2C('t','r'),        "Turqi",                                     0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad dhe Tobago",                       0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                                    0,0,0 },
+{ IDX_2C('t','w'),        "Taivan",                                    0,0,0 },
+{ IDX_2C('t','z'),        "Tanzani",                                   0,0,0 },
+{ IDX_2C('u','a'),        "Ukrainë",                                   0,0,0 },
+{ IDX_2C('u','g'),        "Ugandë",                                    0,0,0 },
+{ IDX_2C('u','k'),        "Mbretëri e Bashkuar",                       0,0,0 },
+{ IDX_2C('u','m'),        "Ishujt e Vegjël jashtë US",                 0,0,0 },
+{ IDX_2C('u','s'),        "Shtetet e Bashkuar",                        0,0,0 },
+{ IDX_2C('u','y'),        "Uruguaj",                                   0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan"         ,                       0,0,0 },
+{ IDX_2C('v','a'),        "Qytet Shteti i Vatikanit (Holy See)",       0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent dhe Grenadinet",              0,0,0 },
+{ IDX_2C('v','e'),        "Venezuelë",                                 0,0,0 },
+{ IDX_2C('v','g'),        "Ishujt Virgjini (Britanikë)",               0,0,0 },
+{ IDX_2C('v','i'),        "Ishujt Virgjini (U.S.)",                    0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                                  0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                                   0,0,0 },
+{ IDX_2C('w','f'),        "Ishujt Vallis dhe Futuna",                  0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                                     0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                                     0,0,0 },
+{ IDX_2C('y','t'),        "Majote",                                    0,0,0 },
+{ IDX_2C('y','u'),        "FSMZ",                                      0,0,0 },
+{ IDX_2C('z','a'),        "Afrikë e Jugut",                            0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                                    0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabue",                                  0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                           0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",                        0,0,0 },
+{ IDX_2C('o','1'),        "Other",                                     0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",                       0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",                       0,0,0 },
+{ 0              ,        NULL,                                        0,0,0 }};
diff --git a/lang/webalizer_lang.arabic b/lang/webalizer_lang.arabic
new file mode 100644 (file)
index 0000000..2eb2b7d
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+   webalizer_lang.english
+
+   Webalizer V2.0x Language Support file for English.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   20-May-2008 Tranlated to Arabic by Mohamed SAAD
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Arabic";
+char *langcode  = "ar";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "تسجيلات";
+char *msg_addresses="عناوين";
+char *msg_ignored = "غير مستعملة";
+char *msg_bad     = "غير سليمة";
+char *msg_in      = "في";
+char *msg_seconds = "ثانية";
+
+/* progress and setup error messages */
+char *msg_log_err = "خطء: غير قادر على فتح ملف سجل الوقائع";
+char *msg_log_use = "جاري إستعمال ملف سجل الوقائع";
+char *msg_dir_err = "خطء  غير قادر على الإنتقال إلى الدليل ";
+char *msg_dir_use = "جاري إنشاء الخرج في";
+char *msg_cur_dir = "الدليل الحالي";
+char *msg_hostname= "إسم المضيف للتقارير هو";
+char *msg_ign_hist= "تجاهل ملف السجل الزمني السابق ...";
+char *msg_no_hist = "لم أجِد ملف السجل الزمني ...";
+char *msg_get_hist= "جاري قراءة ملف السجل الزمني...";
+char *msg_put_hist= "جاري حفظ معلومات السجل الزمني ...";
+char *msg_hist_err= "خطء: غير قادر على كتابة ملف السجل الزمني";
+char *msg_bad_hist= "خطء: تجاهل تسجيل زمني غير صالح";
+char *msg_bad_conf= "خطء: غير قادر على فتح ملف الإعداد";
+char *msg_bad_key = "تحذير: كلمة بحث غير صاليحة";
+char *msg_bad_date= "خطء: قفزة عن التسجيل (التاريخ غير صالح)";
+char *msg_ign_nscp= "جاري القفذ عن تسجيل ترويسة Netscape";
+char *msg_bad_rec = "قفزة عن تسجيل غير سليم";
+char *msg_no_vrec = "لم أجِد تسجيلات صالحة !";
+char *msg_gen_rpt = "جاري تكوين التقرير لِ ";
+char *msg_gen_sum = "جاري تكوين التقرير الموجز";
+char *msg_get_data= "جاري قراءة معطيات التنفيذ السابق ..";
+char *msg_put_data= "جاري حفظ معطيات التنفيذ الحالي ...";
+char *msg_no_data = "لم أجِد معطيات التنفيذ السابق ...";
+char *msg_bad_data= "خطء: غير قادر على إستعادة معطيات التنفيذ";
+char *msg_data_err= "خطء: غير قادر على حفظ معطيات التنفيذ الحالي";
+char *msg_dup_data= "تحذير: إحتمال وجود معطيات متكررة مرتين";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "فترة الموجز";
+char *msg_hhdr_gt = "تمّ الإنشاء";
+
+/* main index strings */
+char *msg_main_us = "ملخص الإستعمال لِ ";
+/* char *msg_main_per= "الأشهر الإثني عشر السابقة"; */
+char *msg_main_per= "الملخص حسب الشهر";
+char *msg_main_sum= "الملخص حسب الشهر";
+char *msg_main_da = "المعدل اليومي";
+char *msg_main_mt = "المجموعات الشهرية";
+
+/* month HTML page strings */
+char *msg_hmth_du = "الإستعمال اليومي لِ  ";
+char *msg_hmth_hu = "الإستعمال حسب الساعة لِ ";
+
+/* table header strings */
+char *msg_h_by    = "حسب";
+char *msg_h_avg   = "المعدل";
+char *msg_h_max   = "الأقصى";
+char *msg_h_total = "المجموع";
+char *msg_h_totals= "المجموعات";
+char *msg_h_day   = "اليوم";
+char *msg_h_mth   = "الشهر";
+char *msg_h_hour  = "الساعة";
+char *msg_h_hits  = "الإصابات";
+char *msg_h_pages = "الصفحات";
+char *msg_h_visits= "الزيارات";
+char *msg_h_files = "الملفات";
+char *msg_h_sites = "المواقع";
+char *msg_h_xfer  = "كيلو بايت";
+char *msg_h_hname = "إسم المضيف";
+char *msg_h_url   = "عنوان المورد المنتظم URL";
+char *msg_h_agent = "عميل المستخدم";
+char *msg_h_ref   = "المحوّل";
+char *msg_h_ctry  = "البلد";
+char *msg_h_search= "جملة البحث";
+char *msg_h_uname = "إسم المستخدم";
+
+/* links along top of page */
+char *msg_hlnk_ds = "الإحصاءات اليومية";
+char *msg_hlnk_hs = "الإحصاءات حسب الساعة";
+char *msg_hlnk_u  = "عناوين الموارد المنتظمة URLs";
+char *msg_hlnk_s  = "المواقع";
+char *msg_hlnk_a  = "العملاء";
+char *msg_hlnk_c  = "البلاد";
+char *msg_hlnk_r  = "المحوّلون";
+char *msg_hlnk_en = "الدخول";
+char *msg_hlnk_ex = "الخروج";
+char *msg_hlnk_sr = "البحث";
+char *msg_hlnk_i  = "المستخدمون";
+
+/* monthly total table */
+char *msg_mtot_ms = "الإحصاءات الشهرية لِ ";
+char *msg_mtot_th = "مجموع الإصابات";
+char *msg_mtot_tf = "مجموع الملفات";
+char *msg_mtot_tx = "مجموع الكيلو بايت";
+char *msg_mtot_us = "مجموع المواقع المنفردة";
+char *msg_mtot_ur = "مجموع المحولين المنفردة";
+char *msg_mtot_ua = "مجموع عملاء المستخدمين المنفردة";
+char *msg_mtot_uu = "مجموع عناوين الموارد المنتظمة المنفردة";
+char *msg_mtot_ui = "مجموع أسماء المستخدمين المنفردة";
+char *msg_mtot_mhd= "الإصابات حسب اليوم";
+char *msg_mtot_mhh= "الإصابات حسب الساعة";
+char *msg_mtot_mfd= "الملفات حسب اليوم";
+char *msg_mtot_mpd= "الصفحات حسب اليوم";
+char *msg_mtot_msd= "المواقع حسب اليوم";
+char *msg_mtot_mvd= "الزيارات حسب اليوم";
+char *msg_mtot_mkd= "كيلو بايت في اليوم";
+char *msg_mtot_rc = "الإصابات حسب رمز الإجابة";
+
+/* daily total table */
+char *msg_dtot_ds = "الإحصاءات اليومية لِ ";
+
+/* hourly total table */
+char *msg_htot_hs = "الإحصاءات حسب الساعة لِ ";
+
+/* country pie chart */
+char *msg_ctry_use= "الإستعمال حسب البلد لِ ";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "الأعلى";
+char *msg_top_of  = "من اصل";
+char *msg_top_s   = "مجموع المواقع";
+char *msg_top_u   = "مجموع عناوين الموارد المنتظمة URLs";
+char *msg_top_r   = "مجموع المحولين";
+char *msg_top_a   = "مجموع عملاء المستخدمين";
+char *msg_top_c   = "مجموع البلاد";
+char *msg_top_en  = "مجموع صفحات الدخول";
+char *msg_top_ex  = "مجوع صفحات الخروج";
+char *msg_top_sr  = "مجموع مفردات البحث";
+char *msg_top_i   = "مجموع أسماء المستخدمين";
+char *msg_v_sites = "راجع كل المواقع";
+char *msg_v_urls  = "راجع كل عناوين الموارد المنتظمة";
+char *msg_v_refs  = "راجع كل المحولون";
+char *msg_v_agents= "راجع كل عملاء المستخدمين";
+char *msg_v_search= "راجع كل مفردات البحث";
+char *msg_v_users = "راجع كل أسماء المستخدمين";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+
+/* long month names - can be any length */
+char *l_month[12]={ "January",  "February", "March",   "April",
+                    "May",      "June",     "July",    "August",
+                    "September","October",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Usage Statistics for";
+char *msg_h_other = "Other";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.catalan b/lang/webalizer_lang.catalan
new file mode 100644 (file)
index 0000000..d46442c
--- /dev/null
@@ -0,0 +1,639 @@
+/*
+   webalizer_lang.catalan
+
+   Webalizer V2.0x Language Support file for Catalan.
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   19-Aug-1998 Translated by Jordi Bruguera (jordi@t800.grn.es) 
+   21-Sep-1998 Additional corrections by Jordi Bruguera (jordi@t800.grn.es)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   05-Jul-1999 Additional corrections by Jordi Bruguera (jordi@t800.grn.es)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   18-Oct-2000 Translated new strings for version 2.01-06 (jordi@t800.grn.es)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+   16-Jan-2011 Adapted to Softcatalà style by Jordi Mallach (jordi@debian.org)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Català";
+char *langcode  = "ca";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "registres";
+char *msg_addresses="adreces";
+char *msg_ignored = "ignorats";
+char *msg_bad     = "erronis";
+char *msg_in      = "en";
+char *msg_seconds = "segons";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: no s'ha pogut obrir el fitxer de registres";
+char *msg_log_use = "S'està emprant el registre";
+char *msg_dir_err = "Error: no es pot canviar al directori especificat";
+char *msg_dir_use = "S'està creant els resultats a";
+char *msg_cur_dir = "el directori actual";
+char *msg_hostname= "Informe per al servidor";
+char *msg_ign_hist= "S'està ignorant l'historial anterior...";
+char *msg_no_hist = "No s'ha trobat el fitxer de l'historial...";
+char *msg_get_hist= "S'està llegint el fitxer de l'historial...";
+char *msg_put_hist= "S'està desant la informació de l'historial...";
+char *msg_hist_err= "Error: no es pot escriure al fitxer de l'historial";
+char *msg_bad_hist= "Error: s'està descartant un registre no vàlid";
+char *msg_bad_conf= "Error: no es pot obrir el fitxer de configuració";
+char *msg_bad_key = "Avís: la paraula clau no és vàlida";
+char *msg_bad_date= "Error: s'està ometent el registre (data errònia)";
+char *msg_ign_nscp= "S'està ometent el registre de capcalera del Netscape";
+char *msg_bad_rec = "S'està ometent un registre erroni";
+char *msg_no_vrec = "No s'ha trobat cap registre vàlid!";
+char *msg_gen_rpt = "S'està generant l'informe per a";
+char *msg_gen_sum = "S'està generant l'informe resumit";
+char *msg_get_data= "S'estan llegint dades de l'execució anterior...";
+char *msg_put_data= "S'estan desant les dades de l'execució actual...";
+char *msg_no_data = "No s'han trobat les dades de l'execució anterior...";
+char *msg_bad_data= "Error: no es pot recuperar les dades de l'execució";
+char *msg_data_err= "Error: no es poden desar les dades de l'execució actual";
+char *msg_dup_data= "Avís: S'han trobat dades que potser són duplicades";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No s'ha especificat el fitxer de memòria cau, s'està avortant...";
+char *msg_dns_nodb= "Error: no es pot obrir el fitxer de memòria cau de DNS";
+char *msg_dns_nolk= "Error: no es pot blocar el fitxer de memòria cau de DNS";
+char *msg_dns_usec= "S'està emprant el fitxer de memòria cau de DNS";
+char *msg_dns_rslv= "Recerca DNS";
+char *msg_dns_none= "Cap a processar";
+char *msg_dns_abrt= "El suport de DNS no és present, s'està avortant...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "S'ha produït un error en obrir el fitxer";
+char *msg_geo_use = "S'està emprant";
+char *msg_geo_nolu= "consultes inhabilitades";
+char *msg_geo_dflt= "predeterminat";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "No s'ha pogut assignar prou memòria, es desactiva l'opció «Llocs principals»";
+char *msg_nomem_tr= "No s'ha pogut assignar prou memòria, es desactiva l'opció «Referents principals»";
+char *msg_nomem_tu= "No s'ha pogut assignar prou memòria, es desactiva l'opció «URL més visitades»";
+char *msg_nomem_tc= "No s'ha pogut assignar prou memòria, es desactiva l'opció «Països d'origen principals";
+char *msg_nomem_ta= "No s'ha pogut assignar prou memòria, es desactiva l'opció «Navegadors principals»";
+char *msg_nomem_tsr="No s'ha pogut assignar prou memòria, es desactiva l'opció «Cadenes de recerca principals»";
+char *msg_nomem_ti= "No s'ha pogut assignar prou memòria, es desactiva l'opció «Noms d'usuari principals»";
+char *msg_nomem_dh= "S'ha produït un error en afegir el nom del node (diari), s'està ometent";
+char *msg_nomem_mh= "S'ha produït un error en afegir el nom del node (mensual), s'està ometent";
+char *msg_nomem_u = "S'ha produït un error en afegir el node de les URL, s'està ometent";
+char *msg_nomem_a = "S'ha produït un error en afegir el node dels navegadors, s'està ometent";
+char *msg_nomem_r = "S'ha produït un error en afegir el node dels referents, s'està ometent";
+char *msg_nomem_sc= "S'ha produït un error en afegir el node de cadenes de recerca, s'està ometent";
+char *msg_nomem_i = "S'ha produït un error en afegir el node de noms d'usuari, s'està ometent";
+
+/* registre record errors */
+char *msg_big_rec = "Error: S'està ometent una entrada del registre massa gran";
+char *msg_big_host= "Avís: S'està truncant el nom del servidor, que és massa gran";
+char *msg_big_date= "Avís: S'està truncant el camp de la data, que és massa gran";
+char *msg_big_req = "Avís: S'està truncant el camp de la petició, que és massa gran";
+char *msg_big_ref = "Avís: S'està truncant el camp de l'enllaç d'origen, que és massa gran";
+char *msg_big_user= "Avís: S'està truncant un nom d'usuari massa llarg";
+char *msg_big_one = "Avís: La cadena supera la mida permesa";
+
+/* misc errors */
+char *msg_no_open = "Error: No s'ha pogut obrir el fitxer";
+
+/* Help display... */
+char *h_usage1 = "Funcionament";
+char *h_usage2 = "[opcions] [fitxer històric (log)]";
+char *h_msg[]= {
+         "-h        = mostra aquest missatge d'ajuda"             ,
+         "-V        = mostra la versió del programa"              ,
+         "-v        = sigues detallat"                            ,
+         "-d        = mostra informació de depuració addicional"  ,
+         "-F tipus  = tipus de registre. tipus=(clf | ftp | squid | w3c)",
+         "-f        = omet els errors de seqüència"               ,
+         "-i        = descarta el fitxer de l'historial"          ,
+         "-p        = conserva l'estat (incremental)"             ,
+         "-b        = omet l'estat (incremental)"                 ,
+         "-q        = suprimeix els missatges informatius"        ,
+         "-Q        = suprimeix TOTS els misatges"                ,
+         "-Y        = suprimeix la gràfica de països"             ,
+         "-G        = suprimeix la gràfica per hores"             ,
+         "-H        = suprimeix les estadístiques per hores"      ,
+         "-L        = suprimeix les llegendes de color dels gràfics",
+         "-l num    = empra num línies de fons a la gràfica)"     ,
+         "-m num    = valor del temps d'una visita (segons)"      ,
+         "-T        = mostra el temps de la temporització"        ,
+         "-c fitxer = empra el fitxer de configuració «fitxer»"   ,
+         "-n nom    = nom de màquina a emprar"                    ,
+         "-o dir    = directori de sortida a emprar"              ,
+         "-t nom    = empra el títol «nom» per a l'informe"       ,
+         "-a nom    = amaga la informació relativa al navegador «nom»" ,
+         "-r nom    = amaga la informació relativa als referents «nom»",
+         "-s nom    = amaga la informació relativa al lloc «nom»" ,
+         "-u nom    = amaga la informació relativa a les URL visitades «nom»",
+         "-x nom    = empra l'extensió de fitxer «nom»"           ,
+         "-O nom    = omet la pàgina «nom»"                       ,
+         "-P nom    = tipus de l'extensió de la pàgina «nom»"     ,
+         "-I nom    = àlias de l'índex «nom»"                     ,
+         "-K núm    = mostra núm mesos a la taula de resum"       ,
+         "-k núm    = mostra núm mesos a la gràfica de resum"     ,
+         "-A núm    = mostra els núm primers navegadors"          ,
+         "-C núm    = mostra els núm primers països"              ,
+         "-R núm    = mostra els núm primers referents"           ,
+         "-S núm    = mostra els núm primers servidors"           ,
+         "-U núm    = mostra els núm primers URL"                 ,
+         "-e núm    = mostra les núm primeres pàgines d'entrada"  ,
+         "-E núm    = mostra les núm primeres pàgines de sortida" ,
+         "-g núm    = agrupa els dominis a «núm» nivells"         ,
+         "-X        = amaga els llocs individuals"                ,
+         "-z dir    = empra les banderes nacionals de «dir»"      ,
+#ifdef USE_DNS
+         "-D fitxer = empra el fitxer de memòria cau de DNS «fitxer»",
+         "-N num    = nombre de processos DNS (0=inhabilita)"     ,
+         "-j        = habilita les cerques GeoDB natives"         ,
+         "-J nom    = empra la base de dades de GeoDB «fitxer»"   ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = habilita les cerques de GeoIP"              ,
+         "-W nom    = empra la base de dades de GeoIP «fitxer»"   ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Període resumit";
+char *msg_hhdr_gt = "Generat el";
+
+/* main index strings */
+char *msg_main_us = "Resum d'accessos per a";
+char *msg_main_per= "Resum per mesos";
+char *msg_main_sum= "Resum per mesos";
+char *msg_main_da = "Mitjana diària";
+char *msg_main_mt = "Totals del mes";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Ús diari per a";
+char *msg_hmth_hu = "Ús horari per a";
+
+/* table header strings */
+char *msg_h_by    = "Per";
+char *msg_h_avg   = "Mitjana";
+char *msg_h_max   = "Màx";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totals";
+char *msg_h_day   = "Dia";
+char *msg_h_mth   = "Mes";
+char *msg_h_hour  = "Hora";
+char *msg_h_hits  = "Accessos";
+char *msg_h_pages = "Pàgines";
+char *msg_h_visits= "Visites";
+char *msg_h_files = "Fitxers";
+char *msg_h_sites = "Navegadors";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Visitant";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Navegador";
+char *msg_h_ref   = "Referent";
+char *msg_h_ctry  = "País";
+char *msg_h_search= "Cadena de recerca";
+char *msg_h_uname = "Nom d'usuari";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Estadístiques diàries";
+char *msg_hlnk_hs = "Estadístiques horàries";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Visitants";
+char *msg_hlnk_a  = "Navegadors";
+char *msg_hlnk_c  = "Països";
+char *msg_hlnk_r  = "Referents";
+char *msg_hlnk_en = "Entrada";
+char *msg_hlnk_ex = "Sortida";
+char *msg_hlnk_sr = "Recerca";
+char *msg_hlnk_i  = "Usuaris";
+
+/* monthly total table */
+char *msg_mtot_ms = "Estadístiques mensuals";
+char *msg_mtot_th = "Accessos totals";
+char *msg_mtot_tf = "Fitxers totals";
+char *msg_mtot_tx = "KBytes totals";
+char *msg_mtot_us = "Servidors totals";
+char *msg_mtot_ur = "Referents totals";
+char *msg_mtot_ua = "Navegadors totals";
+char *msg_mtot_uu = "URL totals";
+char *msg_mtot_ui = "Noms d'usuari totals";
+char *msg_mtot_mhd= "Accessos per dia";
+char *msg_mtot_mhh= "Accessos per hora";
+char *msg_mtot_mfd= "Fitxers per dia";
+char *msg_mtot_mpd= "Pàgines per dia";
+char *msg_mtot_msd= "Servidors per dia";
+char *msg_mtot_mvd= "Visites per dia";
+char *msg_mtot_mkd= "KBytes per dia";
+char *msg_mtot_rc = "Accessos segons codi de resposta";
+
+/* daily total table */
+char *msg_dtot_ds = "Estadístiques diàries per a";
+
+/* hourly total table */
+char *msg_htot_hs = "Estadístiques horàries per a";
+
+/* country pie chart */
+char *msg_ctry_use= "Ús per països per a";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Els";
+char *msg_top_of  = "primers d'un total de";
+char *msg_top_s   = "visitants";
+char *msg_top_u   = "URL";
+char *msg_top_r   = "referents";
+char *msg_top_a   = "navegadors";
+char *msg_top_c   = "països";
+char *msg_top_en  = "pàgines d'entrada";
+char *msg_top_ex  = "pàgines de sortida";
+char *msg_top_sr  = "cadenes de recerca";
+char *msg_top_i   = "noms d'usuari";
+char *msg_v_sites = "Mostra tots els llocs visitats";
+char *msg_v_urls  = "Mostra totes les URL";
+char *msg_v_refs  = "Mostra tots els referents";
+char *msg_v_agents= "Mostra tots els navegadors";
+char *msg_v_search= "Mostra totes les cadenes de recerca";
+char *msg_v_users = "Mostra tots els noms d'usuari";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+
+char *s_month[12]={ "gen", "feb", "mar",
+                    "abr", "mai", "jun",
+                    "jul", "ago", "set",
+                    "oct", "nov", "des"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "gener",    "febrer",  "març",     "abril",
+                    "maig",     "juny",    "juliol",   "agost",
+                    "setembre", "octubre", "novembre", "desembre"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Codi de resposta no definit",                0 },
+         { "Codi 100 - Continua",                        0 },
+         { "Codi 101 - S'està commutant protocols",      0 },
+         { "Codi 200 - D'acord",                         0 },
+         { "Codi 201 - Creat",                           0 },
+         { "Codi 202 - Acceptada",                       0 },
+         { "Codi 203 - Informació no autoritativa",      0 },
+         { "Codi 204 - Sense contingut",                 0 },
+         { "Codi 205 - Recarregueu el contingut",        0 },
+         { "Codi 206 - Contingut parcial",               0 },
+         { "Codi 300 - Múltiples opcions",               0 },
+         { "Codi 301 - Mogut permanentment",             0 },
+         { "Codi 302 - Trobat",                          0 },
+         { "Codi 303 - Vegeu altres",                    0 },
+         { "Codi 304 - No modificat",                    0 },
+         { "Codi 305 - Empreu un servidor intermediari", 0 },
+         { "Codi 307 - Mogut temporalment",              0 },
+         { "Codi 400 - Petició errònia",                 0 },
+         { "Codi 401 - No autoritzat",                   0 },
+         { "Codi 402 - Es requereix pagament",           0 },
+         { "Codi 403 - Prohibit",                        0 },
+         { "Codi 404 - No trobat",                       0 },
+         { "Codi 405 - Mètode no permès",                0 },
+         { "Codi 406 - No acceptable",                   0 },
+         { "Codi 407 - Es requereix autenticació proxy", 0 },
+         { "Codi 408 - Temps d'espera exhaurit",         0 },
+         { "Codi 409 - Conflicte",                       0 },
+         { "Codi 410 - Ja no és disponible",             0 },
+         { "Codi 411 - Mida requerida" ,                 0 },
+         { "Codi 412 - Precondició fallida",             0 },
+         { "Codi 413 - Petició massa gran",              0 },
+         { "Codi 414 - URI de la petició massa llarga",  0 },
+         { "Codi 415 - Tipus de medi no implementat",    0 },
+         { "Codi 416 - Rang sol·licitat no disponible",  0 },
+         { "Codi 417 - Expectativa fallida",             0 },
+         { "Codi 500 - Error intern del servidor",       0 },
+         { "Codi 501 - No implementat",                  0 },
+         { "Codi 502 - Passarel·la errònia",             0 },
+         { "Codi 503 - Servei no disponible",            0 },
+         { "Codi 504 - Temps d'espera de la pasarel·la exhaurit",0 },
+         { "Codi 505 - Versió d'HTTP no implementada",   0 } };
+
+char *msg_title   = "Estadístiques d'accés per a";
+char *msg_h_other = "Altre";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "No resolt/Desconegut",             0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educatiu (edu)",                   0,0,0 },
+{ IDX_3C('g','o','v'),    "Govern dels EUA (gov)",            0,0,0 },
+{ IDX_3C('i','n','t'),    "Internacional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "Exèrcit dels EUA (mil)",           0,0,0 },
+{ IDX_3C('n','e','t'),    "Xarxa (net)",                      0,0,0 },
+{ IDX_3C('o','r','g'),    "Org. sense ànim de lucre (org)",   0,0,0 },
+{ IDX_3C('b','i','z'),    "Negoci genèric (biz)",             0,0,0 },
+{ IDX_3C('c','a','t'),    "Comunitat catalana (cat)",         0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Comunitat Àsia Pacífic (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Associació cooperativa (coop)",    0,0,0 },
+{ IDX_4C('i','n','f','o'),"DPN genèric (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Recursos humans (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"DPN genèric mòbil (mobi)",         0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individu (name)",                  0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Camp OTAN (nato)",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museus (museum)",         0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Ind. viatges(travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Illa de l'Ascensió",               0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emirats Àrabs Units",              0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua i Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguila",                          0,0,0 },
+{ IDX_2C('a','l'),        "Albània",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armènia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antilles Holandeses",              0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antàrtida",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Americanes",                 0,0,0 },
+{ IDX_2C('a','t'),        "Àustria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Austràlia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Illes Åland",                      0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaitjan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bòsnia i Herzegovina",             0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Bèlgica",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgària",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benín",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthélemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei",                           0,0,0 },
+{ IDX_2C('b','o'),        "Bolívia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahames",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet",                           0,0,0 },
+{ IDX_2C('b','w'),        "Botsuana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorússia",                      0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canadà",                           0,0,0 },
+{ IDX_2C('c','c'),        "Illa de Cocos",                    0,0,0 },
+{ IDX_2C('c','d'),        "República Democràtica del Congo",  0,0,0 },
+{ IDX_2C('c','f'),        "República Centrafricana",          0,0,0 },
+{ IDX_2C('c','g'),        "República del Congo",              0,0,0 },
+{ IDX_2C('c','h'),        "Suïssa",                           0,0,0 },
+{ IDX_2C('c','i'),        "Costa de Vori",                    0,0,0 },
+{ IDX_2C('c','k'),        "Arxipèlag (Illes) de Cook",        0,0,0 },
+{ IDX_2C('c','l'),        "Xile",                             0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Xina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Colòmbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cap Verd",                         0,0,0 },
+{ IDX_2C('c','x'),        "Illa de Christmas",                0,0,0 },
+{ IDX_2C('c','y'),        "Xipre",                            0,0,0 },
+{ IDX_2C('c','z'),        "Txèquia",                          0,0,0 },
+{ IDX_2C('d','e'),        "Alemanya",                         0,0,0 },
+{ IDX_2C('d','j'),        "Gibuti",                           0,0,0 },
+{ IDX_2C('d','k'),        "Dinamarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "República Dominicana",             0,0,0 },
+{ IDX_2C('d','z'),        "Algèria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Equador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estònia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egipte",                           0,0,0 },
+{ IDX_2C('e','h'),        "Sàhara Occidental",                0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Espanya",                          0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "Unió Europea",                     0,0,0 },
+{ IDX_2C('f','i'),        "Finlàndia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Illes Malvines (Falkland)",        0,0,0 },
+{ IDX_2C('f','m'),        "Micronèsia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Illes Fer-óer",                    0,0,0 },
+{ IDX_2C('f','r'),        "França",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Gran Bretanya",                    0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Geòrgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guaiana Francesa",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grenlàndia",                       0,0,0 },
+{ IDX_2C('g','m'),        "Gàmbia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupe",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guinea Equatorial",                0,0,0 },
+{ IDX_2C('g','r'),        "Grècia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Illes Geòrgia del Sud i Sandwich del Sud", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guaiana",                          0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Illa Heard i Illes McDonald",      0,0,0 },
+{ IDX_2C('h','n'),        "Hondures",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croàcia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haití",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hongria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonèsia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Illa de Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Índia",                            0,0,0 },
+{ IDX_2C('i','o'),        "Territori Britànic de l'Oceà Índic",0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islàndia",                         0,0,0 },
+{ IDX_2C('i','t'),        "Itàlia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordània",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japó",                             0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Quirguisistan",                    0,0,0 },
+{ IDX_2C('k','h'),        "Cambotja",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comores",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts i Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Corea del Nord",                   0,0,0 },
+{ IDX_2C('k','r'),        "Corea del Sud",                    0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Illes Caimà",                      0,0,0 },
+{ IDX_2C('k','z'),        "Casaquistan",                      0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Líban",                            0,0,0 },
+{ IDX_2C('l','c'),        "Santa Llúcia",                     0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Libèria",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituània",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Letònia",                          0,0,0 },
+{ IDX_2C('l','y'),        "Líbia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marroc",                           0,0,0 },
+{ IDX_2C('m','c'),        "Mònaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldàvia",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Illa de Sant Martí (part francesa)",0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Illes Marshall",                   0,0,0 },
+{ IDX_2C('m','k'),        "Macedònia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Mianmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongòlia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Illes Mariannes Septentrionals",   0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritània",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Maurici",                          0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mèxic",                            0,0,0 },
+{ IDX_2C('m','y'),        "Malàisia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Moçambic",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namíbia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nova Caledònia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Níger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk",                          0,0,0 },
+{ IDX_2C('n','g'),        "Nigèria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Països Baixos",                    0,0,0 },
+{ IDX_2C('n','o'),        "Noruega",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Naüru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nova Zelanda",                     0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panamà",                           0,0,0 },
+{ IDX_2C('p','e'),        "Perú",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinèsia Francesa",               0,0,0 },
+{ IDX_2C('p','g'),        "Nova Guinea Pàpua",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipines",                        0,0,0 },
+{ IDX_2C('p','k'),        "Paquistan",                        0,0,0 },
+{ IDX_2C('p','l'),        "Polònia",                          0,0,0 },
+{ IDX_2C('p','m'),        "Saint Pierre i Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Illes Pitcairn",                   0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestina",                        0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguai",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunió",                           0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Sèrbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rússia",                           0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Aràbia Saudita",                   0,0,0 },
+{ IDX_2C('s','b'),        "Illes Salomó",                     0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suècia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Santa Helena",                     0,0,0 },
+{ IDX_2C('s','i'),        "Eslovènia",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard i Jan Mayen",             0,0,0 },
+{ IDX_2C('s','k'),        "Eslovàquia",                       0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somàlia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "São Tome i Príncipe",              0,0,0 },
+{ IDX_2C('s','u'),        "Unió Soviètica",                   0,0,0 },
+{ IDX_2C('s','v'),        "el Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Síria",                            0,0,0 },
+{ IDX_2C('s','z'),        "Suazilàndia",                      0,0,0 },
+{ IDX_2C('t','c'),        "Illes de Turks i Caicos",          0,0,0 },
+{ IDX_2C('t','d'),        "Txad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Territoris Francesos del Sud",     0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailànda",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tatgiquistan",                     0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor Oriental",                   0,0,0 },
+{ IDX_2C('t','m'),        "Turcmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunísia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Timor (.tp)",                      0,0,0 },
+{ IDX_2C('t','r'),        "Turquia",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinitat i Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Regne Unit",                       0,0,0 },
+{ IDX_2C('u','m'),        "Illes Perifèriques Menors dels EUA",0,0,0 },
+{ IDX_2C('u','s'),        "Estats Units d'Amèrica",           0,0,0 },
+{ IDX_2C('u','y'),        "Uruguai",                          0,0,0 },
+{ IDX_2C('u','z'),        "Usbequistan",                      0,0,0 },
+{ IDX_2C('v','a'),        "la Ciutat del Vaticà",             0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent i les Grenadines",   0,0,0 },
+{ IDX_2C('v','e'),        "Veneçuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Illes Verges Britàniques",         0,0,0 },
+{ IDX_2C('v','i'),        "Illes Verges Americanes",          0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis i Futuna",                  0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Iemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Iugoslàvia",                       0,0,0 },
+{ IDX_2C('z','a'),        "República de Sud-àfrica",          0,0,0 },
+{ IDX_2C('z','m'),        "Zàmbia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbàbue",                         0,0,0 },
+{ IDX_2C('a','1'),        "Servidor intermediari anònim",     0,0,0 },
+{ IDX_2C('a','2'),        "Proveïdor satèl·lit",              0,0,0 },
+{ IDX_2C('o','1'),        "Altres",                           0,0,0 },
+{ IDX_2C('a','p'),        "Regió Àsia/Pacífic",               0,0,0 },
+{ IDX_3C('l','a','n'),    "Xarxa local (lan)",                0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.chinese b/lang/webalizer_lang.chinese
new file mode 100644 (file)
index 0000000..9b23028
--- /dev/null
@@ -0,0 +1,633 @@
+/*
+   webalizer_lang.chinese
+
+   Webalizer V2.0x Language Support file for Chinese.
+   30-Apr-1999 Translated to Chinese by Daniel Gau <b4705021@im.ntu.edu.tw>
+   29-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Chinese";
+char *langcode  = "zh";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "°O¿ý";
+char *msg_addresses="addresses";
+char *msg_ignored = "©¿²¤";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "¬í";
+
+/* progress and setup error messages */
+char *msg_log_err = "¿ù»~¡GµLªk¶}±Ò°O¿ýÀÉ";
+char *msg_log_use = "¨Ï¥Î°O¿ýÀÉ";
+char *msg_dir_err = "¿ù»~¡GµLªkÅܧó¥Ø¿ý";
+char *msg_dir_use = "²£¥Í¿é¥X©ó";
+char *msg_cur_dir = "¥Ø«eªº¥Ø¿ý";
+char *msg_hostname= "¥D¾÷¦WºÙ¬O";
+char *msg_ign_hist= "©¿²¤¤§«e¾ú¥v°O¿ý(history)";
+char *msg_no_hist = "¾ú¥v°O¿ý(history file)§ä¤£¨ì¡K";
+char *msg_get_hist= "Ū¨ú¾ú¥v°O¿ý";
+char *msg_put_hist= "Àx¦s¾ú¥v°O¿ý¸ê°T";
+char *msg_hist_err= "¿ù»~¡GµLªk¼g¤J¾ú¥v°O¿ý";
+char *msg_bad_hist= "¿ù»~¡G©¿²¤µL®Äªº¾ú¥v°O¿ý";
+char *msg_bad_conf= "¿ù»~¡GµLªk¶}±Ò³]©wÀÉ";
+char *msg_bad_key = "ĵ§i¡GµL®ÄªºÃöÁä¦r";
+char *msg_bad_date= "¿ù»~¡G¸õ¹L¸Óµ§°O¿ý¡]¤é´Á®æ¦¡¦³°ÝÃD¡^";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "§ä¤£¨ì¦³®Äªº°O¿ý¡I";
+char *msg_gen_rpt = "²£¥Í³øªíµ¹";
+char *msg_gen_sum = "²£¥Í·JÁ`³øªí";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't Allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timeout value (seconds)"       ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Summary Period";
+char *msg_hhdr_gt = "²£¥Í®É¶¡¡G";
+
+/* main index strings */
+char *msg_main_us = "Usage Statistics for";
+/* char *msg_main_per= " 12 ­Ó¤ë"; */
+char *msg_main_per= "¨C¤ë·JÁ`²Î­p";
+char *msg_main_sum= "¨C¤ë·JÁ`²Î­p";
+char *msg_main_da = "¨C¤é¥­§¡";
+char *msg_main_mt = "¨C¤ëÁ`­p";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daily usage for";
+char *msg_hmth_hu = "Hourly usage for";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "¥­§¡";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Á`©M";
+char *msg_h_totals= "Á`©M";
+char *msg_h_day   = "¤é";
+char *msg_h_mth   = "¤ë";
+char *msg_h_hour  = "¤p®É";
+char *msg_h_hits  = "Ū¨ú¼Æ";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visits";
+char *msg_h_files = "ÀÉ®×";
+char *msg_h_sites = "ºô¯¸¼Æ";
+char *msg_h_xfer  = "¶Ç°e¶q¡]KB¡^";
+char *msg_h_hname = "¥D¾÷¦WºÙ";
+char *msg_h_url   = "ºô­¶¸ô®|";
+char *msg_h_agent = "ÂsÄý¾¹";
+char *msg_h_ref   = "¨Ó·½ºô­¶";
+char *msg_h_ctry  = "°ê®a";
+char *msg_h_search= "Search String";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "¨C¤é²Î­p";
+char *msg_hlnk_hs = "¨C¤p®É²Î­p";
+char *msg_hlnk_u  = "ºô­¶¸ô®|";
+char *msg_hlnk_s  = "¨Ó·½ºô¯¸";
+char *msg_hlnk_a  = "ÂsÄý¾¹";
+char *msg_hlnk_c  = "°ê®a";
+char *msg_hlnk_r  = "¨Ó·½ºô­¶";
+char *msg_hlnk_en = "Entry";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "Search";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+char *msg_mtot_ms = "¨C¤ë²Î­p--";
+char *msg_mtot_th = "Á`Ū¨ú¼Æ";
+char *msg_mtot_tf = "Á`ÀÉ®×¼Æ";
+char *msg_mtot_tx = "Á`¶Ç°e¶q¡]KB¡^";
+char *msg_mtot_us = "¨Ó·½ºô¯¸Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+char *msg_mtot_ur = "¨Ó·½ºô­¶Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+char *msg_mtot_ua = "¨Ó·½ÂsÄý¾¹Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+char *msg_mtot_uu = "³QŪ¨úªººô­¶¸ô®|Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Hits per Day";
+char *msg_mtot_mhh= "Hits per Hour";
+char *msg_mtot_mfd= "Files per Day";
+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_rc = "ºô­¶Åª¨ú®É¤§¦^À³¥N½X";
+
+/* daily total table */
+char *msg_dtot_ds = "¨C¤é²Î­p          ";
+
+/* hourly total table */
+char *msg_htot_hs = "¨C¤p®É²Î­p        ";
+
+/* country pie chart */
+char *msg_ctry_use= "¨Ó·½°ê®a²Î­p      ";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "¦C¥X«e";
+char *msg_top_of  = "¦W¡A¦@¦³";
+char *msg_top_s   = "­Óºô¯¸";
+char *msg_top_u   = "ºô­¶¸ô®|";
+char *msg_top_r   = "­Ó¨Ó·½ºô­¶";
+char *msg_top_a   = "ºØÂsÄý¾¹";
+char *msg_top_c   = "­Ó°ê®a";
+char *msg_top_en  = "Total Entry Pages";
+char *msg_top_ex  = "Total Exit Pages";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "¤@¤ë", "¤G¤ë", "¤T¤ë",
+                    "¥|¤ë", "¤­¤ë", "¤»¤ë",
+                    "¤C¤ë", "¤K¤ë", "¤E¤ë",
+                    "¤Q¤ë", "¤Q¤@¤ë", "¤Q¤G¤ë"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "¤@¤ë", "¤G¤ë", "¤T¤ë",
+                    "¥|¤ë", "¤­¤ë", "¤»¤ë",
+                    "¤C¤ë", "¤K¤ë", "¤E¤ë",
+                    "¤Q¤ë", "¤Q¤@¤ë", "¤Q¤G¤ë"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Usage Statistics for";
+char *msg_h_other = "Other";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.croatian b/lang/webalizer_lang.croatian
new file mode 100644 (file)
index 0000000..cbd921d
--- /dev/null
@@ -0,0 +1,629 @@
+/*
+   webalizer_lang.croatian
+
+   Webalizer V2.0x Language Support file for Croatian.
+   28-Jun-1999 Original translation by Dinko Korunic and Mia Carapina
+   30-Apr-2001 updated for v2.0 by Dinko Korunic <kreator@fly.srk.fer.hr>
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Croatian";
+char *langcode  = "hr";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Period zbrajanja";
+char *msg_hhdr_gt = "Generirano";
+
+/* main index strings */
+char *msg_main_us = "Pregled pristupa za";
+/* char *msg_main_per= "Posljednjih 12 mjeseci"; */
+char *msg_main_per= "Pregled po mjesecima";
+char *msg_main_sum= "Pregled po mjesecima";
+char *msg_main_da = "Dnevni prosjek";
+char *msg_main_mt = "Mjesecni zbrojevi";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Pristupi po danu za";
+char *msg_hmth_hu = "Pristupi po satu za";
+
+/* table header strings */
+char *msg_h_by    = "po";
+char *msg_h_avg   = "prosjek";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Ukupno";
+char *msg_h_totals= "Ukupno za sve";
+char *msg_h_day   = "Dan";
+char *msg_h_mth   = "Mjesec";
+char *msg_h_hour  = "Sat";
+char *msg_h_hits  = "Pristupa";
+char *msg_h_pages = "Stranica";
+char *msg_h_visits= "Posjeta";
+char *msg_h_files = "Datoteka";
+char *msg_h_sites = "Kompjutera";
+char *msg_h_xfer  = "KB";
+char *msg_h_hname = "Kompjuter";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Korisnicki program";
+char *msg_h_ref   = "Referer";
+char *msg_h_ctry  = "Zemlja";
+char *msg_h_search= "Tekst pretrazivanja";
+char *msg_h_uname = "Korisnik";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Dnevna statistika";
+char *msg_hlnk_hs = "Statistika po satu";
+char *msg_hlnk_u  = "URL-ovi";
+char *msg_hlnk_s  = "Kompjuteri";
+char *msg_hlnk_a  = "Browseri";
+char *msg_hlnk_c  = "Zemlje";
+char *msg_hlnk_r  = "Referiranja";
+char *msg_hlnk_en = "Ulaz";
+char *msg_hlnk_ex = "Izlaz";
+char *msg_hlnk_sr = "Pretraga";
+char *msg_hlnk_i  = "Korisnici";
+
+/* monthly total table */
+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_us = "Ukupno razlicitih kompjutera";
+char *msg_mtot_ur = "Ukupno razlicitih referiranja";
+char *msg_mtot_ua = "Ukupno razlicitih browsera";
+char *msg_mtot_uu = "Ukupno razlicitih URL-ova";
+char *msg_mtot_ui = "Ukupno razlicitih korisnickih imena";
+char *msg_mtot_mhd= "Pristupa na dan";
+char *msg_mtot_mhh= "Pristupa na sat";
+char *msg_mtot_mfd= "Datoteka na dan";
+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_rc = "Pristupa po kodu";
+
+/* daily total table */
+char *msg_dtot_ds = "Dnevna statistika za";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistika po satu za";
+
+/* country pie chart */
+char *msg_ctry_use= "Pristup po zemljama za";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Prvih";
+char *msg_top_of  = "od";
+char *msg_top_s   = "kompjutera";
+char *msg_top_u   = "URL-ova";
+char *msg_top_r   = "referiranja";
+char *msg_top_a   = "korisnickih programa";
+char *msg_top_c   = "zemalja";
+char *msg_top_en  = "ulaznih stranica";
+char *msg_top_ex  = "izlaznih stranica";
+char *msg_top_sr  = "tekstova pretrazivanja";
+char *msg_top_i   = "korisnickih imena";
+char *msg_v_sites = "Pregled svih kompjutera";
+char *msg_v_urls  = "Pregled svih URL-ova";
+char *msg_v_refs  = "Pregled svih referisanja";
+char *msg_v_agents= "Pregled svih korisnickih programa";
+char *msg_v_search= "Pregled svih tekstova pretrazivanja";
+char *msg_v_users = "Pregled svih korisnickih imena";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Sij", "Vel", "Ozu",
+                    "Tra", "Svi", "Lip",
+                    "Srp", "Kol", "Ruj",
+                    "Lis", "Stu", "Pro"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Sijecanj", "Veljaca", "Ozujak", "Travanj",
+                    "Svibanj", "Lipanj", "Srpanj", "Kolovoz",
+                    "Rujan", "Listopad", "Studeni", "Prosinac"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Statistika pristupa za";
+char *msg_h_other = "Ostalo";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Nedefinirano/Nepoznato",           0,0,0 },
+{ IDX_3C('c','o','m'),    "Komercijalni (com)",               0,0,0 },
+{ IDX_3C('e','d','u'),    "Obrazovni (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "SAD vlada (gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Medjunarodni (int)",               0,0,0 },
+{ IDX_3C('m','i','l'),    "SAD vojni (mil)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "Mrezne domene (net)",              0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizacije (org)",               0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Stari Arpanet (arpa)",             0,0,0 },
+{ IDX_4C('n','a','t','o'),"NATO (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andora",                           0,0,0 },
+{ IDX_2C('a','e'),        "Ujedinjeni Arapski Emirati",       0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua i Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguila",                          0,0,0 },
+{ IDX_2C('a','l'),        "Albanija",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armenija",                         0,0,0 },
+{ IDX_2C('a','n'),        "Nizozemski Antili",                0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antartik",                         0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Americka Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austrija",                         0,0,0 },
+{ IDX_2C('a','u'),        "Australija",                       0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbedzan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosna i Hercegovina",              0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Banglades",                        0,0,0 },
+{ IDX_2C('b','e'),        "Belgija",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bugarska",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermude",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivija",                         0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahami",                           0,0,0 },
+{ IDX_2C('b','t'),        "Butan",                            0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet otok",                      0,0,0 },
+{ IDX_2C('b','w'),        "Bocvana",                          0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) otoci",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Centralnoafricka republika",       0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Svicarska",                        0,0,0 },
+{ IDX_2C('c','i'),        "Obala bjelokosti",                 0,0,0 },
+{ IDX_2C('c','k'),        "Cookovi otoci",                    0,0,0 },
+{ IDX_2C('c','l'),        "Cile",                             0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Kina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbija",                        0,0,0 },
+{ IDX_2C('c','r'),        "Kostarika",                        0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Bozicni otok",                     0,0,0 },
+{ IDX_2C('c','y'),        "Cipar",                            0,0,0 },
+{ IDX_2C('c','z'),        "Ceska republika",                  0,0,0 },
+{ IDX_2C('d','e'),        "Njemacka",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danska",                           0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikanska republika",           0,0,0 },
+{ IDX_2C('d','z'),        "Algerija",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ekvador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonija",                         0,0,0 },
+{ IDX_2C('e','g'),        "Egipat",                           0,0,0 },
+{ IDX_2C('e','h'),        "Zapadna Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritreja",                         0,0,0 },
+{ IDX_2C('e','s'),        "Spanjolska",                       0,0,0 },
+{ IDX_2C('e','t'),        "Etiopija",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finska",                           0,0,0 },
+{ IDX_2C('f','j'),        "Fidzi",                            0,0,0 },
+{ IDX_2C('f','k'),        "Falklandski otoci (Malvinas)",     0,0,0 },
+{ IDX_2C('f','m'),        "Mikronezija",                      0,0,0 },
+{ IDX_2C('f','o'),        "Faroe otoci",                      0,0,0 },
+{ IDX_2C('f','r'),        "Francuska",                        0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Velika Britanija (UK)",            0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Francuska Guiana",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Gana",                             0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grenland",                         0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Gvineja",                          0,0,0 },
+{ IDX_2C('g','p'),        "Gvadelopa",                        0,0,0 },
+{ IDX_2C('g','q'),        "Ekvatorijalna Gvineja",            0,0,0 },
+{ IDX_2C('g','r'),        "Grcka",                            0,0,0 },
+{ IDX_2C('g','s'),        "Juzna Georgia and Juzni Sandwich otoci", 0,0,0 },
+{ IDX_2C('g','t'),        "Gvatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Gvinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Gvajana",                          0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard i McDonald otoci",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Hrvatska",                         0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Madjarska",                        0,0,0 },
+{ IDX_2C('i','d'),        "Indonezija",                       0,0,0 },
+{ IDX_2C('i','e'),        "Irska",                            0,0,0 },
+{ IDX_2C('i','l'),        "Izrael",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indija",                           0,0,0 },
+{ IDX_2C('i','o'),        "Britanski Indijski oceanski teritorij",   0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italija",                          0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamajka",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenija",                           0,0,0 },
+{ IDX_2C('k','g'),        "Kirgistan",                        0,0,0 },
+{ IDX_2C('k','h'),        "Kambodza",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Komoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts i Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Koreja (Sjeverna)",                0,0,0 },
+{ IDX_2C('k','r'),        "Koreja (Juzna)",                   0,0,0 },
+{ IDX_2C('k','w'),        "Kuvajt",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kajmanski otoci",                  0,0,0 },
+{ IDX_2C('k','z'),        "Kazahstan",                        0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Sveta Lucija",                     0,0,0 },
+{ IDX_2C('l','i'),        "Lihtenstajn",                      0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberija",                         0,0,0 },
+{ IDX_2C('l','s'),        "Lesoto",                           0,0,0 },
+{ IDX_2C('l','t'),        "Litva",                            0,0,0 },
+{ IDX_2C('l','u'),        "Luksemburg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvija",                          0,0,0 },
+{ IDX_2C('l','y'),        "Libija",                           0,0,0 },
+{ IDX_2C('m','a'),        "Maroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall otoci",                   0,0,0 },
+{ IDX_2C('m','k'),        "Makedonija",                       0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolija",                        0,0,0 },
+{ IDX_2C('m','o'),        "Makao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Sjeverni Marijanski otoci",        0,0,0 },
+{ IDX_2C('m','q'),        "Martinik",                         0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanija",                      0,0,0 },
+{ IDX_2C('m','s'),        "Monserat",                         0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauricij",                         0,0,0 },
+{ IDX_2C('m','v'),        "Maldivi",                          0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Meksiko",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malezija",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambija",                        0,0,0 },
+{ IDX_2C('n','a'),        "Namibija",                         0,0,0 },
+{ IDX_2C('n','c'),        "Nova Kaledonija",                  0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk otok",                     0,0,0 },
+{ IDX_2C('n','g'),        "Nigerija",                         0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragva",                        0,0,0 },
+{ IDX_2C('n','l'),        "Nizozemska",                       0,0,0 },
+{ IDX_2C('n','o'),        "Norveska",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Novi Zeland",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Francuska Polinezija",             0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nova Gvineja",               0,0,0 },
+{ IDX_2C('p','h'),        "Filipini",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poljska",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre i Miquelon",            0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Portoriko",                        0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paragvaj",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumunjska",                        0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Ruska federacija",                 0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudijska Arabija",                0,0,0 },
+{ IDX_2C('s','b'),        "Solomonski otoci",                 0,0,0 },
+{ IDX_2C('s','c'),        "Sejseli",                          0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Svedska",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sveta Helena",                     0,0,0 },
+{ IDX_2C('s','i'),        "Slovenija",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard i Jan Mayen otoci",       0,0,0 },
+{ IDX_2C('s','k'),        "Slovacka republika",               0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalija",                         0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome i Principe",              0,0,0 },
+{ IDX_2C('s','u'),        "SSSR (bivsi)",                     0,0,0 },
+{ IDX_2C('s','v'),        "Salvador",                         0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Svazilend",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks i Caicos otoci",             0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Francuski juzni teritoriji",       0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tajland",                          0,0,0 },
+{ IDX_2C('t','j'),        "Tadjikistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunizija",                         0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Istocni Timor",                    0,0,0 },
+{ IDX_2C('t','r'),        "Turska",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad i Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Tajvan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzanija",                        0,0,0 },
+{ IDX_2C('u','a'),        "Ukrajina",                         0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Ujedinjeno kraljevstvo (UK)",      0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying otoci",          0,0,0 },
+{ IDX_2C('u','s'),        "Sjedinjene americke drzave",       0,0,0 },
+{ IDX_2C('u','y'),        "Urugvaj",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent i Grenadines",       0,0,0 },
+{ IDX_2C('v','e'),        "Venecuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Djevicanski otoci (British)",      0,0,0 },
+{ IDX_2C('v','i'),        "Djevicanski otoci (U.S.)",         0,0,0 },
+{ IDX_2C('v','n'),        "Vijetnam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis i Futuna otoci",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslavija",                      0,0,0 },
+{ IDX_2C('z','a'),        "Juzna Afrika",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambija",                          0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabve",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.czech b/lang/webalizer_lang.czech
new file mode 100644 (file)
index 0000000..647c057
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+   webalizer_lang.czech
+
+   Webalizer V2.0x Language Support file for Czech.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   15-Oct-1998 Translation by Jiri T. Pelech (pes@inway.cz)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   07-Jun-2000 translation added words (Jindrich.Fucik@sh.cvut.cz)
+   28-Mar-2002 Fixes/corrections by Pavel Kolesnikov (k@les.cz)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+   30-Mar-2009 translations/fixes by Vitezslav Samel (vita@samel.cz)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Czech";
+char *langcode  = "cs";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "zaznamu";
+char *msg_addresses="adres";
+char *msg_ignored = "ignorovano";
+char *msg_bad     = "chybnych";
+char *msg_in      = "za";
+char *msg_seconds = "vterin";
+
+/* progress and setup error messages */
+char *msg_log_err = "Chyba: Nemohu otevrit log soubor";
+char *msg_log_use = "Pouzivam log soubor";
+char *msg_dir_err = "Chyba: Nemohu prejit do adresare";
+char *msg_dir_use = "Vytvarim vystup v";
+char *msg_cur_dir = "aktualnim adresari";
+char *msg_hostname= "Jmeno pocitace pro sestavy je";
+char *msg_ign_hist= "Ignoruji predchozi historii...";
+char *msg_no_hist = "Nemohu najit soubor historie...";
+char *msg_get_hist= "Ctu soubor historie...";
+char *msg_put_hist= "Ukladam soubor historie...";
+char *msg_hist_err= "Chyba: Nemohu zapsat soubor historie";
+char *msg_bad_hist= "Chyba: Ignoruji chybny zaznam v historii";
+char *msg_bad_conf= "Chyba: Nemohu otevrit konfiguracni soubor";
+char *msg_bad_key = "Pozor: Neplatne klicove slovo";
+char *msg_bad_date= "Chyba: Preskakuji zaznam (spatne datum)";
+char *msg_ign_nscp= "Preskakuji hlavickovy zaznam z Netscape";
+char *msg_bad_rec = "Preskakuji spatny zaznam";
+char *msg_no_vrec = "Nenalezeny platne zaznamy!";
+char *msg_gen_rpt = "Vytvarim sestavu pro";
+char *msg_gen_sum = "Vytvarim sumarni sestavu";
+char *msg_get_data= "Ctu udaje z minuleho zpracovani...";
+char *msg_put_data= "Ukladam udaje aktualniho zpracovani...";
+char *msg_no_data = "Nemohu najit udaje z minuleho zpracovani...";
+/*char *msg_bad_data= "Neplatny datovy zaznam"; */
+char *msg_bad_data= "Chyba: Nemohu obnovit data aktualniho zpracovani";
+char *msg_data_err= "Chyba: Nemohu ulozit udaje aktualniho zpracovani";
+char *msg_dup_data= "Pozor: Nalezeny pravdepodobne duplicitni udaje";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nejsou specifikovany zadne cache soubory, koncim...";
+char *msg_dns_nodb= "Chyba: Nemohu otevrit soubory DNS cache";
+char *msg_dns_nolk= "Chyba: Nemohu zamknout soubory DNS cache";
+char *msg_dns_usec= "Pouzivam soubory DNS cache";
+char *msg_dns_rslv= "DNS Kontrola";
+char *msg_dns_none= "Neni co zpracovat";
+char *msg_dns_abrt= "Neni podpora pro DNS, koncim...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Nemohu otevrit soubor";
+char *msg_geo_use = "Pouzivam";
+char *msg_geo_nolu= "vyhledavani vypnuto";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nemohu alokovat dost pameti, Nej mista jsou nefunkcni!";
+char *msg_nomem_tr= "Nemohu alokovat dost pameti, Nej odkazovace jsou nefunkcni!";
+char *msg_nomem_tu= "Nemohu alokovat dost pameti, Nej URL jsou nefunkcni!";
+char *msg_nomem_tc= "Nemohu alokovat dost pameti, Nej zeme jsou nefunkcni!";
+char *msg_nomem_ta= "Nemohu alokovat dost pameti, Nej prohlizece jsou nefunkcni!";
+char *msg_nomem_tsr="Nemohu alokovat dost pameti, Nej hledane retezce jsou nefunkcni!";
+char *msg_nomem_ti= "Nemohu alokovat dost pameti, Nej uzivatele jsou nefunkcni!";
+char *msg_nomem_dh= "Chyba doplneni bloku pocitace (denni), preskakuji";
+char *msg_nomem_mh= "Chyba doplneni bloku pocitace (mesicni), preskakuji";
+char *msg_nomem_u = "Chyba doplneni bloku URL, preskakuji";
+char *msg_nomem_a = "Chyba doplneni bloku prohlizece, preskakuji";
+char *msg_nomem_r = "Chyba doplneni bloku odkazovace, preskakuji";
+char *msg_nomem_sc= "Chyba doplneni hledanych retezcu, preskakuji";
+char *msg_nomem_i = "Chyba doplneni uzivatelu, preskakuji";
+
+/* log record errors */
+char *msg_big_rec = "Chyba: Preskakuji prilis dlouhy zaznam v logu";
+char *msg_big_host= "Pozor: Orezavam prilis dlouhe jmeno pocitace";
+char *msg_big_date= "Pozor: Orezavam prilis dlouhe pole datumu";
+char *msg_big_req = "Pozor: Orezavam prilis dlouhe pole zadosti";
+char *msg_big_ref = "Pozor: Orezavam prilis dlouhe pole odkazovace";
+char *msg_big_user= "Pozor: Orezavam prilis dlouhe jmeno uzivatele";
+char *msg_big_one = "Pozor: Retezec prekrocil velikost ukladaciho mista";
+
+/* misc errors */
+char *msg_no_open = "Chyba: Nemohu otevrit soubor";
+
+/* Help display... */
+char *h_usage1 = "Pouzivani";
+char *h_usage2 = "[volby] [log soubor]";
+char *h_msg[]= {
+         "-h        = vypis tento help"                      ,
+         "-V        = vypis informaci o verzi"               ,
+         "-v        = bud upovidany"                         ,
+         "-d        = vypis dalsi ladici informace"          ,
+         "-F type   = typ logu.  type= (clf | ftp | squid | w3c)",
+         "-f        = chyby v prekladu stranek"              ,
+         "-i        = ignoruj soubor historie"               ,
+         "-p        = zapamatuj stav (inkrementalne)"        ,
+         "-b        = ignoruj stav (inkrementalne)"          ,
+         "-q        = potlac informativni zpravy"            ,
+         "-Q        = potlac VSECHNY zpravy"                 ,
+         "-Y        = potlac graf statu"                     ,
+         "-G        = potlac hodinovy graf"                  ,
+         "-H        = potlac hodinove statistiky"            ,
+         "-L        = potlac barevne kody v legendach grafu" ,
+         "-l poc    = pouzij 'num' radek v podkladu grafu"   ,
+         "-m poc    = cas pro navstevu (seconds)"            ,
+         "-T        = vypis casove informace"                ,
+         "-c file   = pouzij konfig. soubor 'file'"          ,
+         "-n name   = pouzij jmeno pocitace"                 ,
+         "-o adr    = vystupni adresar"                      ,
+         "-t name   = nazev sestavy 'name'"                  ,
+         "-a name   = skryj prohlizec 'name'"                ,
+         "-r name   = skryj odkazovac 'name'"                ,
+         "-s name   = skryj misto 'name'"                    ,
+         "-u name   = skryj URL 'name'"                      ,
+         "-x name   = pouzij priponu souboru 'name'"         ,
+         "-O name   = vynechej stranku 'name'"               ,
+         "-P name   = stranky maji priponu 'name'"           ,
+         "-I name   = nazev Index(u) 'name'"                 ,
+         "-K poc    = zobraz 'poc' mesicu v prehledu"        ,
+         "-k poc    = zobraz 'poc' mesicu v prehledovem grafu",
+         "-A poc    = zobraz 'poc' Nej prohlizecu"           ,
+         "-C poc    = zobraz 'poc' Nej zemi"                 ,
+         "-R poc    = zobraz 'poc' Nej odkazovacu"           ,
+         "-S poc    = zobraz 'poc' Nej mist"                 ,
+         "-U poc    = zobraz 'poc' Nej URL"                  ,
+         "-e poc    = zobraz 'poc' vstupnich stranek"        ,
+         "-E poc    = zobraz 'poc' odchozich stranek"        ,
+         "-g poc    = seskup domeny do 'poc' urovni"         ,
+         "-X        = skryt jednotlive site"                 ,
+         "-z dir    = vlajky zemi jsou v adresari 'dir'"     ,
+#ifdef USE_DNS
+         "-D name   = pouzij DNS Cache 'name'"               ,
+         "-N poc    = pocet DNS procesu (0=zakazat)"         ,
+         "-j        = pouzij vestavene vyhledavani v GeoDB"  ,
+         "-J name   = pouzij GeoDB databazi 'name'"          ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = pouzij vyhledavani pomoci GeoIP"       ,
+         "-W name   = pouzij GeoIP databazi 'name'"          ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Období statistiky";
+char *msg_hhdr_gt = "Generováno";
+
+/* main index strings */
+char *msg_main_us = "Statistiky pøístupù pro";
+/* char *msg_main_per= "Posledních 12 mìsícù"; */
+char *msg_main_per= "Mìsíèní pøehled";
+char *msg_main_sum= "Mìsíèní pøehled";
+char *msg_main_da = "Denní prùmìr";
+char *msg_main_mt = "Mìsíèní souèty";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Denní vyu¾ití za";
+char *msg_hmth_hu = "Hodinové vyu¾ití za";
+
+/* table header strings */
+char *msg_h_by    = "podle";
+char *msg_h_avg   = "Prùm";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Celkem";
+char *msg_h_totals= "Celkem";
+char *msg_h_day   = "Den";
+char *msg_h_mth   = "Mìsíc";
+char *msg_h_hour  = "Hodina";
+char *msg_h_hits  = "Pøístupù";
+char *msg_h_pages = "Stránek";
+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_hname = "Poèítaè";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Prohlí¾eè";
+char *msg_h_ref   = "Odkazovaè";
+char *msg_h_ctry  = "Zemì";
+char *msg_h_search= "Hledání";
+char *msg_h_uname = "U¾ivatel";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Denní statistiky";
+char *msg_hlnk_hs = "Hodinové statistiky";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Místa";
+char *msg_hlnk_a  = "Prohlí¾eèe";
+char *msg_hlnk_c  = "Zemì";
+char *msg_hlnk_r  = "Odkazovaèe";
+char *msg_hlnk_en = "Vstupy";
+char *msg_hlnk_ex = "Výstupy";
+char *msg_hlnk_sr = "Hledání";
+char *msg_hlnk_i  = "U¾ivatelé";
+
+/* monthly total table */
+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_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èù";
+char *msg_mtot_uu = "Celkem jedineèných URL";
+char *msg_mtot_ui = "Celkem jedineèných u¾ivatelù";
+char *msg_mtot_mhd= "Objektù za den";
+char *msg_mtot_mhh= "Objektù za hodinu";
+char *msg_mtot_mfd= "Souborù za den";
+char *msg_mtot_mpd= "Stránek za den";
+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_rc = "Náv¹tìvy podle kódu odpovìdi";
+
+/* daily total table */
+char *msg_dtot_ds = "Denní statistiky za";
+
+/* hourly total table */
+char *msg_htot_hs = "Hodinové statistiky za";
+
+/* country pie chart */
+char *msg_ctry_use= "Vyu¾ití podle zemì";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Nej";
+char *msg_top_of  = "z";
+char *msg_top_s   = "míst celkem";
+char *msg_top_u   = "URL celkem";
+char *msg_top_r   = "odkazovaèù celkem";
+char *msg_top_a   = "prohlí¾eèù celkem";
+char *msg_top_c   = "zemí celkem";
+char *msg_top_en  = "vstupních stránek celkem";
+char *msg_top_ex  = "výstupních stránek celkem";
+char *msg_top_sr  = "hledaných øetìzcù celkem";
+char *msg_top_i   = "u¾ivatelù celkem";
+char *msg_v_sites = "zobrazit v¹echny sítì";
+char *msg_v_urls  = "zobrazit v¹echny URL";
+char *msg_v_refs  = "zobrazit v¹echny referery";
+char *msg_v_agents= "zobrazit v¹echny u¾ivatelské prohlí¾eèe";
+char *msg_v_search= "zobrazit v¹echny hledané stránky";
+char *msg_v_users = "zobrazit v¹echna u¾ivatelská jména";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Led", "Úno", "Bøe",
+                    "Dub", "Kvì", "Èer",
+                    "Èvc", "Srp", "Záø",
+                    "Øíj", "Lis", "Pro"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "leden",   "únor",   "bøezen",   "duben",
+                    "kvìten",  "èerven", "èervenec", "srpen",
+                    "záøí",    "øíjen",  "listopad", "prosinec"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Nedefinovaný kód odpovìdi",                 0 },
+         { "Kód 100 - Pokraèovat",                      0 },
+         { "Kód 101 - Pøepínání protokolù",             0 },
+         { "Kód 200 - OK",                              0 },
+         { "Kód 201 - Vytvoøeno",                       0 },
+         { "Kód 202 - Pøijato",                         0 },
+         { "Kód 203 - Neautoritativní informace",       0 },
+         { "Kód 204 - ®ádný obsah",                     0 },
+         { "Kód 205 - Obnovit obsah",                   0 },
+         { "Kód 206 - Èásteèný obsah",                  0 },
+         { "Kód 300 - Vícenásobné volby",               0 },
+         { "Kód 301 - Pøesunuto trvale",                0 },
+         { "Kód 302 - Pøítomno",                        0 },
+         { "Kód 303 - Viz dal¹í",                       0 },
+         { "Kód 304 - Nezmìnìno",                       0 },
+         { "Kód 305 - Pou¾ij proxy",                    0 },
+         { "Kód 307 - Pøesunuto doèasnì",               0 },
+         { "Kód 400 - ©patný po¾adavek",                0 },
+         { "Kód 401 - Neautorizován",                   0 },
+         { "Kód 402 - Vy¾adována platba",               0 },
+         { "Kód 403 - Zakázáno",                        0 },
+         { "Kód 404 - Nenalezeno",                      0 },
+         { "Kód 405 - Nepovolená Metoda",               0 },
+         { "Kód 406 - Nepøípustné",                     0 },
+         { "Kód 407 - Vy¾adována autentikace proxy",    0 },
+         { "Kód 408 - Pøekroèen èasový limit",          0 },
+         { "Kód 409 - Konflikt",                        0 },
+         { "Kód 410 - Zru¹eno",                         0 },
+         { "Kód 411 - ®ádost o délku",                  0 },
+         { "Kód 412 - Podmínka nesplnìna",              0 },
+         { "Kód 413 - Po¾adavek je pøíli¹ velký",       0 },
+         { "Kód 414 - URI je pøíli¹ dlouhé",            0 },
+         { "Kód 415 - Nepodporovaný typ média",         0 },
+         { "Kód 416 - Po¾adovaný rozsah neodpovídá",    0 },
+         { "Kód 417 - Oèekávání selhalo",               0 },
+         { "Kód 500 - Intenrní chyba serveru",          0 },
+         { "Kód 501 - Nezavedeno",                      0 },
+         { "Kód 502 - ©patná brána",                    0 },
+         { "Kód 503 - Slu¾ba nedostupná",               0 },
+         { "Kód 504 - Brána neodpovìdìla",              0 },
+         { "Kód 505 - Nepodporovaná verze HTTP",        0 } };
+
+char *msg_title   = "Statistiky pøístupù pro";
+char *msg_h_other = "Jiné";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Nezji¹tìná/neznámá",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Komerèní (com)",                   0,0,0 },
+{ IDX_3C('e','d','u'),    "Akademická (edu)",                 0,0,0 },
+{ IDX_3C('g','o','v'),    "US vládní (gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Mezinárodní (int)",                0,0,0 },
+{ IDX_3C('m','i','l'),    "US vojenská (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Sí» (net)",                        0,0,0 },
+{ IDX_3C('o','r','g'),    "Nezisková organizace (org)",       0,0,0 },
+{ IDX_3C('b','i','z'),    "Obchodní spoleènosti (biz)",       0,0,0 },
+{ IDX_3C('c','a','t'),    "Katalánská komunita (cat)",        0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Globální adresáø kontaktù (tel)",  0,0,0 },
+{ IDX_4C('a','e','r','o'),"Letecký prùmysl (aero)",           0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asijsko/pacifická komunita (asia)",0,0,0 },
+{ IDX_4C('c','o','o','p'),"Dru¾stva (coop)",                  0,0,0 },
+{ IDX_4C('i','n','f','o'),"Obecné TLD (info)",                0,0,0 },
+{ IDX_4C('j','o','b','s'),"Lidské zdroje (jobs)",             0,0,0 },
+{ IDX_4C('m','o','b','i'),"Obecné mobilní TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Osobní (name)",                    0,0,0 },
+{ IDX_4C('a','r','p','a'),"Pùvodní Arpanet (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"NATO (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Muzea (museum)",          0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Cestovní ruch (travel)",  0,0,0 },
+{ IDX_2C('a','c'),        "Ostrov Ascension",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Spojené arabské emiráty",          0,0,0 },
+{ IDX_2C('a','f'),        "Afghánistán",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua a Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albánie",                          0,0,0 },
+{ IDX_2C('a','m'),        "Arménie",                          0,0,0 },
+{ IDX_2C('a','n'),        "Nizozemské Antily",                0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktida",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Americká Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Rakousko",                         0,0,0 },
+{ IDX_2C('a','u'),        "Austrálie",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Alandy",                           0,0,0 },
+{ IDX_2C('a','z'),        "Azerbajd¾án",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosna a Hercegovina",              0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladé¹",                        0,0,0 },
+{ IDX_2C('b','e'),        "Belgie",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulharsko",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahrajn",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Svatý Bartolomìj",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermudy",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunej",                           0,0,0 },
+{ IDX_2C('b','o'),        "Bolívie",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazílie",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamy",                           0,0,0 },
+{ IDX_2C('b','t'),        "Bhùtán",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bìlorusko",                        0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Kokosové (Keelingovy) ostrovy",    0,0,0 },
+{ IDX_2C('c','d'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','f'),        "Støedoafrická republika",          0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "©výcarsko",                        0,0,0 },
+{ IDX_2C('c','i'),        "Pobøe¾í slonoviny",                0,0,0 },
+{ IDX_2C('c','k'),        "Cookovy ostrovy",                  0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Èína",                             0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbie",                         0,0,0 },
+{ IDX_2C('c','r'),        "Kostarika",                        0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Vánoèní ostrovy",                  0,0,0 },
+{ IDX_2C('c','y'),        "Kypr",                             0,0,0 },
+{ IDX_2C('c','z'),        "Èeská republika",                  0,0,0 },
+{ IDX_2C('d','e'),        "Nìmecko",                          0,0,0 },
+{ IDX_2C('d','j'),        "D¾ibuti",                          0,0,0 },
+{ IDX_2C('d','k'),        "Dánsko",                           0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikánská republika",           0,0,0 },
+{ IDX_2C('d','z'),        "Al¾írsko",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ekvádor",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonsko",                         0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Západní Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "©panìlsko",                        0,0,0 },
+{ IDX_2C('e','t'),        "Etiopie",                          0,0,0 },
+{ IDX_2C('e','u'),        "Evropská unie",                    0,0,0 },
+{ IDX_2C('f','i'),        "Finsko",                           0,0,0 },
+{ IDX_2C('f','j'),        "Fid¾i",                            0,0,0 },
+{ IDX_2C('f','k'),        "Falklandské ostrovy (Malvíny)",    0,0,0 },
+{ IDX_2C('f','m'),        "Mikronézie",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faerské ostrovy",                  0,0,0 },
+{ IDX_2C('f','r'),        "Francie",                          0,0,0 },
+{ IDX_2C('g','a'),        "Gabun",                            0,0,0 },
+{ IDX_2C('g','b'),        "Velká Británie (GB)",              0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Gruzie",                           0,0,0 },
+{ IDX_2C('g','f'),        "Francouzská Guajana",              0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grónsko",                          0,0,0 },
+{ IDX_2C('g','m'),        "Gambie",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Rovníková Guinea",                 0,0,0 },
+{ IDX_2C('g','r'),        "Øecko",                            0,0,0 },
+{ IDX_2C('g','s'),        "Ji¾ní Georgia a Ji¾ní Sandwichovy ostrovy", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hongkong",                         0,0,0 },
+{ IDX_2C('h','m'),        "Heardovy a McDonaldovy ostrovy",   0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Chorvatsko",                       0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Maïarsko",                         0,0,0 },
+{ IDX_2C('i','d'),        "Indonésie",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irsko",                            0,0,0 },
+{ IDX_2C('i','l'),        "Izrael",                           0,0,0 },
+{ IDX_2C('i','m'),        "Ostrov Man",                       0,0,0 },
+{ IDX_2C('i','n'),        "Indie",                            0,0,0 },
+{ IDX_2C('i','o'),        "Britské indickooceánské území",    0,0,0 },
+{ IDX_2C('i','q'),        "Irák",                             0,0,0 },
+{ IDX_2C('i','r'),        "Írán",                             0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Itálie",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamajka",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordánsko",                        0,0,0 },
+{ IDX_2C('j','p'),        "Japonsko",                         0,0,0 },
+{ IDX_2C('k','e'),        "Keòa",                             0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstán",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kambod¾a",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Komory",                           0,0,0 },
+{ IDX_2C('k','n'),        "Svatý Kry¹tof a Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Severní Korea",                    0,0,0 },
+{ IDX_2C('k','r'),        "Ji¾ní Korea",                      0,0,0 },
+{ IDX_2C('k','w'),        "Kuvajt",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kajmanské ostrovy",                0,0,0 },
+{ IDX_2C('k','z'),        "Kazachstán",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Svatá Lucie",                      0,0,0 },
+{ IDX_2C('l','i'),        "Lichten¹tejnsko",                  0,0,0 },
+{ IDX_2C('l','k'),        "Srí Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Libérie",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litva",                            0,0,0 },
+{ IDX_2C('l','u'),        "Lucembursko",                      0,0,0 },
+{ IDX_2C('l','v'),        "Loty¹sko",                         0,0,0 },
+{ IDX_2C('l','y'),        "Libye",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldavsko",                        0,0,0 },
+{ IDX_2C('m','e'),        "Èerná hora",                       0,0,0 },
+{ IDX_2C('m','f'),        "Svatý Martin (francouzská èást)",  0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshallovy ostrovy",              0,0,0 },
+{ IDX_2C('m','k'),        "Makedonie",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolsko",                        0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Severní Mariany",                  0,0,0 },
+{ IDX_2C('m','q'),        "Martinik",                         0,0,0 },
+{ IDX_2C('m','r'),        "Mauretánie",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauricius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maledivy",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexiko",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malajsie",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibie",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nová Kaledonie",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk",                          0,0,0 },
+{ IDX_2C('n','g'),        "Nigérie",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Nizozemsko",                       0,0,0 },
+{ IDX_2C('n','o'),        "Norsko",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepál",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nový Zéland",                      0,0,0 },
+{ IDX_2C('o','m'),        "Omán",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Francouzská Polynésie",            0,0,0 },
+{ IDX_2C('p','g'),        "Papua-Nová Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipíny",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pákistán",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polsko",                           0,0,0 },
+{ IDX_2C('p','m'),        "Saint-Pierre a Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairnovy ostrovy",              0,0,0 },
+{ IDX_2C('p','r'),        "Portoriko",                        0,0,0 },
+{ IDX_2C('p','s'),        "Palestinská autonomie",            0,0,0 },
+{ IDX_2C('p','t'),        "Portugalsko",                      0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Réunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumunsko",                         0,0,0 },
+{ IDX_2C('r','s'),        "Srbsko",                           0,0,0 },
+{ IDX_2C('r','u'),        "Ruská federace",                   0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saúdská Arábie",                   0,0,0 },
+{ IDX_2C('s','b'),        "©alamounovy ostrovy",              0,0,0 },
+{ IDX_2C('s','c'),        "Seychely",                         0,0,0 },
+{ IDX_2C('s','d'),        "Súdán",                            0,0,0 },
+{ IDX_2C('s','e'),        "©védsko",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sv. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovinsko",                        0,0,0 },
+{ IDX_2C('s','j'),        "©picberky a ostrov Jan Mayen",     0,0,0 },
+{ IDX_2C('s','k'),        "Slovenská republika",              0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somálsko",                         0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Svatý Tomá¹ a Princùv ostrov",     0,0,0 },
+{ IDX_2C('s','u'),        "Sovìtský svaz",                    0,0,0 },
+{ IDX_2C('s','v'),        "Salvádor",                         0,0,0 },
+{ IDX_2C('s','y'),        "Sýrie",                            0,0,0 },
+{ IDX_2C('s','z'),        "Svazijsko",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks a Caicos",                   0,0,0 },
+{ IDX_2C('t','d'),        "Èad",                              0,0,0 },
+{ IDX_2C('t','f'),        "Francouzská ji¾ní teritoria-Antarktida", 0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thajsko",                          0,0,0 },
+{ IDX_2C('t','j'),        "Tád¾ikistán",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Východní Timor",                   0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistán",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisko",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tongo",                            0,0,0 },
+{ IDX_2C('t','p'),        "Východní Timor",                   0,0,0 },
+{ IDX_2C('t','r'),        "Turecko",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad a Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzánie",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukrajina",                         0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Velká Británie (UK)",              0,0,0 },
+{ IDX_2C('u','m'),        "Men¹í odlehlé ostrovy USA",        0,0,0 },
+{ IDX_2C('u','s'),        "USA (US)",                         0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistán",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikán",                          0,0,0 },
+{ IDX_2C('v','c'),        "Svatý Vincenc a Grenadiny",        0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Britské Panenské ostrovy",         0,0,0 },
+{ IDX_2C('v','i'),        "Americké Panenské ostrovy",        0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis a Futuna",                  0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslávie",                       0,0,0 },
+{ IDX_2C('z','a'),        "Jihoafrická republika",            0,0,0 },
+{ IDX_2C('z','m'),        "Zambie",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymní proxy",                   0,0,0 },
+{ IDX_2C('a','2'),        "Satelitní poskytovatelé",          0,0,0 },
+{ IDX_2C('o','1'),        "Ostatní",                          0,0,0 },
+{ IDX_2C('a','p'),        "Asijskopacifický region",          0,0,0 },
+{ IDX_3C('l','a','n'),    "Lokální sí» (lan)",                0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.danish b/lang/webalizer_lang.danish
new file mode 100644 (file)
index 0000000..7cbfab9
--- /dev/null
@@ -0,0 +1,632 @@
+/*
+   webalizer_lang.danish
+
+   Webalizer V2.0x Language Support file for Danish.
+   13-Jul-1999 by Michael B. Jenner (mj@kom.auc.dk)
+   13-Nov-1999 Major update by Jonas Koch Bentzen (post@jonaskochbentzen.dk)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Danish";
+char *langcode  = "da";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "poster";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignorerede";
+char *msg_bad     = "fejlagtige";
+char *msg_in      = "på";
+char *msg_seconds = "sekunder";
+
+/* progress and setup error messages */
+char *msg_log_err = "Fejl: kan ikke åbne logfil";
+char *msg_log_use = "Anvender logfil";
+char *msg_dir_err = "Fejl: kan ikke skifte bibliotek til";
+char *msg_dir_use = "Opretter output i biblioteket";
+char *msg_cur_dir = "aktivt bibliotek";
+char *msg_hostname= "Rapporterne ligger på maskinen med værtsnavnet";
+char *msg_ign_hist= "Ignorerer tidligere historie ...";
+char *msg_no_hist = "Historiefilen findes ikke...";
+char *msg_get_hist= "Læser historiefil ...";
+char *msg_put_hist= "Gemmer historie-information ...";
+char *msg_hist_err= "Fejl: Kan ikke skrive til historiefil";
+char *msg_bad_hist= "Fejl: Ignorerer forkert historiepost";
+char *msg_bad_conf= "Fejl: Kan ikke åbne konfigurationsfil";
+char *msg_bad_key = "Advarsel: Forkert nøgleord";
+char *msg_bad_date= "Fejl: Springer over post (forkert dato)";
+char *msg_ign_nscp= "Springer over post med Netscapes hoved";
+char *msg_bad_rec = "Springer over forkert post";
+char *msg_no_vrec = "Fandt ingen korrekte poster!";
+char *msg_gen_rpt = "Genererer rapport for";
+char *msg_gen_sum = "Genererer opsummerende rapport";
+char *msg_get_data= "Læser tidligere kørselsdata..";
+char *msg_put_data= "Gemmer aktive kørselsdata...";
+char *msg_no_data = "Tidligere kørselsdata ikke fundet...";
+char *msg_bad_data= "Fejl: Kan ikke genindlæse kørselsdata";
+char *msg_data_err= "Fejl: Kan ikke gemme aktive kørselsdata";
+char *msg_dup_data= "Advarsel: Mulige dobbelte data fundet";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Kan ikke allokere nok hukommelse, Top Gæster slås fra!";
+char *msg_nomem_tr= "Kan ikke allokere nok hukommelse, Top Referer slås fra!";
+char *msg_nomem_tu= "Kan ikke allokere nok hukommelse, Top URL slås fra!";
+char *msg_nomem_tc= "Kan ikke allokere nok hukommelse, Top Lande slås fra!";
+char *msg_nomem_ta= "Kan ikke allokere nok hukommelse, Top Web browsere slås fra!";
+char *msg_nomem_tsr="Kan ikke allokere nok hukommelse, Top Søgestrenge slåes fra!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Fejl ved tilføjelse af host-node (daglig), skipping";
+char *msg_nomem_mh= "Fejl ved tilføjelse af host-node (månedlig), skipping";
+char *msg_nomem_u = "Fejl ved tilføjelse af URL-node, skipping";
+char *msg_nomem_a = "Fejl ved tilføjelse af Web browsere node, skipping";
+char *msg_nomem_r = "Fejl ved tilføjelse af Referer node, skipping";
+char *msg_nomem_sc= "Fejl ved tilføjelse af Søgestrenge Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Fejl: Springer over streng (for stor log-post)";
+char *msg_big_host= "Advarsel: Afkorter strengen (for stort værtsnavn)";
+char *msg_big_date= "Advarsel: Afkorter strengen (for stort datofelt)";
+char *msg_big_req = "Advarsel: Afkorter strengen (for stort forespørgsel-felt)";
+char *msg_big_ref = "Advarsel: Afkorter strengen (for stort henvisende side-felt)";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Advarsel: Strengen overstiger maksimum";
+
+/* misc errors */
+char *msg_no_open = "Fejl: Kan ikke åbne filen";
+
+/* Help display... */
+char *h_usage1 = "Anvendelse";
+char *h_usage2 = "[parametre] [logfil]";
+char *h_msg[]= {
+         "-h        = udskriv denne hjælpebesked"          ,
+         "-V        = udskriv versionsoplysninger"         ,
+         "-v        = be verbose"                          ,
+         "-d        = udskriv ekstra fejlsøgningsinformation",
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sekvensfejl"                    ,
+         "-i        = ignorer historiefil"                 ,
+         "-p        = bevar tilstand (inkremental)"        ,
+         "-b        = ignorer tilstand (inkremental)"      , 
+         "-q        = undertryk informationsrelaterede beskeder",
+         "-Q        = undertryk _ALLE_ beskeder"           ,
+         "-Y        = undertryk landegrafer"               ,
+         "-G        = undertryk timegrafer"                ,
+         "-H        = undertryk timestatistikker"          ,
+         "-L        = undertryk farvekodede grafertekst"   ,
+         "-l num    = brug numeriske baggrundslinier på graf",
+         "-m num    = Undersøg timeout-værdi (seconds)"    ,
+         "-T        = udskriv timing-information"          ,
+         "-c file   = brug konfigurationsfilen 'file'"     ,
+         "-n name   = værtsnavn som anvendes"              ,
+         "-o dir    = Output bibliotek som anvendes"       ,
+         "-t name   = rapport titel 'name'"                ,
+         "-a name   = gem browser 'name'"                  ,
+         "-r name   = gem henvisende side 'name'"          ,
+         "-s name   = gem gæste 'name'"                    ,
+         "-u name   = gem URL 'name'"                      ,
+         "-x name   = Brug filefternavn 'name'"            ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Side type-efternavn 'name'"          ,
+         "-I name   = Indeks alias 'name'"                 ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Vis antal top browsere"              ,
+         "-C num    = Vis antal top lande"                 ,
+         "-R num    = Vis antal top henvisende sider"      ,
+         "-S num    = Vis antal top gæster"                ,
+         "-U num    = Vis antal top URL"                   ,
+         "-e num    = Vis antal top indgangsadresser"      ,
+         "-E num    = Vis antal top udgangsadresser"       ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoIP lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Opsummeringsperiode";
+char *msg_hhdr_gt = "Sidst opdateret";
+
+/* main index strings */
+char *msg_main_us = "Tilgang til";
+/* char *msg_main_per= "De sidste 12 måneder"; */
+char *msg_main_per= "Opsummering / måned";
+char *msg_main_sum= "Opsummering / måned";
+char *msg_main_da = "Dagligt gennemsnit";
+char *msg_main_mt = "Sammenlagt pr. måned";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daglig tilgang -";
+char *msg_hmth_hu = "Timefordelt tilgang -";
+
+/* table header strings */
+char *msg_h_by    = "-";
+char *msg_h_avg   = "Gn.snit";
+char *msg_h_max   = "Maks";
+char *msg_h_total = "";
+char *msg_h_totals= "";
+char *msg_h_day   = "Dag";
+char *msg_h_mth   = "Måned";
+char *msg_h_hour  = "Time";
+char *msg_h_hits  = "Forespørgsler";
+char *msg_h_pages = "Sider";
+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_hname = "Navn/IP-adresse";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Browser";
+char *msg_h_ref   = "Henvisende side";
+char *msg_h_ctry  = "Land";
+char *msg_h_search= "Søgestreng";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Daglig statistik";
+char *msg_hlnk_hs = "Timestatistik";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Gæster";
+char *msg_hlnk_a  = "Browsere";
+char *msg_hlnk_c  = "Lande";
+char *msg_hlnk_r  = "Henvisende sider";
+char *msg_hlnk_en = "Indgangsadresse";
+char *msg_hlnk_ex = "Udgangsadresse";
+char *msg_hlnk_sr = "Søg";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+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_us = "Unikke gæster";
+char *msg_mtot_ur = "Unikke henvisende sider";
+char *msg_mtot_ua = "Unikke browsere";
+char *msg_mtot_uu = "Unikke adresser";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Forespørgsler pr. dag";
+char *msg_mtot_mhh= "Forespørgsler pr. time";
+char *msg_mtot_mfd= "Filer pr. dag";
+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_rc = "Forespørgsler fordelt på svarkoder";
+
+/* daily total table */
+char *msg_dtot_ds = "Daglig statistik for";
+
+/* hourly total table */
+char *msg_htot_hs = "Timestatistik for";
+
+/* country pie chart */
+char *msg_ctry_use= "Forespørgsler fordelt på lande for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total by something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "af";
+char *msg_top_s   = "gæster";
+char *msg_top_u   = "adresser";
+char *msg_top_r   = "henvisende sider";
+char *msg_top_a   = "browsere";
+char *msg_top_c   = "Lande";
+char *msg_top_en  = "indgangsadresser";
+char *msg_top_ex  = "udgangsadresser";
+char *msg_top_sr  = "søgestrenge";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maj", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januar",  "Februar", "Marts",   "April",
+                    "Maj",      "Juni",     "Juli",    "August",
+                    "September","Oktober",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Uidentificeret svar Kode",                    0 },
+         { "Kode 100 - Fortsæt",                        0 },
+         { "Kode 101 - Skift protokoller",             0 },
+         { "Kode 200 - OK",                              0 },
+         { "Kode 201 - Oprettet",                         0 },
+         { "Kode 202 - Accepteret",                        0 },
+         { "Kode 203 - Ikke-autoritativ information",   0 },
+         { "Kode 204 - Intet indhold",                      0 },
+         { "Kode 205 - Nulstil indhold",                   0 },
+         { "Kode 206 - Delvist indhold",                 0 },
+         { "Kode 300 - Dobbelte data",                0 },
+         { "Kode 301 - Flyttet permanent",               0 },
+         { "Kode 302 - Fundet",                           0 },
+         { "Kode 303 - Se andet",                       0 },
+         { "Kode 304 - Ikke ændret",                    0 },
+         { "Kode 305 - Brug proxy",                       0 },
+         { "Kode 307 - Flyttet midlertidigt",               0 },
+         { "Kode 400 - Forkert forespørgsel",                     0 },
+         { "Kode 401 - Ingen adgang",                    0 },
+         { "Kode 402 - Betaling påkrævet",                0 },
+         { "Kode 403 - Forbudt",                       0 },
+         { "Kode 404 - Findes ikke",                       0 },
+         { "Kode 405 - Metoden ikke tilladt",              0 },
+         { "Kode 406 - Ikke acceptabelt",                  0 },
+         { "Kode 407 - Proxygodkendelse påkrævet",   0 },
+         { "Kode 408 - Tiden er udløbet for forespørgslen",                 0 },
+         { "Kode 409 - Konflikt",                        0 },
+         { "Kode 410 - Forsvundet",                            0 },
+         { "Kode 411 - Længde påkrævet",                 0 },
+         { "Kode 412 - Forudsætning ikke opfyldt",             0 },
+         { "Kode 413 - Forespørgselsenhed for stor",        0 },
+         { "Kode 414 - Adresse for lang",            0 },
+         { "Kode 415 - Medietypen understøttes ikke",          0 },
+         { "Kode 416 - Forespurgt område ikke tilfredsstillende", 0 },
+         { "Kode 417 - Det forventede skete ikke",              0 },
+         { "Kode 500 - Intern serverfejl",           0 },
+         { "Kode 501 - Ikke indbygget",                 0 },
+         { "Kode 502 - Forkert gateway",                     0 },
+         { "Kode 503 - Tjenesten ikke tilgængelig",             0 },
+         { "Kode 504 - Tiden er udløbet for gateway'en",                 0 },
+         { "Kode 505 - HTTP-versionen understøttes ikke",      0 } };
+
+char *msg_title   = "Webstatistik for";
+char *msg_h_other = "Andre";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Ukendt",                           0,0,0 },
+{ IDX_3C('c','o','m'),    "Kommerciel (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Uddannelsesinstitution (edu)",     0,0,0 },
+{ IDX_3C('g','o','v'),    "USA (regeringen)",                 0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "USA (militæret)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "Netværk (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Almennyttig organisation",         0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Gammel Stil Arpanet (arpa)",       0,0,0 },
+{ IDX_4C('n','a','t','o'),"NATO-felt (nato)",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "De Forenede Arabiske Emirater",    0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua og Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albanien",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armenien",                         0,0,0 },
+{ IDX_2C('a','n'),        "De Hollandske Antiller",           0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktis",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Amerikansk Samoa",                 0,0,0 },
+{ IDX_2C('a','t'),        "Østrig",                           0,0,0 },
+{ IDX_2C('a','u'),        "Australien",                       0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnien og Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgien",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgarien",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasilien",                        0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling)-øerne",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Den Centralafrikanske Republik",   0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Schweitz",                         0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Elfenbenskysten)",  0,0,0 },
+{ IDX_2C('c','k'),        "Cook-øerne",                       0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "Kina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Kap Verde",                        0,0,0 },
+{ IDX_2C('c','x'),        "Juleøerne",                        0,0,0 },
+{ IDX_2C('c','y'),        "Cypern",                           0,0,0 },
+{ IDX_2C('c','z'),        "Tjekkiet",                         0,0,0 },
+{ IDX_2C('d','e'),        "Tyskland",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Den Dominikanske Republik",        0,0,0 },
+{ IDX_2C('d','z'),        "Algeriet",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estland",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypten",                          0,0,0 },
+{ IDX_2C('e','h'),        "Vest-Sahara",                      0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spanien",                          0,0,0 },
+{ IDX_2C('e','t'),        "Etiopien",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falklandsøerne (Malvinas)",        0,0,0 },
+{ IDX_2C('f','m'),        "Mikronesien",                      0,0,0 },
+{ IDX_2C('f','o'),        "Færøerne",                         0,0,0 },
+{ IDX_2C('f','r'),        "Frankrig",                         0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Storbritannien (UK)",              0,0,0 },
+{ IDX_2C('g','d'),        "Granada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgien",                         0,0,0 },
+{ IDX_2C('g','f'),        "Fransk Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grønland",                         0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Grækenland",                       0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia- og S. Sandwich-øerne", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard- og McDonald-øerne",         0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroatien",                         0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungarn",                           0,0,0 },
+{ IDX_2C('i','d'),        "Indonesien",                       0,0,0 },
+{ IDX_2C('i','e'),        "Irland",                           0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indien",                           0,0,0 },
+{ IDX_2C('i','o'),        "Det britiske indiske ocean-territorium", 0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Italien",                          0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts og Nevis",             0,0,0 },
+{ IDX_2C('k','p'),        "Korea (Nord-)",                    0,0,0 },
+{ IDX_2C('k','r'),        "Korea (Syd-)",                     0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman-øerne",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litauen",                          0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libyen",                           0,0,0 },
+{ IDX_2C('m','a'),        "Marokko",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall-øerne",                   0,0,0 },
+{ IDX_2C('m','k'),        "Makedonien",                       0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolien",                        0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Nord-Mariana-øerne",               0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanien",                      0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldiverne",                       0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysien",                        0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Ny Kaledonien",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holland",                          0,0,0 },
+{ IDX_2C('n','o'),        "Norge",                            0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Fransk Polynesien",                0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Filippinerne",                     0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polen",                            0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre og Miquelon",           0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumænien",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rusland",                          0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabien",                    0,0,0 },
+{ IDX_2C('s','b'),        "Salomon-øerne",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychellerne",                     0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sverige",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenien",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard og Jan Mayen-øerne",      0,0,0 },
+{ IDX_2C('s','k'),        "Slovakiet",                        0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalien",                         0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome og Principe",             0,0,0 },
+{ IDX_2C('s','u'),        "USSR (det tidligere)",             0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrien",                           0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks og Caicos-øerne",            0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "De franske, sydlige territorier",  0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisien",                         0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Øst-Timor",                        0,0,0 },
+{ IDX_2C('t','r'),        "Tyrkiet",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad og Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "England",                          0,0,0 },
+{ IDX_2C('u','m'),        "USA's mindre, ydre øer",           0,0,0 },
+{ IDX_2C('u','s'),        "USA",                              0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikanstaten",                    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent og the Grenadines",  0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Jomfruøerne (de britiske)",        0,0,0 },
+{ IDX_2C('v','i'),        "Jomfruøerne (de amerikanske)",     0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis og Futuna-øerne",           0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslavien",                      0,0,0 },
+{ IDX_2C('z','a'),        "Sydafrika",                        0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.dutch b/lang/webalizer_lang.dutch
new file mode 100644 (file)
index 0000000..cdc0cea
--- /dev/null
@@ -0,0 +1,651 @@
+/*
+   webalizer_lang.dutch
+
+   Webalizer V2.0x Language Support file for Dutch.
+   02-Jun-1998 Translated by J.Q. la Poutre (jlpoutre@inter.nl.net)
+   02-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   03-Jun-1998 Translation Level 1.1 by J.Q. La Poutre
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   15-Jul-1999 Changes in translation by M. Mackenbach (marcom@websource.nl)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   02-May-2000 Translation level 2.0 by Richard Huveneers (richard@hacom.nl)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+   ### Nederlandstalige versie aangepast vanwege de snelle vertaling
+   ### M. Mackenbach (marcom@websource.nl)
+   ### versie 1.2/01
+
+   ### Nederlandse versie (1.00 - 2 juni 1998)
+   ### J.Q. la Poutre' <jlpoutre@inter.nl.net> of <joe@arthouse.nl>
+   ### versie 1.1/01 - 03 jun 1998
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Nederlands";
+char *langcode  = "nl";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="adressen";
+char *msg_ignored = "genegeerd";
+char *msg_bad     = "fout";
+char *msg_in      = "in";
+char *msg_seconds = "seconden";
+
+/* progress and setup error messages */
+char *msg_log_err = "Fout: kan het logbestand niet openen";
+char *msg_log_use = "Gebruik logbestand";
+char *msg_dir_err = "Fout: kan werk-directory niet veranderen naar";
+char *msg_dir_use = "Schrijf gegevens naar";
+char *msg_cur_dir = "werk-directory";
+char *msg_hostname= "De 'Hostname' voor het rapport is";
+char *msg_ign_hist= "Negeer oude history...";
+char *msg_no_hist = "History bestand niet gevonden...";
+char *msg_get_hist= "Lees history bestand...";
+char *msg_put_hist= "Bewaar history informatie...";
+char *msg_hist_err= "Fout: kan history bestand niet schrijven";
+char *msg_bad_hist= "Fout: ongeldig history record (wordt genegeerd)";
+char *msg_bad_conf= "Fout: kan configuratie-bestand niet openen";
+char *msg_bad_key = "Waarschuwing: ongeldig 'keyword'";
+char *msg_bad_date= "Fout: foute datum (record overgeslagen)";
+char *msg_ign_nscp= "Netscape header record (wordt genegeerd)";
+char *msg_bad_rec = "Foutief record (wordt genegeerd)";
+char *msg_no_vrec = "Geen geldige records gevonden!";
+char *msg_gen_rpt = "Genereer rapport voor";
+char *msg_gen_sum = "Genereer samenvattingsrapport";
+char *msg_get_data= "Lees gegevens van eerdere sessie...";
+char *msg_put_data= "Bewaar gegevens huidige sessie...";
+char *msg_no_data = "Gegevens eerdere sessie niet gevonden...";
+/*char *msg_bad_data= "Ongeldig record (gegevenstype)";*/
+char *msg_bad_data= "Fout: kan sessie (gegevens) niet inlezen";
+char *msg_data_err= "Fout: kan sessie (gegevens) niet bewaren";
+char *msg_dup_data= "Waarschuwing: mogelijk dubbele gegevens gevonden";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Geen cache bestand opgegeven, programma wordt afgebroken...";
+char *msg_dns_nodb= "Fout: kan het DNS cache bestand niet openen";
+char *msg_dns_nolk= "Fout: kan het DNS cache bestand niet reserveren";
+char *msg_dns_usec= "Het DNS cache bestand wordt gebruikt";
+char *msg_dns_rslv= "DNS Aanvraag";
+char *msg_dns_none= "Niets te verwerken";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Onvoldoende geheugen beschikbaar, Top hosts overgeslagen!";
+char *msg_nomem_tr= "Onvoldoende geheugen beschikbaar, Top verwijzende pagina's overgeslagen!";
+char *msg_nomem_tu= "Onvoldoende geheugen beschikbaar, Top URL's overgeslagen!";
+char *msg_nomem_tc= "Onvoldoende geheugen beschikbaar, Top landen overgeslagen!";
+char *msg_nomem_ta= "Onvoldoende geheugen beschikbaar, Top browsers overgeslagen!";
+char *msg_nomem_tsr="Onvoldoende geheugen beschikbaar, Top zoekopdrachten overgeslagen!";
+char *msg_nomem_ti= "Onvoldoende geheugen beschikbaar, Top gebruikersnamen overgeslagen!";
+char *msg_nomem_dh= "Fout bij toevoegen van host (dagrapport), overgeslagen!";
+char *msg_nomem_mh= "Fout bij toevoegen van host (maandrapport), overgeslagen!";
+char *msg_nomem_u = "Fout bij toevoegen van URL, overgeslagen!";
+char *msg_nomem_a = "Fout bij toevoegen van browser, overgeslagen!";
+char *msg_nomem_r = "Fout bij toevoegen van verwijzende pagina, overgeslagen!";
+char *msg_nomem_sc= "Fout bij toevoegen van tekst-node, overgeslagen!";
+char *msg_nomem_i = "Fout bij toevoegen van Gebruikersnaam, overgeslagen!";
+
+/* log record errors */
+char *msg_big_rec = "Fout: te groot log-record (overgeslagen)";
+char *msg_big_host= "Waarschuwing: te lange hostnaam: ingekort";
+char *msg_big_date= "Waarschuwing: te lang datum veld: ingekort";
+char *msg_big_req = "Waarschuwing: te lang aanvraag veld: ingekort";
+char *msg_big_ref = "Waarschuwing: te lang veld voor verwijzende pagina: ingekort";
+char *msg_big_user= "Waarschuwing: te lang veld voor gebruikersnaam: ingekort";
+char *msg_big_one = "Waarschuwing: regel past niet in beschikbare geheugenruimte";
+
+/* misc errors */
+char *msg_no_open = "Fout: kan bestand niet openen!";
+
+/* Help display... */
+char *h_usage1 = "Gebruiksaanwijzing";
+char *h_usage2 = "[opties] [log-bestand]";
+char *h_msg[]= {
+         "-h         = Deze helptekst",
+         "-V         = Toon versie-informatie",
+         "-v         = be verbose",
+         "-d         = Debug informatie",
+         "-F type    = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f         = Forceer chronologische volgorde",
+         "-i         = Negeer 'history' bestand",
+         "-p         = Bewaar status (incremental)",
+         "-b         = Negeer status (incremental)",
+         "-q         = Geen informatieve info, wel foutmeldingen",
+         "-Q         = Geen enkele info, ook geen foutmeldingen",
+         "-Y         = Geen land-grafieken",
+         "-G         = Geen uur-grafieken",
+         "-H         = Geen uur-statistieken",
+         "-L         = Geen legenda",
+         "-l num     = Gebruik [num] achtergrondregels in grafiek",
+         "-m num     = Bezoeker-onderbreking waarde (seconds)",
+         "-T         = Geef verwerkingstijd informatie",
+         "-c bestand = Gebruik configuratie 'bestand'",
+         "-n naam    = Gebruik host 'naam'",
+         "-o dir     = Schrijf bestanden naar directory 'dir'",
+         "-t naam    = Rapporttitel 'naam'",
+         "-a naam    = Laat browser 'naam' weg",
+         "-r naam    = Laat verwijzende pagina 'naam' weg",
+         "-s naam    = Laat host 'naam' weg",
+         "-u naam    = Laat URL 'naam' weg",
+         "-x naam    = Gebruik bestands-extensie 'naam'",
+         "-O naam    = Omit page 'naam'"                    ,
+         "-P naam    = Paginatype-extensie 'naam'",
+         "-I naam    = Index alias 'naam'",
+         "-K num     = num months in summary table"         ,
+         "-k num     = num months in summary graph"         ,
+         "-A num     = Toon top 'num' browsers",
+         "-C num     = Toon top 'num' landen",
+         "-R num     = Toon top 'num' verwijzende pagina's",
+         "-S num     = Toon top 'num' hosts",
+         "-U num     = Toon top 'num' URL's",
+         "-e num     = Toon top 'num' eerste pagina's van bezoekers",
+         "-E num     = Toon top 'num' laatste pagina's van bezoekers",
+         "-g num     = Groepeer Domeinen op 'num' niveaus",
+         "-X         = Laat alle individuele hosts weg",
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D naam    = Gebruik DNS Cache bestand 'naam'",
+         "-N num     = Aantal DNS processen (0=uitschakelen)",
+         "-j         = Enable native GeoDB lookups"        ,
+         "-J naam    = Use GeoDB database 'naam'"          ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W naam   = Use GeoIP database 'naam'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Samenvatting periode";
+char *msg_hhdr_gt = "Gegenereerd op";
+
+/* main index strings */
+char *msg_main_us = "Samenvatting -";
+/* char *msg_main_per= "afgelopen 12 maanden"; */
+char *msg_main_per= "Samenvatting per maand";
+char *msg_main_sum= "Samenvatting per maand";
+char *msg_main_da = "Dagelijks gemiddelde";
+char *msg_main_mt = "Totalen per maand";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Dagelijks bezoek -";
+char *msg_hmth_hu = "Bezoek per uur -";
+
+/* table header strings */
+char *msg_h_by    = "gesorteerd op";
+char *msg_h_avg   = "Gem.";
+char *msg_h_max   = "Max.";
+char *msg_h_total = "Totaal";
+char *msg_h_totals= "Totalen";
+char *msg_h_day   = "Dag";
+char *msg_h_mth   = "Maand";
+char *msg_h_hour  = "Uur";
+char *msg_h_hits  = "Hits"; /* "Aanvragen" is te lang en minder duidelijk */
+char *msg_h_pages = "Pagina's";
+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_hname = "Host(naam)";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Browser";
+char *msg_h_ref   = "Verwijzing";
+char *msg_h_ctry  = "Land";
+char *msg_h_search= "Zoekopdracht";
+char *msg_h_uname = "Gebruikersnaam";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Overzicht per dag";
+char *msg_hlnk_hs = "Overzicht per uur";
+char *msg_hlnk_u  = "URL's";
+char *msg_hlnk_s  = "Hosts";
+char *msg_hlnk_a  = "Browsers";
+char *msg_hlnk_c  = "Landen";
+char *msg_hlnk_r  = "Verwijzers";
+char *msg_hlnk_en = "Eerste";
+char *msg_hlnk_ex = "Laatste";
+char *msg_hlnk_sr = "Zoekopdrachten";
+char *msg_hlnk_i  = "Gebruikersnamen";
+
+/* monthly total table */
+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_us = "Totaal verschillende hosts";
+char *msg_mtot_ur = "Totaal verschillende verwijzers";
+char *msg_mtot_ua = "Totaal verschillende browsers";
+char *msg_mtot_uu = "Totaal verschillende URL's";
+char *msg_mtot_ui = "Totaal verschillende gebruikersnamen";
+char *msg_mtot_mhd= "Hits per dag";
+char *msg_mtot_mhh= "Hits per uur";
+char *msg_mtot_mfd= "Bestanden per dag";
+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_rc = "Hits per 'Response Code'";
+
+/* daily total table */
+char *msg_dtot_ds = "Overzicht per dag -";
+
+/* hourly total table */
+char *msg_htot_hs = "Overzicht per uur -";
+
+/* country pie chart */
+char *msg_ctry_use= "Overzicht per land -";
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "van";
+char *msg_top_s   = "hosts";
+char *msg_top_u   = "URL's";
+char *msg_top_r   = "verwijzende pagina's";
+char *msg_top_a   = "browsers";
+char *msg_top_c   = "landen";
+char *msg_top_en  = "eerste pagina's";
+char *msg_top_ex  = "laatste pagina's";
+char *msg_top_sr  = "zoekopdrachten";
+char *msg_top_i   = "gebruikersnamen";
+char *msg_v_sites = "Toon alle hosts";
+char *msg_v_urls  = "Toon alle URL's";
+char *msg_v_refs  = "Toon alle verwijzende pagina's";
+char *msg_v_agents= "Toon alle browsers";
+char *msg_v_search= "Toon alle zoekopdrachten";
+char *msg_v_users = "Toon alle gebruikersnamen";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "jan", "feb", "mar",
+                    "apr", "mei", "jun",
+                    "jul", "aug", "sep",
+                    "okt", "nov", "dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "januari",  "februari", "maart",   "april",
+                    "mei",      "juni",     "juli",    "augustus",
+                    "september","oktober",  "november","december"};
+
+/* response code descriptions... order IS important!      */
+/* NIET vertaald omdat m.i. de Engelse benaming meer
+   bekendheid heeft dan een mogelijk onduidelijke
+   Nederlandse vertaling - Joe, 05 jun 1998 */
+struct response_code response[] =
+       { { "Onbekende 'response code'",                  0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Rapport voor website";
+char *msg_h_other = "Anders";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Numeriek IP/onbekend",             0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercieel (.com)",               0,0,0 },
+{ IDX_3C('e','d','u'),    "Onderwijs/onderzoek (.edu)",       0,0,0 },
+{ IDX_3C('g','o','v'),    "Overheid (.gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Internationaal (.int)",            0,0,0 },
+{ IDX_3C('m','i','l'),    "Militair (.mil)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "'Netwerk' (.net)",                 0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (.org)",                0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet (arpa, oude stijl)",       0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (.nato)",                     0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra (.ad)",                    0,0,0 },
+{ IDX_2C('a','e'),        "Ver. Arab. Emiraten (.ae)",        0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan (.af)",                0,0,0 },
+{ IDX_2C('a','g'),        "Antigua en Barbuda (.ag)",         0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla (.ai)",                   0,0,0 },
+{ IDX_2C('a','l'),        "Albanie (.al)",                    0,0,0 },
+{ IDX_2C('a','m'),        "Armenie (.am)",                    0,0,0 },
+{ IDX_2C('a','n'),        "Nederlandse Antillen (.an)",       0,0,0 },
+{ IDX_2C('a','o'),        "Angola (.ao)",                     0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica (.aq)",                 0,0,0 },
+{ IDX_2C('a','r'),        "Argentinie (.ar)",                 0,0,0 },
+{ IDX_2C('a','s'),        "Amerikaans Samoa (.as)",           0,0,0 },
+{ IDX_2C('a','t'),        "Oostenrijk (.at)",                 0,0,0 },
+{ IDX_2C('a','u'),        "Australie (.au)",                  0,0,0 },
+{ IDX_2C('a','w'),        "Aruba (.aw)",                      0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azarbadzjan (.az)",                0,0,0 },
+{ IDX_2C('b','a'),        "Bosnie / Herzegovina (.ba)",       0,0,0 },
+{ IDX_2C('b','b'),        "Barbados (.bb)",                   0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh (.bd)",                 0,0,0 },
+{ IDX_2C('b','e'),        "Belgie (.be)",                     0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso (.bf)",               0,0,0 },
+{ IDX_2C('b','g'),        "Bulgarije (.bg)",                  0,0,0 },
+{ IDX_2C('b','h'),        "Bahrijn (.bh)",                    0,0,0 },
+{ IDX_2C('b','i'),        "Burundi (.bi)",                    0,0,0 },
+{ IDX_2C('b','j'),        "Benin (.bj)",                      0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda (.bm)",                    0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam (.bn)",          0,0,0 },
+{ IDX_2C('b','o'),        "Bolivie (.bo)",                    0,0,0 },
+{ IDX_2C('b','r'),        "Brazilie (.br)",                   0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas (.bs)",                    0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan (.bt)",                     0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Eiland (.bv)",              0,0,0 },
+{ IDX_2C('b','w'),        "Botswana (.bw)",                   0,0,0 },
+{ IDX_2C('b','y'),        "Belarus (.by)",                    0,0,0 },
+{ IDX_2C('b','z'),        "Belize(.bz)",                      0,0,0 },
+{ IDX_2C('c','a'),        "Canada (.ca)",                     0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Eilanden (.cc)",   0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central Afrikaanse Republiek (.cf)",0,0,0 },
+{ IDX_2C('c','g'),        "Congo (.cg)",                      0,0,0 },
+{ IDX_2C('c','h'),        "Zwitserland (.ch)",                0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivoorkust) (.ci)",  0,0,0 },
+{ IDX_2C('c','k'),        "Cook Eilanden (.ck)",              0,0,0 },
+{ IDX_2C('c','l'),        "Chili (.cl)",                      0,0,0 },
+{ IDX_2C('c','m'),        "Kameroen (.cm)",                   0,0,0 },
+{ IDX_2C('c','n'),        "China (.cn)",                      0,0,0 },
+{ IDX_2C('c','o'),        "Colombia (.co)",                   0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica (.cr)",                 0,0,0 },
+{ IDX_2C('c','u'),        "Cuba (.cu)",                       0,0,0 },
+{ IDX_2C('c','v'),        "Kaapverdie (.cv)",                 0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island (.cx)",           0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus (.cy)",                     0,0,0 },
+{ IDX_2C('c','z'),        "Tsjechische republiek (.cz)",      0,0,0 },
+{ IDX_2C('d','e'),        "Duitsland (.de)",                  0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti (.dj)",                   0,0,0 },
+{ IDX_2C('d','k'),        "Denemarken (.dk)",                 0,0,0 },
+{ IDX_2C('d','m'),        "Dominica (.dm)",                   0,0,0 },
+{ IDX_2C('d','o'),        "Dominikaanse Republiek (.do)",     0,0,0 },
+{ IDX_2C('d','z'),        "Algarije (.dz)",                   0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador (.ec)",                    0,0,0 },
+{ IDX_2C('e','e'),        "Estland (.ee)",                    0,0,0 },
+{ IDX_2C('e','g'),        "Egypte (.eg)",                     0,0,0 },
+{ IDX_2C('e','h'),        "Westelijke Sahara (.eh)",          0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea (.er)",                    0,0,0 },
+{ IDX_2C('e','s'),        "Spanje (.es)",                     0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopie (.et)",                   0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland (.fi)",                    0,0,0 },
+{ IDX_2C('f','j'),        "Fiji (.fj)",                       0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Eilanden (Malvinas, .fk)",0,0,0 },
+{ IDX_2C('f','m'),        "Micronesie (.fm)",                 0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Eilanden (.fo)",             0,0,0 },
+{ IDX_2C('f','r'),        "Frankrijk (.fr)",                  0,0,0 },
+{ IDX_2C('g','a'),        "Gabon (.ga)",                      0,0,0 },
+{ IDX_2C('g','b'),        "Groot Britannie (UK, .gb)",        0,0,0 },
+{ IDX_2C('g','d'),        "Grenada (.gd)",                    0,0,0 },
+{ IDX_2C('g','e'),        "Georgie (.ge)",                    0,0,0 },
+{ IDX_2C('g','f'),        "Frans Guiana (.gf)",               0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana (.gh)",                      0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar (.gi)",                  0,0,0 },
+{ IDX_2C('g','l'),        "Groenland (.gl)",                  0,0,0 },
+{ IDX_2C('g','m'),        "Gambia (.gm)",                     0,0,0 },
+{ IDX_2C('g','n'),        "Guinea (.gn)",                     0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe (.gp)",                 0,0,0 },
+{ IDX_2C('g','q'),        "Equatoriaal Guinea (.gq)",         0,0,0 },
+{ IDX_2C('g','r'),        "Griekenland (.gr)",                0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia en S. Sandwich Eil. (.gs)",0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala (.gt)",                  0,0,0 },
+{ IDX_2C('g','u'),        "Guam (.gu)",                       0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau (.gw)",              0,0,0 },
+{ IDX_2C('g','y'),        "Guyana (.gy)",                     0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong (.hk)",                  0,0,0 },
+{ IDX_2C('h','m'),        "Heard en McDonald Eilanden (.hm)", 0,0,0 },
+{ IDX_2C('h','n'),        "Honduras (.hn)",                   0,0,0 },
+{ IDX_2C('h','r'),        "Kroatie (.hr)",                    0,0,0 },
+{ IDX_2C('h','t'),        "Haiti (.ht)",                      0,0,0 },
+{ IDX_2C('h','u'),        "Hongarije (.hu)",                  0,0,0 },
+{ IDX_2C('i','d'),        "Indonesie (.id)",                  0,0,0 },
+{ IDX_2C('i','e'),        "Ierland (.ie)",                    0,0,0 },
+{ IDX_2C('i','l'),        "Israel (.il)",                     0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India (.in)",                      0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory (.io)",0,0,0 },
+{ IDX_2C('i','q'),        "Iraq (.iq)",                       0,0,0 },
+{ IDX_2C('i','r'),        "Iran (.ir)",                       0,0,0 },
+{ IDX_2C('i','s'),        "IJsland (.is)",                    0,0,0 },
+{ IDX_2C('i','t'),        "Italie (.it)",                     0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica (.jm)",                    0,0,0 },
+{ IDX_2C('j','o'),        "Jordanie (.jo)",                   0,0,0 },
+{ IDX_2C('j','p'),        "Japan (.jp)",                      0,0,0 },
+{ IDX_2C('k','e'),        "Kenia (.ke)",                      0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan (.kg)",                 0,0,0 },
+{ IDX_2C('k','h'),        "Cambodja (.kh)",                   0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati (.ki)",                   0,0,0 },
+{ IDX_2C('k','m'),        "Comoros (.km)",                    0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts en Nevis (.kn)",       0,0,0 },
+{ IDX_2C('k','p'),        "Korea (Noord, .kp)",               0,0,0 },
+{ IDX_2C('k','r'),        "Korea (Zuid, .kr)",                0,0,0 },
+{ IDX_2C('k','w'),        "Koeweit (.kw)",                    0,0,0 },
+{ IDX_2C('k','y'),        "Kaaiman Eilanden (.ky)",           0,0,0 },
+{ IDX_2C('k','z'),        "Kazachstan (.kz)",                 0,0,0 },
+{ IDX_2C('l','a'),        "Laos (.la)",                       0,0,0 },
+{ IDX_2C('l','b'),        "Libanon (.lb)",                    0,0,0 },
+{ IDX_2C('l','c'),        "Sint Lucia (.lc)",                 0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein (.li)",              0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka (.lk)",                  0,0,0 },
+{ IDX_2C('l','r'),        "Liberie (.lr)",                    0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho (.ls)",                    0,0,0 },
+{ IDX_2C('l','t'),        "Litauwen (.lt)",                   0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg (.lu)",                  0,0,0 },
+{ IDX_2C('l','v'),        "Latvia (.lv)",                     0,0,0 },
+{ IDX_2C('l','y'),        "Libie (.ly)",                      0,0,0 },
+{ IDX_2C('m','a'),        "Marokko (.ma)",                    0,0,0 },
+{ IDX_2C('m','c'),        "Monaco (.mc)",                     0,0,0 },
+{ IDX_2C('m','d'),        "Moldova (.md)",                    0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar (.mg)",                 0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Eilanden (.mh)",          0,0,0 },
+{ IDX_2C('m','k'),        "Macedonie (.mk)",                  0,0,0 },
+{ IDX_2C('m','l'),        "Mali (.ml)",                       0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar (.mm)",                    0,0,0 },
+{ IDX_2C('m','n'),        "Mongolie (.mn)",                   0,0,0 },
+{ IDX_2C('m','o'),        "Macau (.mo)",                      0,0,0 },
+{ IDX_2C('m','p'),        "Noordelijke Mariana Eilanden (.mp)",0,0,0 },
+{ IDX_2C('m','q'),        "Martinique (.mq)",                 0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanie (.mr)",                 0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat (.ms)",                 0,0,0 },
+{ IDX_2C('m','t'),        "Malta (.mt)",                      0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius (.mu)",                  0,0,0 },
+{ IDX_2C('m','v'),        "Maldiven (.mv)",                   0,0,0 },
+{ IDX_2C('m','w'),        "Malawi (.mw)",                     0,0,0 },
+{ IDX_2C('m','x'),        "Mexico (.mx)",                     0,0,0 },
+{ IDX_2C('m','y'),        "Maleisie (.my)",                   0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique (.mz)",                 0,0,0 },
+{ IDX_2C('n','a'),        "Namibie (.na)",                    0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia (.nc)",              0,0,0 },
+{ IDX_2C('n','e'),        "Niger (.ne)",                      0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Eiland (.nf)",             0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria (.ng)",                    0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua (.ni)",                  0,0,0 },
+{ IDX_2C('n','l'),        "Nederland (.nl)",                  0,0,0 },
+{ IDX_2C('n','o'),        "Noorwegen (.no)",                  0,0,0 },
+{ IDX_2C('n','p'),        "Nepal (.np)",                      0,0,0 },
+{ IDX_2C('n','r'),        "Nauru (.nr)",                      0,0,0 },
+{ IDX_2C('n','u'),        "Niue (.nu)",                       0,0,0 },
+{ IDX_2C('n','z'),        "Nieuw Zeeland (.nz)",              0,0,0 },
+{ IDX_2C('o','m'),        "Oman (.om)",                       0,0,0 },
+{ IDX_2C('p','a'),        "Panama (.pa)",                     0,0,0 },
+{ IDX_2C('p','e'),        "Peru (.pe)",                       0,0,0 },
+{ IDX_2C('p','f'),        "Frans Polynesie (.pf)",            0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nieuw Guinea (.pg)",         0,0,0 },
+{ IDX_2C('p','h'),        "Philippijnen (.ph)",               0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan (.pk)",                   0,0,0 },
+{ IDX_2C('p','l'),        "Polen (.pl)",                      0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre en Miquelon (.pm)",     0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn (.pn)",                   0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico (.pr)",                0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal (.pt)",                   0,0,0 },
+{ IDX_2C('p','w'),        "Palau (.pw)",                      0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay (.py)",                   0,0,0 },
+{ IDX_2C('q','a'),        "Qatar (.qa)",                      0,0,0 },
+{ IDX_2C('r','e'),        "Reunion (.re)",                    0,0,0 },
+{ IDX_2C('r','o'),        "Romania (.ro)",                    0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russische Federatie (.ru)",        0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda (.rs)",                     0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabie (.sa)",               0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Eilanden (.sb)",           0,0,0 },
+{ IDX_2C('s','c'),        "Seychellen (.sc)",                 0,0,0 },
+{ IDX_2C('s','d'),        "Soedan (.sd)",                     0,0,0 },
+{ IDX_2C('s','e'),        "Zweden (.se)",                     0,0,0 },
+{ IDX_2C('s','g'),        "Singapore (.sg)",                  0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena (.sh)",                 0,0,0 },
+{ IDX_2C('s','i'),        "Slovenie (.si)",                   0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard en Jan Mayen Eilanden (.sj)",0,0,0 },
+{ IDX_2C('s','k'),        "Slovakije (.sk)",                  0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone (.sl)",               0,0,0 },
+{ IDX_2C('s','m'),        "San Marino (.sm)",                 0,0,0 },
+{ IDX_2C('s','n'),        "Senegal (.sn)",                    0,0,0 },
+{ IDX_2C('s','o'),        "Somalie (.so)",                    0,0,0 },
+{ IDX_2C('s','r'),        "Suriname (.sr)",                   0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome en Principe (.st)",       0,0,0 },
+{ IDX_2C('s','u'),        "USSR (voorheen, .su)",             0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador (.sv)",                0,0,0 },
+{ IDX_2C('s','y'),        "Syrie (.sy)",                      0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland (.sz)",                  0,0,0 },
+{ IDX_2C('t','c'),        "Turkse- en Caicos Eilanden (.tc)", 0,0,0 },
+{ IDX_2C('t','d'),        "Tsjaad (.td)",                     0,0,0 },
+{ IDX_2C('t','f'),        "Zuidelijke Franse Terr. (.tf)",    0,0,0 },
+{ IDX_2C('t','g'),        "Togo (.tg)",                       0,0,0 },
+{ IDX_2C('t','h'),        "Thailand (.th)",                   0,0,0 },
+{ IDX_2C('t','j'),        "Tadzjikistan (.tj)",               0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau (.tk)",                    0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan (.tm)",               0,0,0 },
+{ IDX_2C('t','n'),        "Tunesie (.tn)",                    0,0,0 },
+{ IDX_2C('t','o'),        "Tonga (.to)",                      0,0,0 },
+{ IDX_2C('t','p'),        "Oost Timor (.tp)",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkije (.tr)",                    0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad en Tobago (.tt)",         0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu (.tv)",                     0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan (.tw)",                     0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania (.tz)",                   0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine (.ua)",                    0,0,0 },
+{ IDX_2C('u','g'),        "Uganda (.ug)",                     0,0,0 },
+{ IDX_2C('u','k'),        "Ver. Koninkrijk (UK, .uk)",        0,0,0 },
+{ IDX_2C('u','m'),        "US Minor buitenliggende eilanden (.um)",0,0,0 },
+{ IDX_2C('u','s'),        "Verenigde Staten (USA, .us)",      0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay (.uy)",                    0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan (.uz)",                 0,0,0 },
+{ IDX_2C('v','a'),        "Vatikaanstad (.va)",               0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent en de Grenadinen (.vc)",0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela (.ve)",                  0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British, .vg)",    0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S., .vi)",       0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam (.vn)",                    0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu (.vu)",                    0,0,0 },
+{ IDX_2C('w','f'),        "Wallis en Futuna Eilanden (.wf)",  0,0,0 },
+{ IDX_2C('w','s'),        "Samoa (.ws)",                      0,0,0 },
+{ IDX_2C('y','e'),        "Jemen (.ye)",                      0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte (.yt)",                    0,0,0 },
+{ IDX_2C('y','u'),        "Joegoslavie (.yu)",                0,0,0 },
+{ IDX_2C('z','a'),        "Zuid Africa (.za)",                0,0,0 },
+{ IDX_2C('z','m'),        "Zambia (.zm)",                     0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe (.zw)",                   0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.english b/lang/webalizer_lang.english
new file mode 100644 (file)
index 0000000..bda83d9
--- /dev/null
@@ -0,0 +1,633 @@
+/*
+   webalizer_lang.english
+
+   Webalizer V2.0x Language Support file for English.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "English";
+char *langcode  = "en";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Summary Period";
+char *msg_hhdr_gt = "Generated";
+
+/* main index strings */
+char *msg_main_us = "Usage summary for";
+/* char *msg_main_per= "Summary by Month"; */
+char *msg_main_per= "Summary by Month";
+char *msg_main_sum= "Summary by Month";
+char *msg_main_da = "Daily Avg";
+char *msg_main_mt = "Monthly Totals";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daily usage for";
+char *msg_hmth_hu = "Hourly usage for";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Avg";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totals";
+char *msg_h_day   = "Day";
+char *msg_h_mth   = "Month";
+char *msg_h_hour  = "Hour";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visits";
+char *msg_h_files = "Files";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Hostname";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "User Agent";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "Country";
+char *msg_h_search= "Search String";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Daily Statistics";
+char *msg_hlnk_hs = "Hourly Statistics";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Sites";
+char *msg_hlnk_a  = "Agents";
+char *msg_hlnk_c  = "Countries";
+char *msg_hlnk_r  = "Referrers";
+char *msg_hlnk_en = "Entry";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "Search";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+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_us = "Total Unique Sites";
+char *msg_mtot_ur = "Total Unique Referrers";
+char *msg_mtot_ua = "Total Unique User Agents";
+char *msg_mtot_uu = "Total Unique URLs";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Hits per Day";
+char *msg_mtot_mhh= "Hits per Hour";
+char *msg_mtot_mfd= "Files per Day";
+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_rc = "Hits by Response Code";
+
+/* daily total table */
+char *msg_dtot_ds = "Daily Statistics for";
+
+/* hourly total table */
+char *msg_htot_hs = "Hourly Statistics for";
+
+/* country pie chart */
+char *msg_ctry_use= "Usage by Country for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "of";
+char *msg_top_s   = "Total Sites";
+char *msg_top_u   = "Total URLs";
+char *msg_top_r   = "Total Referrers";
+char *msg_top_a   = "Total User Agents";
+char *msg_top_c   = "Total Countries";
+char *msg_top_en  = "Total Entry Pages";
+char *msg_top_ex  = "Total Exit Pages";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "January",  "February", "March",   "April",
+                    "May",      "June",     "July",    "August",
+                    "September","October",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Usage Statistics for";
+char *msg_h_other = "Other";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.estonian b/lang/webalizer_lang.estonian
new file mode 100644 (file)
index 0000000..e260368
--- /dev/null
@@ -0,0 +1,632 @@
+/*
+   webalizer_lang.estonian
+
+   Webalizer V2.0x Language Support file for Estonian.
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   11-Aug-1999 Translation into estonian by Märt Laak <Mart.Laak@active.ee>
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Estonian";
+char *langcode  = "et";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "kirjet";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignoreeritud";
+char *msg_bad     = "vigast";
+char *msg_in      = "";
+char *msg_seconds = "sekundi jooksul";
+
+/* progress and setup error messages */
+char *msg_log_err = "Viga: Ei suuda avada logifaili(e)";
+char *msg_log_use = "logifail";
+char *msg_dir_err = "Viga: Ei suuda vahetada töökataloogi";
+char *msg_dir_use = "kasutades kataloogi";
+char *msg_cur_dir = "jooksev kataloog";
+char *msg_hostname= "Serveri nimi";
+char *msg_ign_hist= "Ignoreerin eelnevat ajalooinfot...";
+char *msg_no_hist = "Ajaloofaili ei leitud...";
+char *msg_get_hist= "Loen ajaloofaili...";
+char *msg_put_hist= "Salvestan ajaloofaili...";
+char *msg_hist_err= "Viga: Ei suuda salvestada ajaloofaili";
+char *msg_bad_hist= "Viga: Ignoreerin vigast ajalookirjet";
+char *msg_bad_conf= "Viga: Ei suuda avada konfiguratsioonifaili";
+char *msg_bad_key = "Hoiatus: Vigane võtmesõna";
+char *msg_bad_date= "Viga: Ignoreerin kirjet (vigane kuupäev)";
+char *msg_ign_nscp= "Ignoreerin Netscape päiskirjet";
+char *msg_bad_rec = "Ignoreerin vigast kirjet";
+char *msg_no_vrec = "Ei leitud ühtegi arusaadavat logikirjet!";
+char *msg_gen_rpt = "Genereerin raportit";
+char *msg_gen_sum = "Genereerin kokkuvõtterapotit";
+char *msg_get_data= "Loen eelmise käivitamise andmeid...";
+char *msg_put_data= "Salvestan antud (jooksva) käivitamise andmeid...";
+char *msg_no_data = "Eelmise käivitamise andmeid ei leitud...";
+char *msg_bad_data= "Viga: Ei suuda lugeda eelmise käivitamise andmeid";
+char *msg_data_err= "Viga: Ei suuda salvestada käivitamise andmeid";
+char *msg_dup_data= "Hoiatus: Tõenäoliselt leitud topeltkirjed";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Ei suuda reserveerida piisavalt mälu, Arvutite edetabelit ei tee!";
+char *msg_nomem_tr= "Ei suuda reserveerida piisavalt mälu, Linkijate edetabelit ei tee!";
+char *msg_nomem_tu= "Ei suuda reserveerida piisavalt mälu, Aadresside edetabelit ei tee!";
+char *msg_nomem_tc= "Ei suuda reserveerida piisavalt mälu, Maade edetabelit ei tee!";
+char *msg_nomem_ta= "Ei suuda reserveerida piisavalt mälu, Lehitsejate edetabelit ei tee!";
+char *msg_nomem_tsr="Ei suuda reserveerida piisavalt mälu, Otsistringide edetabelit ei tee!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Arvuti lisamisel (päevade kaupa) viga, jätan vahele";
+char *msg_nomem_mh= "Arvuti lisamisel (kuude kaupa) viga, jätan vahele";
+char *msg_nomem_u = "URLi lisamisel viga, jätan vahele";
+char *msg_nomem_a = "Lehitseja lisamisel viga, jätan vahele";
+char *msg_nomem_r = "Linkija lisamisel viga, jätan vahele";
+char *msg_nomem_sc= "Otsistringi lisamisel viga, jätan vahele";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Viga: jätan vahele liigpika logikirje";
+char *msg_big_host= "Hoiatus: Teen lühemaks liigpika arvutinime";
+char *msg_big_date= "Hoiatus: Teen lühemaks liigpika kuupäevavälja";
+char *msg_big_req = "Hoiatus: Teen lühemaks liigpika päringuvälja";
+char *msg_big_ref = "Hoiatus: Teen lühemaks liigpika linkija-välja";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Hoiatus: Stringi pikkus ületab lubatud mälumahu";
+
+/* misc errors */
+char *msg_no_open = "Viga: Ei suuda avada faili";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = kuva see help"             ,
+         "-V        = kuva versiooniinfo"           ,
+         "-v        = be verbose"                          ,
+         "-d        = kuva täiendav debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = ignoreeri kirjete järjestuse vigu"   ,
+         "-i        = ignoreeri ajaloofaili"               ,
+         "-p        = säilita olek (inkrementaalne rezhiim)",
+         "-b        = ignoreeri olek (inkrementaalne rezhiim)",
+         "-q        = keela informatiivsed teated"         ,
+         "-Q        = keela KÕIK teated"                   ,
+         "-Y        = keela maade graafik"                 ,
+         "-G        = keela tunnigraafik"                  ,
+         "-H        = keela tunnistatistika"               ,
+         "-L        = keela värvilegendide kuva"           ,
+         "-l num    = kasuta graafikutel {num} horisontaaljoont",
+         "-m num    = viisidi timeout väärtus (seconds)"   ,
+         "-T        = kuva ajakulu info"                   ,
+         "-c file   = kasuta konfiguratsioonifaili 'file'" ,
+         "-n name   = kasuta nime {hostname}"              ,
+         "-o dir    = kasuta väljundiks kataloogi {dir}"   ,
+         "-t name   = raportite pealkiri on 'name'"        ,
+         "-a name   = peida ära lehitseja 'name'"          ,
+         "-r name   = peida ära linkija 'name'"            ,
+         "-s name   = peida ära arvuti 'name'"             ,
+         "-u name   = peida ära URL 'name'"                ,
+         "-x name   = kasuta faililaiendit 'name'"         ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = leheküljeks loetakse faili laiendiga 'name'",
+         "-I name   = indexfaili nimi on 'name'"           ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = kuva esimesed {num} lehitsejat"      ,
+         "-C num    = kuva esimesed {num} maad"            ,
+         "-R num    = kuva esimesed {num} linkijat"        ,
+         "-S num    = kuva esimesed {num} arvutit"         ,
+         "-U num    = kuva esimesed {num} URL-i"           ,
+         "-e num    = kuva esimesed {num} sisendpunkti"    ,
+         "-E num    = kuva esimesed {num} väljundpunkti"   ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Kokkuvõte perioodile";
+char *msg_hhdr_gt = "genereeritud";
+
+/* main index strings */
+char *msg_main_us = "Kasutuse kokkuvõte";
+/* char *msg_main_per= "Viimased 12 kuud"; */
+char *msg_main_per= "Kokkuvõtted kuude kaupa";
+char *msg_main_sum= "Kokkuvõtted kuude kaupa";
+char *msg_main_da = "Päeva keskm.";
+char *msg_main_mt = "Kuu kokku";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Kasutuspäevad";
+char *msg_hmth_hu = "Kasutustunnid";
+
+/* table header strings */
+char *msg_h_by    = "";
+char *msg_h_avg   = "Keskm";
+char *msg_h_max   = "Maks";
+char *msg_h_total = "Kokku";
+char *msg_h_totals= "Kokku";
+char *msg_h_day   = "Päev";
+char *msg_h_mth   = "Kuu";
+char *msg_h_hour  = "Tund";
+char *msg_h_hits  = "Pöördumisi";
+char *msg_h_pages = "Lehekülgi";
+char *msg_h_visits= "Külastusi";
+char *msg_h_files = "Faile";
+char *msg_h_sites = "Arvuteid";
+char *msg_h_xfer  = "KBaite";
+char *msg_h_hname = "Server";
+char *msg_h_url   = "Aadress";
+char *msg_h_agent = "Lehitseja";
+char *msg_h_ref   = "Linkija";
+char *msg_h_ctry  = "Maa";
+char *msg_h_search= "Otsistring";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Päevade statistika";
+char *msg_hlnk_hs = "Tundide statistika";
+char *msg_hlnk_u  = "Aadressid";
+char *msg_hlnk_s  = "Arvutid";
+char *msg_hlnk_a  = "Lehitsejad";
+char *msg_hlnk_c  = "Maad";
+char *msg_hlnk_r  = "Linkijad";
+char *msg_hlnk_en = "Sisendpunkt";
+char *msg_hlnk_ex = "Väljundpunkt";
+char *msg_hlnk_sr = "Otsisõna";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+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_us = "Kokku Erinevaid Kasutajaid";
+char *msg_mtot_ur = "Kokku Erinevaid Viitajaid";
+char *msg_mtot_ua = "Kokku Erinevaid Lehitsejaid";
+char *msg_mtot_uu = "Kokku Erinevaid Aadresse";
+char *msg_mtot_ui = "Kokku Erinevaid Kasutajaid";
+char *msg_mtot_mhd= "Pöördumisi Päevas";
+char *msg_mtot_mhh= "Pöördumisi Tunnis";
+char *msg_mtot_mfd= "Faile Päevas";
+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_rc = "Pöördumisi vastusetüüpide kaupa";
+
+/* daily total table */
+char *msg_dtot_ds = "Päevade statistika";
+
+/* hourly total table */
+char *msg_htot_hs = "Tundide statistika";
+
+/* country pie chart */
+char *msg_ctry_use= "Kasutus maade kaupa";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Esimesed";
+char *msg_top_of  = "kõigist";
+char *msg_top_s   = "külastajaarvutist";
+char *msg_top_u   = "külastatud aadressist";
+char *msg_top_r   = "ettetulnud linkijast";
+char *msg_top_a   = "kasutatud lehitsejast";
+char *msg_top_c   = "külastajamaast";
+char *msg_top_en  = "sisendpunktist";
+char *msg_top_ex  = "väljundpunktist";
+char *msg_top_sr  = "kasutatud otsisõnast";
+char *msg_top_i   = "erinevatest kasutajatest";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Veb", "Mär",
+                    "Apr", "Mai", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Det"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Jaanuar",  "Veebruar", "Märts",   "Aprill",
+                    "Mai",      "Juuni",     "Juuli",    "August",
+                    "September","Oktoober",  "November","Detsember"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Defineerimata vastuskood",                    0 },
+         { "Kood 100 - Continue",                        0 },
+         { "Kood 101 - Switching Protocols",             0 },
+         { "Kood 200 - OK",                              0 },
+         { "Kood 201 - Created",                         0 },
+         { "Kood 202 - Accepted",                        0 },
+         { "Kood 203 - Non-Authoritative Information",   0 },
+         { "Kood 204 - No Content",                      0 },
+         { "Kood 205 - Reset Content",                   0 },
+         { "Kood 206 - Partial Content",                 0 },
+         { "Kood 300 - Multiple Choices",                0 },
+         { "Kood 301 - Moved Permanently",               0 },
+         { "Kood 302 - Found",                           0 },
+         { "Kood 303 - See Other",                       0 },
+         { "Kood 304 - Not Modified",                    0 },
+         { "Kood 305 - Use Proxy",                       0 },
+         { "Kood 307 - Moved Temporarily",               0 },
+         { "Kood 400 - Bad Request",                     0 },
+         { "Kood 401 - Unauthorized",                    0 },
+         { "Kood 402 - Payment Required",                0 },
+         { "Kood 403 - Forbidden",                       0 },
+         { "Kood 404 - Not Found",                       0 },
+         { "Kood 405 - Method Not Allowed",              0 },
+         { "Kood 406 - Not Acceptable",                  0 },
+         { "Kood 407 - Proxy Authentication Required",   0 },
+         { "Kood 408 - Request Timeout",                 0 },
+         { "Kood 409 - Conflict",                        0 },
+         { "Kood 410 - Gone",                            0 },
+         { "Kood 411 - Length Required",                 0 },
+         { "Kood 412 - Precondition Failed",             0 },
+         { "Kood 413 - Request Entity Too Large",        0 },
+         { "Kood 414 - Request-URI Too Long",            0 },
+         { "Kood 415 - Unsupported Media Type",          0 },
+         { "Kood 416 - Requested Range Not Satisfiable", 0 },
+         { "Kood 417 - Expectation Failed",              0 },
+         { "Kood 500 - Internal Server Error",           0 },
+         { "Kood 501 - Not Implemented",                 0 },
+         { "Kood 502 - Bad Gateway",                     0 },
+         { "Kood 503 - Service Unavailable",             0 },
+         { "Kood 504 - Gateway Timeout",                 0 },
+         { "Kood 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Kasutusstatistika";
+char *msg_h_other = "Muu";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Numbriline/Tundmatu maa",          0,0,0 },
+{ IDX_3C('c','o','m'),    "Äridomeenid (com)",                0,0,0 },
+{ IDX_3C('e','d','u'),    "Haridusdomeenid (edu)",            0,0,0 },
+{ IDX_3C('g','o','v'),    "USA Riiklikud (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "Rahvusvaheline (int)",             0,0,0 },
+{ IDX_3C('m','i','l'),    "USA Sõjaline (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Interneti organisatsioonid (net)", 0,0,0 },
+{ IDX_3C('o','r','g'),    "Mittekommertsiaalorganisatsioonid (org)", 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato",                             0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Ühendatud Araabia Emiraadid",      0,0,0 },
+{ IDX_2C('a','f'),        "Afganistaan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua ja Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albaania",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armeenia",                         0,0,0 },
+{ IDX_2C('a','n'),        "Hollandi Antillid",                0,0,0 },
+{ IDX_2C('a','o'),        "Angoola",                          0,0,0 },
+{ IDX_2C('a','q'),        "Antarktika",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentiina",                       0,0,0 },
+{ IDX_2C('a','s'),        "Ameerika Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Austraalia",                       0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaidzan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia ja Herzegovina",            0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaaria",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Boliivia",                         0,0,0 },
+{ IDX_2C('b','r'),        "Brasiilia",                        0,0,0 },
+{ IDX_2C('b','s'),        "Bahama saared",                    0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Saar",                      0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Valgevene",                        0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Saared",           0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Kesk-Aafrika Vabariik",            0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Shveits",                          0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cooki Saared",                     0,0,0 },
+{ IDX_2C('c','l'),        "Tshiili",                          0,0,0 },
+{ IDX_2C('c','m'),        "Kameron",                          0,0,0 },
+{ IDX_2C('c','n'),        "Hiina",                            0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuuba",                            0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Jõulusaared",                      0,0,0 },
+{ IDX_2C('c','y'),        "Küpros",                           0,0,0 },
+{ IDX_2C('c','z'),        "Tsehhi Vabariik",                  0,0,0 },
+{ IDX_2C('d','e'),        "Saksamaa",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Taani",                            0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Alzheeria",                        0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Eesti",                            0,0,0 },
+{ IDX_2C('e','g'),        "Egiptus",                          0,0,0 },
+{ IDX_2C('e','h'),        "Lääne Sahhaara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Hispaania",                        0,0,0 },
+{ IDX_2C('e','t'),        "Etioopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Soome",                            0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "Prantsusmaa",                      0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Suurbritannia",                    0,0,0 },
+{ IDX_2C('g','d'),        "Grenaada",                         0,0,0 },
+{ IDX_2C('g','e'),        "Gruusia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Prantsuse Guiana",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Gaana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Ginea",                            0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Ekvatoriaal-Ginea",                0,0,0 },
+{ IDX_2C('g','r'),        "Kreeka",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduuras",                        0,0,0 },
+{ IDX_2C('h','r'),        "Horvaatia",                        0,0,0 },
+{ IDX_2C('h','t'),        "Haiiti",                           0,0,0 },
+{ IDX_2C('h','u'),        "Ungari",                           0,0,0 },
+{ IDX_2C('i','d'),        "Indoneesia",                       0,0,0 },
+{ IDX_2C('i','e'),        "Iirimaa",                          0,0,0 },
+{ IDX_2C('i','l'),        "Iisrael",                          0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraak",                            0,0,0 },
+{ IDX_2C('i','r'),        "Iraan",                            0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Itaalia",                          0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordaania",                        0,0,0 },
+{ IDX_2C('j','p'),        "Jaapan",                           0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kõrgõzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kampuchea",                        0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts ja Nevis",             0,0,0 },
+{ IDX_2C('k','p'),        "Põhja-Korea",                      0,0,0 },
+{ IDX_2C('k','r'),        "Lõuna-Korea",                      0,0,0 },
+{ IDX_2C('k','w'),        "Kuveit",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kaimani saared",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kasahstan",                        0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Liibanon",                         0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Libeeria",                         0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Leedu",                            0,0,0 },
+{ IDX_2C('l','u'),        "Luksemburg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Läti",                             0,0,0 },
+{ IDX_2C('l','y'),        "Liibüa",                           0,0,0 },
+{ IDX_2C('m','a'),        "Maroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshalli saared",                 0,0,0 },
+{ IDX_2C('m','k'),        "Makedoonia",                       0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongoolia",                        0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritaania",                      0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Malediivid",                       0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mehhiko",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malaisia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mosambiik",                        0,0,0 },
+{ IDX_2C('n','a'),        "Namiibia",                         0,0,0 },
+{ IDX_2C('n','c'),        "Uus-Kaledoonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolki saar",                    0,0,0 },
+{ IDX_2C('n','g'),        "Nigeeria",                         0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holland",                          0,0,0 },
+{ IDX_2C('n','o'),        "Norra",                            0,0,0 },
+{ IDX_2C('n','p'),        "Nepaal",                           0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Uus-Meremaa",                      0,0,0 },
+{ IDX_2C('o','m'),        "Omaan",                            0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peruu",                            0,0,0 },
+{ IDX_2C('p','f'),        "Prantsuse Polüneesia",             0,0,0 },
+{ IDX_2C('p','g'),        "Paapua Uus-Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipiinid",                       0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poola",                            0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre ja Miquelon",           0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumeenia",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Vene Föderatsioon",                0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Araabia",                    0,0,0 },
+{ IDX_2C('s','b'),        "Solomoni saared",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seishellid",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudaan",                           0,0,0 },
+{ IDX_2C('s','e'),        "Rootsi",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Sloveenia",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard ja Jan Mayen saared",     0,0,0 },
+{ IDX_2C('s','k'),        "Slovakkia",                        0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somaalia",                         0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome ja Principe",             0,0,0 },
+{ IDX_2C('s','u'),        "NSVL (endine)",                    0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Süüria",                           0,0,0 },
+{ IDX_2C('s','z'),        "Svaasimaa",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks ja Caicos saared",           0,0,0 },
+{ IDX_2C('t','d'),        "Tshaad",                           0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tai",                              0,0,0 },
+{ IDX_2C('t','j'),        "Tadzhikistan",                     0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmeenia",                       0,0,0 },
+{ IDX_2C('t','n'),        "Tuneesia",                         0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Ida Timor",                        0,0,0 },
+{ IDX_2C('t','r'),        "Türgi",                            0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad ja Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tansaania",                        0,0,0 },
+{ IDX_2C('u','a'),        "Ukraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Suur Britannia",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "Ameerika Ühendriigid",             0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Usbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikan",                          0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent ja the Grenadines",  0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Neitsi saared (Briti)",            0,0,0 },
+{ IDX_2C('v','i'),        "Neitsi saared (U.S.)",             0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis ja Futuna saared",          0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jeemen",                           0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslaavia",                      0,0,0 },
+{ IDX_2C('z','a'),        "Lõuna-Aafrika Vabariik",           0,0,0 },
+{ IDX_2C('z','m'),        "Sambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.finnish b/lang/webalizer_lang.finnish
new file mode 100644 (file)
index 0000000..d99fbd0
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+   webalizer_lang.finnish
+
+   Webalizer V2.0x Language Support file for Finnish.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   25-Feb-2000 Translate to Finnish by Eero Martikainen
+               (eero.martikainen@flamenet.com) 
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   05-Feb-2001 Grammar and spelling corrections by Osma Suominen (ozone@iki.fi)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Finnish";
+char *langcode  = "fi";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+/* Errors, help and setup messages not translated by finnish. */
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Virhe: Tiedostoa ei voi avata:";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/* Tästä alkaa suomennos. Finnish translation starts here.             */
+/*                                                                    */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Yhteenveto ajalta";
+char *msg_hhdr_gt = "Luotu";
+
+/* main index strings */
+char *msg_main_us = "Käyttöyhteenveto:";
+/* char *msg_main_per= "Viimeisimmät 12 kuukautta"; */
+char *msg_main_per= "Kuukausittainen yhteenveto";
+char *msg_main_sum= "Kuukausittainen yhteenveto";
+char *msg_main_da = "Päivien keskiarvo";
+char *msg_main_mt = "Yhteensä kuukaudessa";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Päivittäinen käyttö";
+char *msg_hmth_hu = "Tunnittainen käyttö";
+
+/* table header strings */
+char *msg_h_by    = "/";
+char *msg_h_avg   = "Keskiarvo";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Yhteensä";
+char *msg_h_totals= "Kaikki yhteensä";
+char *msg_h_day   = "Päivä";
+char *msg_h_mth   = "Kuukausi";
+char *msg_h_hour  = "Tunti";
+char *msg_h_hits  = "osumia";
+char *msg_h_pages = "sivuja";
+char *msg_h_visits= "vierailuja";
+char *msg_h_files = "tiedostoja";
+char *msg_h_sites = "koneita";
+char *msg_h_xfer  = "kilotavuja";
+char *msg_h_hname = "Välityspalvelin";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Käytetyt selaimet";
+char *msg_h_ref   = "Hakupalvelimet / Linkit sivuille";
+char *msg_h_ctry  = "Valtiot";
+char *msg_h_search= "Hakusana";
+char *msg_h_uname = "Käyttäjänimi";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Päivätilastot";
+char *msg_hlnk_hs = "Tuntitilastot";
+char *msg_hlnk_u  = "URL:t";
+char *msg_hlnk_s  = "Koneet";
+char *msg_hlnk_a  = "Selaimet";
+char *msg_hlnk_c  = "Valtiot";
+char *msg_hlnk_r  = "Hakupalvelimet";
+char *msg_hlnk_en = "Sisääntulosivut";
+char *msg_hlnk_ex = "Ulosmenosivut";
+char *msg_hlnk_sr = "Hakusanat";
+char *msg_hlnk_i  = "Käyttäjät";
+
+/* monthly total table */
+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_us = "Yhteensä erilaisia koneita";
+char *msg_mtot_ur = "Yhteensä erilaisia hakupalvelimia";
+char *msg_mtot_ua = "Yhteensä erilaisia selaimia";
+char *msg_mtot_uu = "Yhteensä erilaisia URL:iä";
+char *msg_mtot_ui = "Yhteensä erilaisia käyttäjänimiä";
+char *msg_mtot_mhd= "Osumia / päivä";
+char *msg_mtot_mhh= "Osumia / tunti";
+char *msg_mtot_mfd= "Tiedostoja / päivä";
+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_rc = "Osumien vastauskoodit";
+
+/* daily total table */
+char *msg_dtot_ds = "Päivittäiset tilastot";
+
+/* hourly total table */
+char *msg_htot_hs = "Tuntitilastot";
+
+/* country pie chart */
+char *msg_ctry_use= "Käyttäjiä valtioittain";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Parhaat ";
+char *msg_top_of  = "yht.";
+char *msg_top_s   = "koneesta";
+char *msg_top_u   = "URL:stä";
+char *msg_top_r   = "hakupalvelimesta";
+char *msg_top_a   = "selaimesta";
+char *msg_top_c   = "valtiosta";
+char *msg_top_en  = "sisääntulosivusta";
+char *msg_top_ex  = "ulosmenosivusta";
+char *msg_top_sr  = "hakusanasta";
+char *msg_top_i   = "käyttäjänimestä";
+char *msg_v_sites = "Katso kaikki koneet";
+char *msg_v_urls  = "Katso kaikki URL:t";
+char *msg_v_refs  = "Katso kaikki linkit sivuille";
+char *msg_v_agents= "Katso kaikki selaimet";
+char *msg_v_search= "Katso kaikki hakusanat";
+char *msg_v_users = "Katso kaikki käyttäjänimet";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Tam", "Hel", "Maa",
+                    "Huh", "Tou", "Kes",
+                    "Hei", "Elo", "Syy",
+                    "Lok", "Mar", "Jou"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "tammikuussa",  "helmikuussa", "maaliskuussa",   "huhtikuussa",
+                    "toukokuussa",  "kesäkuussa",  "heinäkuussa",    "elokuussa",
+                    "syyskuussa",   "lokakuussa",  "marraskuussa",   "joulukuussa"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Tuntematon vastauskoodi",                    0 },
+         { "Code 100 - Jatka",                           0 },
+         { "Code 101 - Vaihda Protokollaa",              0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Luotu",                          0 },
+         { "Code 202 - Hyväksytty",                      0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - Ei sisältöä",                     0 },
+         { "Code 205 - Tyhjennä sisältö",                0 },
+         { "Code 206 - Osittainen sisältö",              0 },
+         { "Code 300 - Useita vaihtoehtoja",             0 },
+         { "Code 301 - Siirretty pysyvästi",             0 },
+         { "Code 302 - Löytyi",                          0 },
+         { "Code 303 - Katso toinen",                    0 },
+         { "Code 304 - Ei muutettu",                     0 },
+         { "Code 305 - Käytä välityspalvelinta",         0 },
+         { "Code 307 - Siirretty tilapäisesti",          0 },
+         { "Code 400 - Huono pyyntö",                    0 },
+         { "Code 401 - Ei käyttöoikeutta",               0 },
+         { "Code 402 - Maksu vaaditaan",                 0 },
+         { "Code 403 - Kielletty",                       0 },
+         { "Code 404 - Ei löytynyt",                     0 },
+         { "Code 405 - Metodi ei ole sallittu",          0 },
+         { "Code 406 - Ei hyväksyttävää",                0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Konflikti",                       0 },
+         { "Code 410 - Mennyttä",                        0 },
+         { "Code 411 - Pituus vaaditaan",                0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Pyydetty URL liian pitkä",        0 },
+         { "Code 415 - Mediatyyppiä ei tueta",           0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Palvelimen sisäinen virhe",       0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Palvelu ei ole saatavilla",       0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP-versiota ei tueta",          0 } };
+
+char *msg_title   = "Käyttötilastot";
+char *msg_h_other = "Muut";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Tuntematon",                       0,0,0 },
+{ IDX_3C('c','o','m'),    "Kaupallinen (.com)",               0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (.edu)",               0,0,0 },
+{ IDX_3C('g','o','v'),    "USA Hallitus (.gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "Kansainvälinen (.int)",            0,0,0 },
+{ IDX_3C('m','i','l'),    "USA Armeija (.mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Verkko (.net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Ei-kaupallinen yhteisö (.org)",    0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Vanhan tyylin Arpanet (.arpa)",    0,0,0 },
+{ IDX_4C('n','a','t','o'),"Naton tukikohta (.nato)",          0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Yhdistyneet Arabiemiraatit",       0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Hollannin Antillit",               0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Etelänapamantere",                 0,0,0 },
+{ IDX_2C('a','r'),        "Argentiina",                       0,0,0 },
+{ IDX_2C('a','s'),        "Amerikan Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Itävalta",                         0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia ja Herzegovina",            0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasilia",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahama",                           0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Valko-Venäjä",                     0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Sveitsi",                          0,0,0 },
+{ IDX_2C('c','i'),        "Norsunluurannikko",                0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Kiina",                            0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuuba",                            0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Joulusaaret",                      0,0,0 },
+{ IDX_2C('c','y'),        "Kypros",                           0,0,0 },
+{ IDX_2C('c','z'),        "Tsekki",                           0,0,0 },
+{ IDX_2C('d','e'),        "Saksa",                            0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Tanska",                           0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikaaninen Tasavalta",         0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Viro",                             0,0,0 },
+{ IDX_2C('e','g'),        "Egypti",                           0,0,0 },
+{ IDX_2C('e','h'),        "Läntinen Sahara",                  0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Espanja",                          0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Suomi",                            0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falklandin Saaret (Malvinas)",     0,0,0 },
+{ IDX_2C('f','m'),        "Mikronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Färsaaret",                        0,0,0 },
+{ IDX_2C('f','r'),        "Ranska",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Iso-Britannia (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Ranskan Guiana",                   0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Kreikka",                          0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guajana",                          0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Unkari",                           0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanti",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Intia",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islanti",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japani",                           0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kambodza",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Pohjois-Korea",                    0,0,0 },
+{ IDX_2C('k','r'),        "Etelä-Korea",                      0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Saaret",                    0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Liettua",                          0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marokko",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Makedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Malediivit",                       0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Meksiko",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malesia",                          0,0,0 },
+{ IDX_2C('m','z'),        "Mosambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Uusi Caledonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Hollanti",                         0,0,0 },
+{ IDX_2C('n','o'),        "Norja",                            0,0,0 },
+{ IDX_2C('n','p'),        "Nepali",                           0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Uusi-Seelanti",                    0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Ranskan Polynesia",                0,0,0 },
+{ IDX_2C('p','g'),        "Papua Uusi Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filippiinit",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Puola",                            0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugali",                        0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguai",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Venäjä",                           0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Ruotsi",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakian Tasavalta",              0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegali",                         0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Neuvostoliitto (ent.)",            0,0,0 },
+{IDX_2C('s','v'),         "El Salvador",                      0,0,0 }, 
+{IDX_2C('s','y'),         "Syyria",                           0,0,0 }, 
+{IDX_2C('s','z'),         "Swazimaa",                         0,0,0 },
+{IDX_2C('t','c'),         "Turks and Caicos Islands",         0,0,0 },
+{IDX_2C('t','d'),         "Chad",                             0,0,0 }, 
+{IDX_2C('t','f'),         "French Southern Territories",      0,0,0 },
+{IDX_2C('t','g'),         "Togo",                             0,0,0 }, 
+{IDX_2C('t','h'),         "Thaimaa",                          0,0,0 },
+{IDX_2C('t','j'),         "Tajikistan",                       0,0,0 },
+{IDX_2C('t','k'),         "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{IDX_2C('t','m'),         "Turkmenistan",                     0,0,0 }, 
+{IDX_2C('t','n'),         "Tunisia",                          0,0,0 }, 
+{IDX_2C('t','o'),         "Tonga",                            0,0,0 }, 
+{IDX_2C('t','p'),         "Itä Timori",                       0,0,0 }, 
+{IDX_2C('t','r'),         "Turkki",                           0,0,0 }, 
+{IDX_2C('t','t'),         "Trinidad ja Tobago",               0,0,0 },
+{IDX_2C('t','v'),         "Tuvalu",                           0,0,0 }, 
+{IDX_2C('t','w'),         "Taiwan",                           0,0,0 }, 
+{IDX_2C('t','z'),         "Tansania",                         0,0,0 }, 
+{IDX_2C('u','a'),         "Ukraina",                          0,0,0 },
+{IDX_2C('u','g'),         "Uganda",                           0,0,0 },
+{IDX_2C('u','k'),         "Iso-Britannia",                    0,0,0 },
+{IDX_2C('u','m'),         "US Minor Outlying Islands",        0,0,0 }, 
+{IDX_2C('u','s'),         "Yhdysvallat",                      0,0,0 },
+{IDX_2C('u','y'),         "Uruguai",                          0,0,0 }, 
+{IDX_2C('u','z'),         "Uzbekistan",                       0,0,0 },
+{IDX_2C('v','a'),         "Vatikaani",                        0,0,0 },
+{IDX_2C('v','c'),         "Saint Vincent and the Grenadines", 0,0,0 }, 
+{IDX_2C('v','e'),         "Venezuela",                        0,0,0 },
+{IDX_2C('v','g'),         "Virgin Islands (British)",         0,0,0 }, 
+{IDX_2C('v','i'),         "Virgin Islands (U.S.)",            0,0,0 }, 
+{IDX_2C('v','n'),         "Vietnam",                          0,0,0 }, 
+{IDX_2C('v','u'),         "Vanuatu",                          0,0,0 }, 
+{IDX_2C('w','f'),         "Wallis and Futuna Islands",        0,0,0 }, 
+{IDX_2C('w','s'),         "Samoa",                            0,0,0 }, 
+{IDX_2C('y','e'),         "Jemen",                            0,0,0 }, 
+{IDX_2C('y','t'),         "Mayotte",                          0,0,0 }, 
+{IDX_2C('y','u'),         "Jugoslavia",                       0,0,0 }, 
+{IDX_2C('z','a'),         "Etelä-Afrikka",                    0,0,0 }, 
+{IDX_2C('z','m'),         "Sambia",                           0,0,0 }, 
+{IDX_2C('z','w'),         "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.french b/lang/webalizer_lang.french
new file mode 100644 (file)
index 0000000..843f8df
--- /dev/null
@@ -0,0 +1,676 @@
+/*
+   webalizer_lang.french
+
+   Webalizer V2.0x Language Support file for French.
+   04-Jun-1998 Translation by Sylvain Avril (savril@oceanet.fr)
+   04-Jun-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   20-Feb-1999 Added non-extended char l_month array (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   27-Jan-2000 Translation complements by Christophe Aubert (ca@tgi.fr)
+   11-Fev-2000 Minor complements by Laurent Monin(lmonin@metaconcept.com)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   17-Mar-2000 French support for level 2.0 (lmonin@metaconcept.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net
+
+*/
+
+/*
+   Traduit par Sylvain AVRIL (savril@oceanet.fr,
+      http://www.coucounet.com/sylvain/)
+      - Oceanet (http://www.oceanet.fr/)
+
+   Je n'ai pas traduit les messages d'erreurs qui me paraissaient etre plus
+   clairs en anglais
+*/
+
+/*
+   Complements de traduction par Christophe AUBERT (ca@tgi.fr)
+      - TGI (http://www.tgi.fr/)
+
+   J'ai traduit les noms de pays ainsi que differents titres ...
+   Les messages d'erreurs restent en anglais
+*/
+
+/* 
+   Complements mineurs de traduction par Laurent MONIN 
+      - lmonin@metaconcept.com
+      
+   J'ai traduit Kbytes --> KOctets
+   et certains pays conformement à DNS/BIND 3eme edition
+   Les messages d'erreurs restent en anglais
+   Adaptation pour version 2.0 
+*/
+
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "French";
+char *langcode  = "fr";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data...";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timeout value (seconds)"       ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "P&eacute;riode du r&eacute;sum&eacute;";
+char *msg_hhdr_gt = "G&eacute;n&eacute;r&eacute; le";
+
+/* main index strings */
+char *msg_main_us = "Resume des acces pour";
+/* char *msg_main_per= "12 derniers mois"; */
+char *msg_main_per= "R&eacute;sum&eacute; par mois";
+char *msg_main_sum= "R&eacute;sum&eacute; par mois";
+char *msg_main_da = "Moyenne journali&egrave;re";
+char *msg_main_mt = "Totaux mensuels";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Acces journalier pour";
+char *msg_hmth_hu = "Acces horaire pour";
+
+/* table header strings */
+char *msg_h_by    = "par";
+char *msg_h_avg   = "Moy.";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totaux";
+char *msg_h_day   = "Jour";
+char *msg_h_mth   = "Mois";
+char *msg_h_hour  = "Heure";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visites";
+char *msg_h_files = "Fichiers";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "Ko";
+char *msg_h_hname = "Nom d'h&ocirc;te";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Navigateur";
+char *msg_h_ref   = "R&eacute;f&eacute;rent";
+char *msg_h_ctry  = "Pays";
+char *msg_h_search= "Mots-cl&eacute;s";
+char *msg_h_uname = "Utilisateur";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistiques journali&egrave;res";
+char *msg_hlnk_hs = "Statistiques horaires";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Sites";
+char *msg_hlnk_a  = "Navigateurs";
+char *msg_hlnk_c  = "Pays";
+char *msg_hlnk_r  = "R&eacute;f&eacute;rents";
+char *msg_hlnk_en = "Pages d'entr&eacute;e";
+char *msg_hlnk_ex = "Pages de sortie";
+char *msg_hlnk_sr = "Mots-cl&eacute;s";
+char *msg_hlnk_i  = "Utilisateurs";
+
+/* monthly total table */
+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_us = "Total des Sites uniques";
+char *msg_mtot_ur = "Total des R&eacute;f&eacute;rents uniques";
+char *msg_mtot_ua = "Total des Navigateurs";
+char *msg_mtot_uu = "Total des URLs uniques";
+char *msg_mtot_ui = "Total des utilisateurs uniques";
+char *msg_mtot_mhd= "Hits par Jour";
+char *msg_mtot_mhh= "Hits par Heure";
+char *msg_mtot_mfd= "Fichiers par Jour";
+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_rc = "Hits par code de r&eacute;ponse";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistiques journali&egrave;res pour";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistiques horaires pour";
+
+/* country pie chart */
+char *msg_ctry_use= "Acces par pays pour";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "sur un total de";
+char *msg_top_s   = "sites";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "r&eacute;f&eacute;rents";
+char *msg_top_a   = "navigateurs";
+char *msg_top_c   = "pays";
+char *msg_top_en  = "pages d'entr&eacute;e";
+char *msg_top_ex  = "pages de sortie";
+char *msg_top_sr  = "groupes de mots-cl&eacute;s";
+char *msg_top_i   = "utilisateurs";
+char *msg_v_sites = "Voir tous les sites";
+char *msg_v_urls  = "Voir toutes les URLs";
+char *msg_v_refs  = "Voir tous les r&eacute;f&eacute;rents";
+char *msg_v_agents= "Voir tous les navigateurs";
+char *msg_v_search= "Voir tous les mots-cl&eacute;s";
+char *msg_v_users = "Voir tous les utilisateurs";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Fev", "Mar",
+                    "Avr", "Mai", "Juin",
+                    "Juil", "Aou", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+/*
+char *l_month[12]={ "Janvier",  "F&eacute;vrier", "Mars",   "Avril",
+                    "Mai",      "Juin",     "Juillet",    "Ao&ucirc;t",
+                    "Septembre","Octobre",  "Novembre","D&eacute;cembre"};
+*/
+
+/* Some installations may need to use this one instead                 */
+char *l_month[12]={ "Janvier",  "Fevrier",  "Mars",    "Avril",
+                    "Mai",      "Juin",     "Juillet", "Aout",
+                    "Septembre","Octobre",  "Novembre","Decembre"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Statistiques d'acc&egrave;s &agrave;";
+char *msg_h_other = "Autre";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Non-resolu/Inconnu",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (.com)",                0,0,0 },
+{ IDX_3C('e','d','u'),    "Enseignement (.edu)",              0,0,0 },
+{ IDX_3C('g','o','v'),    "US Gouvernement (.gov)",           0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Militaire (.mil)",              0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (.net)",                   0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-commerciales (.org)",          0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Ancien style Arpanet (arpa)",      0,0,0 },
+{ IDX_4C('n','a','t','o'),"OTAN (.nato)",                     0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','c'),        "Ile Ascension",                    0,0,0 },
+{ IDX_2C('a','d'),        "Andorre",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emirats Arabes Unis",              0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua et Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albanie",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenie",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antilles Neerlandaises",           0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctique",                      0,0,0 },
+{ IDX_2C('a','r'),        "Argentine",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Americaines",                0,0,0 },
+{ IDX_2C('a','t'),        "Autriche",                         0,0,0 },
+{ IDX_2C('a','u'),        "Australie",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaidjan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosnie Herzegovine",               0,0,0 },
+{ IDX_2C('b','b'),        "Barbades",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgique",                         0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgarie",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrein",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermudes",                         0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivie",                          0,0,0 },
+{ IDX_2C('b','r'),        "Bresil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhoutan",                          0,0,0 },
+{ IDX_2C('b','v'),        "Ile Bouvet",                       0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorussie",                      0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Iles Cocos (Keeling)",             0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','d'),        "Rep. Democr. Congo (Kinshasa)",    0,0,0 },
+{ IDX_2C('c','f'),        "Republique Centrafricaine",        0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Suisse",                           0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire",                    0,0,0 },
+{ IDX_2C('c','k'),        "Iles Cook",                        0,0,0 },
+{ IDX_2C('c','l'),        "Chili",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroun",                         0,0,0 },
+{ IDX_2C('c','n'),        "Chine",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombie",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cap Vert",                         0,0,0 },
+{ IDX_2C('c','x'),        "Ile Christmas",                    0,0,0 },
+{ IDX_2C('c','y'),        "Chypre",                           0,0,0 },
+{ IDX_2C('c','z'),        "Republique Tcheque",               0,0,0 },
+{ IDX_2C('d','e'),        "Allemagne",                        0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danemark",                         0,0,0 },
+{ IDX_2C('d','m'),        "Dominique",                        0,0,0 },
+{ IDX_2C('d','o'),        "Republique Dominicaine",           0,0,0 },
+{ IDX_2C('d','z'),        "Algerie",                          0,0,0 },
+{ IDX_2C('e','c'),        "Equateur",                         0,0,0 },
+{ IDX_2C('e','e'),        "Estonie",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypte",                           0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Occidental",                0,0,0 },
+{ IDX_2C('e','r'),        "Erythree",                         0,0,0 },
+{ IDX_2C('e','s'),        "Espagne",                          0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopie",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlande",                         0,0,0 },
+{ IDX_2C('f','j'),        "Fidji",                            0,0,0 },
+{ IDX_2C('f','k'),        "Iles Falkland (Malouines)",        0,0,0 },
+{ IDX_2C('f','m'),        "Micronesie",                       0,0,0 },
+{ IDX_2C('f','o'),        "Iles Feroes",                      0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Grande Bretagne (UK)",             0,0,0 },
+{ IDX_2C('g','d'),        "Grenade",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgie",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guyane Francaise",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Groenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambie",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinee",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Guinee Equatoriale",               0,0,0 },
+{ IDX_2C('g','r'),        "Grece",                            0,0,0 },
+{ IDX_2C('g','s'),        "Georgie et Iles Sandwich du Sud",  0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinee-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyane",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Iles Heard et McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatie",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hongrie",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesie",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlande",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Ile de Man",                       0,0,0 },
+{ IDX_2C('i','n'),        "Inde",                             0,0,0 },
+{ IDX_2C('i','o'),        "Territ. Britannique Ocean Indien", 0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islande",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italie",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaique",                         0,0,0 },
+{ IDX_2C('j','o'),        "Jordanie",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japon",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirghizistan",                     0,0,0 },
+{ IDX_2C('k','h'),        "Cambodge",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comores",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Christophe et Nevis",       0,0,0 },
+{ IDX_2C('k','p'),        "Coree (Nord)",                     0,0,0 },
+{ IDX_2C('k','r'),        "Coree (Sud)",                      0,0,0 },
+{ IDX_2C('k','w'),        "Koweit",                           0,0,0 },
+{ IDX_2C('k','y'),        "Iles Caimans",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Liban",                            0,0,0 },
+{ IDX_2C('l','c'),        "Sainte Lucie",                     0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituanie",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Lettonie (Latvija)",               0,0,0 },
+{ IDX_2C('l','y'),        "Libye",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroc",                            0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldavie",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Iles Marshall",                    0,0,0 },
+{ IDX_2C('m','k'),        "Macedoine",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Birmanie (Myanmar)",               0,0,0 },
+{ IDX_2C('m','n'),        "Mongolie",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Iles Mariannes Nord",              0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanie",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malte",                            0,0,0 },
+{ IDX_2C('m','u'),        "Ile Maurice",                      0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexique",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malaisie",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibie",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nouvelle Caledonie",               0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Ile Norfolk",                      0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Pays Bas",                         0,0,0 },
+{ IDX_2C('n','o'),        "Norvege",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Nioue",                            0,0,0 },
+{ IDX_2C('n','z'),        "Nouvelle Zelande",                 0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Perou",                            0,0,0 },
+{ IDX_2C('p','f'),        "Polynesie Francaise",              0,0,0 },
+{ IDX_2C('p','g'),        "Papouasie Nouvelle Guinee",        0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Pologne",                          0,0,0 },
+{ IDX_2C('p','m'),        "Saint Pierre et Miquelon",         0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Porto Rico",                       0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Roumanie",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russie",                           0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabie Saoudite",                  0,0,0 },
+{ IDX_2C('s','b'),        "Iles Salomon",                     0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Soudan",                           0,0,0 },
+{ IDX_2C('s','e'),        "Suede",                            0,0,0 },
+{ IDX_2C('s','g'),        "Singapour",                        0,0,0 },
+{ IDX_2C('s','h'),        "Sainte Helene",                    0,0,0 },
+{ IDX_2C('s','i'),        "Slovenie",                         0,0,0 },
+{ IDX_2C('s','j'),        "Iles Svalbard et Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "Slovaquie",                        0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "Saint Marin",                      0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalie",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Saint Thomas et Prince",           0,0,0 },
+{ IDX_2C('s','u'),        "URSS (ancien)",                    0,0,0 },
+{ IDX_2C('s','v'),        "Salvador",                         0,0,0 },
+{ IDX_2C('s','y'),        "Syrie",                            0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Iles Turks et Caiques",            0,0,0 },
+{ IDX_2C('t','d'),        "Tchad",                            0,0,0 },
+{ IDX_2C('t','f'),        "Terres Australes Antarctiques Fr", 0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailande",                        0,0,0 },
+{ IDX_2C('t','j'),        "Tadjikistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisie",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Timor Oriental",                   0,0,0 },
+{ IDX_2C('t','r'),        "Turquie",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinite et Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzanie",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Ouganda",                          0,0,0 },
+{ IDX_2C('u','k'),        "Royaume-Uni",                      0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "Etats Unis",                       0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Ouzbekistan",                      0,0,0 },
+{ IDX_2C('v','a'),        "Cite du Vatican",                  0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent et Grenadines",      0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Iles Vierges Britanniques",        0,0,0 },
+{ IDX_2C('v','i'),        "Iles Vierges Americaines",        0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Iles Wallis et Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa Occidentales",               0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yougoslavie",                      0,0,0 },
+{ IDX_2C('z','a'),        "Afrique du Sud",                   0,0,0 },
+{ IDX_2C('z','m'),        "Zambie",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.galician b/lang/webalizer_lang.galician
new file mode 100644 (file)
index 0000000..faf0ee9
--- /dev/null
@@ -0,0 +1,639 @@
+/*
+   webalizer_lang.galician
+
+   Webalizer V2.0x Language Support file for Galician
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   22-Apr-2001 Galician translation by Alberto Cifuentes (balea@arrakis.es)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Galician";
+char *langcode  = "gl";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "rexistros";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignorados";
+char *msg_bad     = "erróneos";
+char *msg_in      = "en";
+char *msg_seconds = "segundos";
+
+/* progress and setup erro messages */
+char *msg_log_err = "Erro: Non podo abrir histórico";
+char *msg_log_use = "Utilizando histórico";
+char *msg_dir_err = "Erro: non se pode cambiar ó directorio";
+char *msg_dir_use = "Creando informe en";
+char *msg_cur_dir = "directorio actual";
+char *msg_hostname= "O nome da máquina no informe é";
+char *msg_ign_hist= "Ignorando rexistro anterior...";
+char *msg_no_hist = "Non atopo o arquivo histórico...";
+char *msg_get_hist= "Lendo arquivo...";
+char *msg_put_hist= "Gardando informacion de arquivo...";
+char *msg_hist_err= "Erro: Non podo abri-lo arquivo de arquivo";
+char *msg_bad_hist= "Erro: Ignorando un rexistro non válido no arquivo";
+char *msg_bad_conf= "Erro: non podo abri-lo arquivo de configuración";
+char *msg_bad_key = "Aviso: palabra chave errónea";
+char *msg_bad_date= "Erro: ignorando rexistro (data errónea)";
+char *msg_ign_nscp= "Saltando rexistro de cabeceira Netscape";
+char *msg_bad_rec = "Saltando rexistro erróneo";
+char *msg_no_vrec = "Non atopo ningun rexistro válido";
+char *msg_gen_rpt = "Xerando informe de";
+char *msg_gen_sum = "Xerando informe resumido";
+char *msg_get_data= "Lendo datos dunha execución previa...";
+char *msg_put_data= "Grabando datos da execución actual...";
+char *msg_no_data = "Datos de execución previa non atopados...";
+/*char *msg_bad_data= "Rexistro de datos inválidos";*/
+char *msg_bad_data= "Erro: Non podo carga-os datos da execución";
+char *msg_data_err= "Erro: Non podo graba-os datos da execución actual";
+char *msg_dup_data= "Aviso: Posibles datos duplicados atopados";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Non cache file specified, aborting...";
+char *msg_dns_nodb= "Erro: Unable to open DNS cache file";
+char *msg_dns_nolk= "Erro: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Non podo reservar suficiente memoria, quito os principais sitios";
+char *msg_nomem_tr= "Non podo reservar suficiente memoria, quito as principais ligazóns";
+char *msg_nomem_tu= "Non podo reservar suficiente memoria, quito os principais URLs";
+char *msg_nomem_tc= "Non podo reservar suficiente memoria, quito os principais países";
+char *msg_nomem_ta= "Non podo reservar suficiente memoria, quito os principais programas cliente";
+char *msg_nomem_tsr="Non podo reservar suficiente memoria, quito as principais cadeas de busca";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Erro engadindo nodo de servidor (díario), mo salto";
+char *msg_nomem_mh= "Erro engadindo nodo de servidor (mensual), mo salto";
+char *msg_nomem_u = "Erro engadindo nodo de URL, mo salto";
+char *msg_nomem_a = "Erro engadindo nodo de programa visor, mo salto";
+char *msg_nomem_r = "Erro engadindo nodo de ligazón orixe, mo salto";
+char *msg_nomem_sc= "Erro engadindo nodo de caenas de busca, mo salto";
+char *msg_nomem_i = "Erro adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Erro: Saltando rexistro de histórico grande de abondoh";
+char *msg_big_host= "Aviso: Cortando nome de máquina grande de abondo";
+char *msg_big_date= "Aviso: Cortando campo de data grande de abondo";
+char *msg_big_req = "Aviso: Cortando campo de peticion grande de abondo";
+char *msg_big_ref = "Aviso: Cortando campo de ligazón orixe grande de abondo";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Aviso: Una cadena sobrepasa o almacenamento disponible";
+
+/* misc errors */
+char *msg_no_open = "Erro: Non podo abrir un arquivo";
+
+/* Help display... */
+char *h_usage1 = "Forma de uso";
+char *h_usage2 = "[opcións] [arquivo histórico]";
+char *h_msg[]= {
+         "-h        = sacar esta mensaxe"                          ,
+         "-V        = ver informacion de versión"                  ,
+         "-v        = be verbose"                                  ,
+         "-d        = sacar información adicional para depuración" ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)"  ,
+         "-f        = procesa historicos fóra de secuencia (ver man)",
+         "-i        = ignorar arquivo"                             ,
+         "-p        = lembrar estado (incremental)"                ,
+         "-b        = ignorar estado (incremental)"                ,
+         "-q        = suprimir mensaxes de informacion"            ,
+         "-Q        = suprimir TÓDALAS mensaxes"                   ,
+         "-Y        = suprimir grafico de países"                  ,
+         "-G        = suprimir gráfico horario"                    ,
+         "-H        = suprimir estatísticas horarias"              ,
+         "-L        = suprimir lendas coloreadas dos gráficos"     ,
+         "-l num    = usar num líñas de fondo nos gráficos"        ,
+         "-m num    = especificar temporizador de visitas (seconds)",
+         "-T        = sacar informacion de horario"                ,
+         "-c arquivo= usar arquivo de configuracion 'arquivo'"     ,
+         "-n nome   = nome de máquina"                             ,
+         "-o dir    = directorio de saída"                         ,
+         "-t nome   = titula-lo informe 'nome'"                    ,
+         "-a nome   = acocha-lo programa cliente 'nome'"           ,
+         "-r nome   = acocha-la ligazón orixe 'nome'"              ,
+         "-s nome   = acocha-lo servidor 'nome'"                   ,
+         "-u nome   = acocha-lo URL 'nome'"                        ,
+         "-x nome   = usa extensión de arquivos 'nome'"            ,
+         "-O nome   = Omit page 'nome'"                            ,
+         "-P nome   = usa extensión de páxinas 'nome'"             ,
+         "-I nome   = Alias do índice 'nome'"                      ,
+         "-K n      = n months in summary table"                   ,
+         "-k n      = n months in summary graph"                   ,
+         "-A n      = Mostra-los n primeiros programas visores"    ,
+         "-C n      = Mostra-los n primeiros países"               ,
+         "-R n      = Mostra-las n primeiras ligazóns orixe"       ,
+         "-S n      = Mostra-los n primeiros clientes"             ,
+         "-U n      = Mostra-los n primeiros URLs"                 ,
+         "-e n      = Mostra-las n primeiras páxinas de entrada"   ,
+         "-E n      = Mostra-las n primeiras páxinas de saída"     ,
+         "-g n      = Group Domains to n levels"                   ,
+         "-X        = Hide individual sites"                       ,
+         "-z dir    = Use country flags in 'dir'"                  ,
+#ifdef USE_DNS
+         "-D nome   = Use DNS Cache file 'nome'"                   ,
+         "-N num    = Number of DNS processes (0=disable)"         ,
+         "-j        = Enable native GeoDB lookups"                 ,
+         "-J name   = Use GeoDB database 'nome'"                   ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nome   = Use GeoIP database 'nome'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Período resumido";
+char *msg_hhdr_gt = "Xerado o";
+
+/* main index strings */
+char *msg_main_us = "Resumo de uso de";
+/* char *msg_main_per= "Últimos 12 meses"; */
+char *msg_main_per= "Resumo por meses";
+char *msg_main_sum= "Resumo por meses";
+char *msg_main_da = "Medía díaria";
+char *msg_main_mt = "Totais mensuais";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Uso díario en";
+char *msg_hmth_hu = "Uso por horas en";
+
+/* table header strings */
+char *msg_h_by    = "Por";
+char *msg_h_avg   = "Medía";
+char *msg_h_max   = "Máx.";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totais";
+char *msg_h_day   = "Día";
+char *msg_h_mth   = "Mes";
+char *msg_h_hour  = "Hora";
+char *msg_h_hits  = "Accesos";
+char *msg_h_pages = "Páxinas";
+char *msg_h_visits= "Visitas";
+char *msg_h_files = "Arquivos";
+char *msg_h_sites = "Clientes";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Máquina";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Programa cliente";
+char *msg_h_ref   = "Ligazón orixe";
+char *msg_h_ctry  = "Países";
+char *msg_h_search= "Cadea de Búsca";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Estatísiticas díarias";
+char *msg_hlnk_hs = "Estatísticas por horas";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Clientes";
+char *msg_hlnk_a  = "Programas visores";
+char *msg_hlnk_c  = "Países";
+char *msg_hlnk_r  = "Ligazóns orixe";
+char *msg_hlnk_en = "Entrada";
+char *msg_hlnk_ex = "Saída";
+char *msg_hlnk_sr = "Busca";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+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_us = "Total Clientes";
+char *msg_mtot_ur = "Total Ligazóns orixe";
+char *msg_mtot_ua = "Total Programas visores";
+char *msg_mtot_uu = "Total URLs";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Accesos por Día";
+char *msg_mtot_mhh= "Accesos por Hora";
+char *msg_mtot_mfd= "Arquivos por Día";
+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_rc = "Accesos por código de resposta";
+
+/* daily total table */
+char *msg_dtot_ds = "Estatísticas diarias de";
+
+/* hourly total table */
+char *msg_htot_hs = "Estatísticas horarias de";
+
+/* country pie chart */
+char *msg_ctry_use= "Accesos por países en";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Os";
+char *msg_top_of  = "primeiros dun total de";
+char *msg_top_s   = "clientes";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "ligazóns orixe";
+char *msg_top_a   = "programas de cliente";
+char *msg_top_c   = "países";
+char *msg_top_en  = "Total Páxinas de Entrada";
+char *msg_top_ex  = "Total Páxinas de Saída";
+char *msg_top_sr  = "Total Cadeas de Busca";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+
+char *s_month[12]={ "Xan", "Feb", "Mar",
+                    "Abr", "Mai", "Xuñ",
+                    "Xul", "Ago", "Set",
+                    "Out", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Xaneiro",  "Febreiro", "Marzo",   "Abril",
+                    "Maio",      "Xuño",     "Xullo",    "Agosto",
+                    "Setembro","Outubro",  "Novembro","Decembro"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Código de resposta indefinido",     0 },
+         { "100 - Contínua",                     0 },
+         { "101 - Cambiando de protocolo",         0 },
+         { "200 - OK",                             0 },
+         { "201 - Creado",                        0 },
+         { "202 - Aceptado",                       0 },
+         { "203 - Información non autorizada",  0 },
+         { "204 - Non hai contido",                     0 },
+         { "205 - Contido renovado",                  0 },
+         { "206 - Contido parcial",                0 },
+         { "300 - Varias opcións",               0 },
+         { "301 - Movido permanentemente",              0 },
+         { "302 - Atopado",              0 },
+         { "303 - Ver outros",                      0 },
+         { "304 - Non modificado",                   0 },
+         { "305 - Utilizar proxy",                      0 },
+         { "307 - Movido temporalmente",              0 },
+         { "400 - Petición errónea",                    0 },
+         { "401 - Non autorizado",                   0 },
+         { "402 - É precisoun pago",               0 },
+         { "403 - Prohibido",                      0 },
+         { "404 - Non se atopa",                      0 },
+         { "405 - Método non permitido",             0 },
+         { "406 - Non aceptable",                 0 },
+         { "407 - É precisa a autentificación de proxy",  0 },
+         { "408 - Fín de tempo de espera",                0 },
+         { "409 - Conflicto",                       0 },
+         { "410 - Abandoado",                           0 },
+         { "411 - É precisa a lonxitude",                0 },
+         { "412 - Falla a condición previa",            0 },
+         { "413 - Entidad de petición grande de abondo",       0 },
+         { "414 - URL de petición demasiado longa",           0 },
+         { "415 - Medio non soportado",         0 },
+         { "416 - Non se pode satisface-lo rango pedido", 0 },
+         { "417 - Falla o que agardábase",              0 },
+         { "500 - Erro interno do servidor",          0 },
+         { "501 - Non implementado",                0 },
+         { "502 - Porta de ligazón incorrecta",                    0 },
+         { "503 - Servicio non disponible",            0 },
+         { "504 - Fín de tempo de espera para a porta de ligazón",      0 },
+         { "505 - Versión de HTTP non soportada",     0 } };
+
+char *msg_title   = "Estatísticas de uso para";
+char *msg_h_other = "Outro";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Non resolve/descoñecido",          0,0,0 },
+{ IDX_3C('c','o','m'),    "Comercial (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Educación (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "Goberno EUA (gov)",                0,0,0 },
+{ IDX_3C('i','n','t'),    "Internacional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "Exército EUA (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Redo (net)",                       0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizacións sen fins de lucro (org)",0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet (arpa)",                   0,0,0 },
+{ IDX_4C('n','a','t','o'),"OTAN",                             0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emiratos Árabes Unidos",           0,0,0 },
+{ IDX_2C('a','f'),        "Afganistán",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua e Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antillas Holandesas",              0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antártida",                        0,0,0 },
+{ IDX_2C('a','r'),        "Arxentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Americana",                  0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaixán",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia e Herzegovina",             0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Bélxica",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhután",                           0,0,0 },
+{ IDX_2C('b','v'),        "Illa Bouvet",                      0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorusia",                       0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canadá",                           0,0,0 },
+{ IDX_2C('c','c'),        "Illas Cocos (Keeling)",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "República Centroafricana",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Suíza",                            0,0,0 },
+{ IDX_2C('c','i'),        "Costa de Marfil",                  0,0,0 },
+{ IDX_2C('c','k'),        "Illas Cook",                       0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camerún",                          0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cabo Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Illa de Pascua",                   0,0,0 },
+{ IDX_2C('c','y'),        "Chipre",                           0,0,0 },
+{ IDX_2C('c','z'),        "República Checa",                  0,0,0 },
+{ IDX_2C('d','e'),        "Alemaña",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Dinamarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "República Dominicana",             0,0,0 },
+{ IDX_2C('d','z'),        "Arxelia",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Exipto",                           0,0,0 },
+{ IDX_2C('e','h'),        "Sáhara Occidental",                0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "España",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandía",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Malvinas",                         0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Illas Faroe",                      0,0,0 },
+{ IDX_2C('f','r'),        "Francia",                          0,0,0 },
+{ IDX_2C('g','a'),        "Gabón",                            0,0,0 },
+{ IDX_2C('g','b'),        "Gran Bretaña (RU)",                0,0,0 },
+{ IDX_2C('g','d'),        "Granada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Xeorxia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guinea francesa",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupe",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guinea Ecuatorial",                0,0,0 },
+{ IDX_2C('g','r'),        "Grecia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Illas S. Georgia e S. Sandwich",   0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guiana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Illas Heard e McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croacia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haití",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Índia",                            0,0,0 },
+{ IDX_2C('i','o'),        "Territorios Britanicos do Océano índico", 0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Irán",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islandía",                         0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Xamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Xordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Xapón",                            0,0,0 },
+{ IDX_2C('k','e'),        "Quenia",                           0,0,0 },
+{ IDX_2C('k','g'),        "Quirxizstán",                      0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts e Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Corea (Norte)",                    0,0,0 },
+{ IDX_2C('k','r'),        "Corea (Sur)",                      0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Illas Caimán",                     0,0,0 },
+{ IDX_2C('k','z'),        "Cazacstán",                        0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libano",                           0,0,0 },
+{ IDX_2C('l','c'),        "Santa Lucía",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituania",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburgo",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marrocos",                         0,0,0 },
+{ IDX_2C('m','c'),        "Mónaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldavia",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Illas Marshall",                   0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Illas Marianas do Norte",          0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauricio",                         0,0,0 },
+{ IDX_2C('m','v'),        "Maldivas",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "México",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaisia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nova Caledonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Illa Norfolk",                     0,0,0 },
+{ IDX_2C('n','g'),        "Nixeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holanda",                          0,0,0 },
+{ IDX_2C('n','o'),        "Noruega",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nova Celandia",                    0,0,0 },
+{ IDX_2C('o','m'),        "Omán",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panamá",                           0,0,0 },
+{ IDX_2C('p','e'),        "Perú",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinesia francesa",               0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nova Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipinas",                        0,0,0 },
+{ IDX_2C('p','k'),        "Paquistán",                        0,0,0 },
+{ IDX_2C('p','l'),        "Polonia",                          0,0,0 },
+{ IDX_2C('p','m'),        "Santos Pierre e Miquelon",         0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguai",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunión",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Federación rusa",                  0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudí",                     0,0,0 },
+{ IDX_2C('s','b'),        "Illas Sólomon",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudán",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suecia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sta. Elena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Eslovenia",                        0,0,0 },
+{ IDX_2C('s','j'),        "Illas Svalbard e Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "República Eslovaca",               0,0,0 },
+{ IDX_2C('s','l'),        "Serra Leona",                      0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "San Tomé e Principe",              0,0,0 },
+{ IDX_2C('s','u'),        "URSS (ant.)",                      0,0,0 },
+{ IDX_2C('s','v'),        "O Salvador",                       0,0,0 },
+{ IDX_2C('s','y'),        "Siria",                            0,0,0 },
+{ IDX_2C('s','z'),        "Swazilandía",                      0,0,0 },
+{ IDX_2C('t','c'),        "Illas Turcos e Caicos",            0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Territorios Franceses do Sur",     0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailandía",                        0,0,0 },
+{ IDX_2C('t','j'),        "Taxiquistán",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turcmenistán",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunez",                            0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turquía",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidade e Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucrania",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Reino Unido",                      0,0,0 },
+{ IDX_2C('u','m'),        "Illas Menores Exteriores Norteamericanas", 0,0,0 },
+{ IDX_2C('u','s'),        "Estados Unidos",                   0,0,0 },
+{ IDX_2C('u','y'),        "Uruguai",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbequistán",                      0,0,0 },
+{ IDX_2C('v','a'),        "Cidade Estado Vaticano (Sta. Se)", 0,0,0 },
+{ IDX_2C('v','c'),        "San Vincente e as Granadinas",     0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Illas Vírxenes (Británicas)",      0,0,0 },
+{ IDX_2C('v','i'),        "Illas Vírxenes (U.S.A)",           0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Illas Wallis e Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Iemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Maiotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Iugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Sudáfrica",                        0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
+
diff --git a/lang/webalizer_lang.german b/lang/webalizer_lang.german
new file mode 100644 (file)
index 0000000..4e3b68d
--- /dev/null
@@ -0,0 +1,666 @@
+/*
+   webalizer_lang.german
+
+   Webalizer V2.0x language support file for German.
+   28-May-1998 translated by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   31-May-1998 portions by Bernd Dau <Bernd.Dau@telekom.de>
+   31-May-1998 modified for level 1.1 support <brad@mrunix.net>
+   02-Jun-1998 translation level 1.1 by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   30-Jun-1998 typing errors fixed by Dirk Kocherscheidt <dirk@inpw.net>
+   23-Jul-1998 modified for level 1.2 support <brad@mrunix.net>
+   01-Aug-1998 translation redone by SysWolf <syswolf@syswolf.tm>
+   09-Oct-1998 changes added by Soren Gust <sgust@ithh.infoserv.de>
+   09-Oct-1998 changes added by Martin Kraemer <Martin.Kraemer@mch.sni.de>
+   24-Dec-1998 names of countries by Dirk Kocherscheidt <dirk@inpw.net>
+   24-Dec-1998 grammar and spelling by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   10-Jan-1999 improvements by Winfried Trümper <winni@xpilot.org>
+   05-Mrz-1999 improvements by Winfried Trümper <winni@xpilot.org>
+   06-Mrz-1999 new usage by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   09-Mrz-1999 new result codes by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   24-May-1999 fixed umlaut coding by Arne Blankerts <ABlankerts@freepoint.de>
+   11-Jun-1999 clean-up by Wolfgang Schemmel <wolfi@pobox.com>
+   12-Jun-1999 remove english terms by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   28-Jun-1999 Modified for level 1.3 support (Brad@mrunix.net)
+   05-Jul-1999 Add. German translations by Gerald Erdmann (gerald@stepman.com)
+   28-Jul-1999 fixed umlaut coding by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   04-Feb-2000 Minor fixes by Marcus Schommer <schommer@rdts.de>
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   05-Feb-2000 level 2.0 by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+   16-Jun-2003 grammar and spelling by Dirk Randhahn <dirait00@fht-esslingen.de>
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+   05-Jul-2008 level 2.2 by Dirk Meyer <dirk.meyer@dinoex.sub.org>
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "German";
+char *langcode  = "de";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "Einträge";
+char *msg_addresses="Adressen";
+char *msg_ignored = "ignoriert";
+char *msg_bad     = "ungültig";
+char *msg_in      = "in";
+char *msg_seconds = "Sekunden";
+
+/* progress and setup error messages */
+char *msg_log_err = "Fehler: Kann die Protokolldatei nicht öffnen.";
+char *msg_log_use = "Verwende Protokolldatei";
+char *msg_dir_err = "Fehler: Kann nicht in das Verzeichnis wechseln.";
+char *msg_dir_use = "Erzeuge Dateien in";
+char *msg_cur_dir = "dem aktuellen Verzeichnis";
+char *msg_hostname= "Der Rechnername für den Bericht ist";
+char *msg_ign_hist= "Ignoriere die vorhandenen historischen Daten...";
+char *msg_no_hist = "Datei mit historischen Daten wurde nicht gefunden...";
+char *msg_get_hist= "Lese die Datei mit den historischen Daten...";
+char *msg_put_hist= "Speichere die historischen Daten...";
+char *msg_hist_err= "Fehler: Kann die Datei mit den historischen Daten nicht schreiben.";
+char *msg_bad_hist= "Fehler: Ignoriere den ungültigen historischen Eintrag.";
+char *msg_bad_conf= "Fehler: Kann die Konfigurations-Datei nicht lesen.";
+char *msg_bad_key = "Warnung: unbekanntes Schlüsselwort";
+char *msg_bad_date= "Fehler: Der Eintrag wird übersprungen (Datum ungültig).";
+char *msg_ign_nscp= "Überspringe den Netscape Kopfeintrag.";
+char *msg_bad_rec = "Überspringe den ungültigen Eintrag.";
+char *msg_no_vrec = "Keine gültigen Einträge gefunden!";
+char *msg_gen_rpt = "Erzeuge den Bericht für";
+char *msg_gen_sum = "Erzeuge die Zusammenfassung";
+char *msg_get_data= "Lese die Daten vom letzten Programmlauf...";
+char *msg_put_data= "Speichere die Daten des aktuellen Programmlaufs...";
+char *msg_no_data = "Daten des letzten Programmlaufs wurden nicht gefunden...";
+char *msg_bad_data= "Fehler: Kann die Daten des letzten Programmlaufs nicht wiederherstellen";
+char *msg_data_err= "Fehler: Kann die Daten des letzten Programmlaufs nicht speichern";
+char *msg_dup_data= "Warnung: Möglicherweise wurden Daten doppelt gelesen.";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Es wurde keine Datei für den DNS-Cache angegeben, breche ab...";
+char *msg_dns_nodb= "Fehler: Die Datei für den DNS-Cache konnte nicht geöffnet werden.";
+char *msg_dns_nolk= "Fehler: Die Datei für den DNS-Cache konnte nicht verriegelt werden.";
+char *msg_dns_usec= "Benutze die Datei für den DNS-Cache";
+char *msg_dns_rslv= "DNS Abfrage";
+char *msg_dns_none= "Nichts zu bearbeiten";
+char *msg_dns_abrt= "DNS Unterstüzung nicht vorhanden, breche ab...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Fehler beim Öffnen der Datei";
+char *msg_geo_use = "Benutze";
+char *msg_geo_nolu= "Abfragen deaktiviert";
+char *msg_geo_dflt= "Standard";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nicht genug Speicher vorhanden, Top Sites wurden deaktiviert!";
+char *msg_nomem_tr= "Nicht genug Speicher vorhanden, Top Verweised wurden eaktiviert!";
+char *msg_nomem_tu= "Nicht genug Speicher vorhanden, Top URLs wurden deaktiviert!";
+char *msg_nomem_tc= "Nicht genug Speicher vorhanden, Top Countries wurden deaktiviert!";
+char *msg_nomem_ta= "Nicht genug Speicher vorhanden, Top User Agents wurden deaktiviert!";
+char *msg_nomem_tsr="Nicht genug Speicher vorhanden, Top Suchausdrücke wurden deaktiviert!";
+char *msg_nomem_ti= "Nicht genug Speicher vorhanden, Top Benutzer wurden deaktiviert!";
+char *msg_nomem_dh= "Fehler beim Hinzufügen Rechner-node (daily), überspringe den Eintrag.";
+char *msg_nomem_mh= "Fehler beim Hinzufügen Rechner-node (monthly), überspringe den Eintrag.";
+char *msg_nomem_u = "Fehler beim Hinzufügen URL-node, überspringe den Eintrag.";
+char *msg_nomem_a = "Fehler beim Hinzufügen User-Agent-node, überspringe den Eintrag.";
+char *msg_nomem_r = "Fehler beim Hinzufügen Verweis-node, überspringe den Eintrag.";
+char *msg_nomem_sc= "Fehler beim Hinzufügen Suchausdrucks-node, überspringe den Eintrag.";
+char *msg_nomem_i = "Fehler beim Hinzufügen Benutzer-node, überspringe den Eintrag.";
+
+/* log record errors */
+char *msg_big_rec = "Fehler: Überspringe einen überlangen Eintrag";
+char *msg_big_host= "Warnung: Überlanges Rechner-Feld wurde abgeschnitten";
+char *msg_big_date= "Warnung: Überlanges Datums-Feld wurde abgeschnitten";
+char *msg_big_req = "Warnung: Überlanges Request-Feld wurde abgeschnitten";
+char *msg_big_ref = "Warnung: Überlanges Verweis-Feld wurde abgeschnitten";
+char *msg_big_user= "Warnung: Überlanges Benutzer-Feld wurde abgeschnitten";
+char *msg_big_one = "Warnung: Überlangen Text wurde abgeschnitten";
+
+/* misc errors */
+char *msg_no_open = "Fehler: Kann die Datei nicht öffnen.";
+
+/* Help display... */
+char *h_usage1 = "Syntax";
+char *h_usage2 = "[Optionen] [Protokolldatei]";
+char *h_msg[]= {
+         "-h        = diese Hilfe ausgeben"                ,
+         "-V        = Version ausgeben"                    ,
+         "-v        = mehr Ausgaben zum Programablauf"     ,
+         "-d        = zusätzliche Kontrolldaten ausgeben"  ,
+         "-F type   = Art der Protokolldatei.  type= (clf | ftp | squid | w3c)",
+         "-f        = Ignoriere zeitliche Fehler bei Besuchen",
+         "-i        = Datei mit historischen Daten ignorieren",
+         "-p        = sichere den Programmzustand (inkrementell)",
+         "-b        = Ignoriere den gespeicherten Zwischenstand (incremental)",
+         "-q        = Statusmeldungen unterdrücken"        ,
+         "-Q        = alle Meldungen unterdrücken"         ,
+         "-Y        = Ländergrafik unterdrücken"           ,
+         "-G        = Stundengrafik unterdrücken"          ,
+         "-H        = Stundenstatistik unterdrücken"       ,
+         "-L        = Farbige Länderlegende unterdrücken"  ,
+         "-l anz    = 'Anz' Hintergrundlinien in Grafik verwenden",
+         "-m num    = Timeout für Besuch (seconds)"        ,
+         "-T        = Laufzeit ausgeben"                   ,
+         "-c datei  = Konfigurationsdatei 'datei' verwenden",
+         "-n name   = 'name' als Namen des Servers verwenden",
+         "-o dir    = Dateien im Verzeichnis 'dir' speichern",
+         "-t name   = Überschrift 'name' setzen"           ,
+         "-a name   = Anwenderprogramm 'name' unterdrücken",
+         "-r name   = Verweiser 'name' unterdrücken"       ,
+         "-s name   = Rechner 'name' unterdrücken"         ,
+         "-u name   = URL 'name' unterdrücken"             ,
+         "-x name   = Dateiendung 'name' verwenden"        ,
+         "-O name   = Lasse die Seite 'name' weg."         ,
+         "-P name   = Seitenendung 'name' verwenden"       ,
+         "-I name   = weiteren Name für den Index setzen"  ,
+         "-K anz    = anz months in summary table"         ,
+         "-k anz    = anz months in summary graph"         ,
+         "-A anz    = die Top 'anz' Anwenderprogramme darstellen",
+         "-C anz    = die Top 'anz' Länder darstellen"     ,
+         "-R anz    = die Top 'anz' Verweiser darstellen"  ,
+         "-S anz    = die Top 'anz' Rechner (IPs) darstellen",
+         "-U anz    = die Top 'anz' URLs darstellen"       ,
+         "-e anz    = die Top 'anz' Startseiten darstellen",
+         "-E anz    = die Top 'anz' Endseiten darstellen"  ,
+         "-g anz    = Gruppiere Domänen zu 'anz' Ebenen"   ,
+         "-X        = Verstecke einzelne Rechner"          ,
+         "-z dir    = Verwende Fahnen für die Länder in 'dir'",
+#ifdef USE_DNS
+         "-D name   = Benutze die Datei 'name' für DNS-Cache"  ,
+         "-N num    = Anzahl Prozesse für DNS Abfragen (0=deaktiviert)",
+         "-j        = Aktiviere interne GeoDB Abfragen"    ,
+         "-J name   = Benutze GeoDB Datenbank 'name'"      ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Aktiviere GeoIP Abfragen"            ,
+         "-W name   = Benutze GeoIP Datenbank 'name'"      ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Auslastungsstatistik f&uuml;r den Zeitraum";
+char *msg_hhdr_gt = "Erstellt am";
+
+/* main index strings */
+char *msg_main_us = "Zusammenfassung der Anfragen an";
+/* char *msg_main_per= "Letzte 12 Monate"; */
+char *msg_main_per= "Zusammenfassung nach Monaten";
+char *msg_main_sum= "Zusammenfassung nach Monaten";
+char *msg_main_da = "Tagesdurchschnitt";
+char *msg_main_mt = "Monats-Summe";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Tages-Statistik im Monat";
+char *msg_hmth_hu = "Stunden-Statistik im Monat";
+
+/* table header strings */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *msg_h_by    = "sortiert nach";
+char *msg_h_avg   = "Schnitt";
+char *msg_h_max   = "Maximum";
+char *msg_h_total = "Summe";
+char *msg_h_totals= "Summen";
+char *msg_h_day   = "Tag";
+char *msg_h_mth   = "Monat";
+char *msg_h_hour  = "Stunde";
+char *msg_h_hits  = "Anfragen";
+char *msg_h_pages = "Seiten";
+char *msg_h_visits= "Besuche";
+char *msg_h_files = "Dateien";
+char *msg_h_sites = "Rechner";
+char *msg_h_xfer  = "kb";
+char *msg_h_hname = "Rechnername";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Anwenderprogramm";
+char *msg_h_ref   = "Verweise";
+char *msg_h_ctry  = "Land";
+char *msg_h_search= "Suche";
+char *msg_h_uname = "Benutzer";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Tages-Statistik";
+char *msg_hlnk_hs = "Stunden-Statistik";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Rechner (IP-Adressen)";
+char *msg_hlnk_a  = "Anwenderprogramme";
+char *msg_hlnk_c  = "L&auml;nder";
+char *msg_hlnk_r  = "Verweise";
+char *msg_hlnk_en = "Eingang";
+char *msg_hlnk_ex = "Ausgang";
+char *msg_hlnk_sr = "Suche";
+char *msg_hlnk_i  = "Benutzer";
+
+/* monthly total table */
+char *msg_mtot_ms = "Monats-Statistik f&uuml;r";
+char *msg_mtot_th = "Summe der Anfragen";
+char *msg_mtot_tf = "Summe der Dateien";
+char *msg_mtot_tx = "Summe in kb";
+char *msg_mtot_us = "Summe der unterschiedlichen Rechner (IP-Adressen)";
+char *msg_mtot_ur = "Summe der unterschiedlichen Verweise";
+char *msg_mtot_ua = "Summe der unterschiedlichen Anwenderprogramme";
+char *msg_mtot_uu = "Summe der unterschiedlichen URLs";
+char *msg_mtot_ui = "Summe der unterschiedlichen Benutzer";
+char *msg_mtot_mhd= "Anfragen pro Tag";
+char *msg_mtot_mhh= "Anfragen pro Stunde";
+char *msg_mtot_mfd= "Dateien pro Tag";
+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_rc = "Anfragen nach Status-Codes";
+
+/* daily total table */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *msg_dtot_ds = "Tages-Statistik im Monat";
+
+/* hourly total table */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *msg_htot_hs = "Stunden-Statistik im Monat";
+
+/* country pie chart */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *msg_ctry_use= "Anfragen aus Laendern im Monat";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "von";
+char *msg_top_s   = "Rechnern (IP-Adressen)";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "Verweise";
+char *msg_top_a   = "Anwenderprogramme";
+char *msg_top_c   = "Ländern";
+char *msg_top_en  = "Eingangsseiten Gesamt";
+char *msg_top_ex  = "Ausgangsseiten Gesamt";
+char *msg_top_sr  = "Suchausdrücke Gesamt";
+char *msg_top_i   = "Benutzer Gesamt";
+char *msg_v_sites = "Zeige alle Rechner (IP-Adressen)";
+char *msg_v_urls  = "Zeige alle URLs";
+char *msg_v_refs  = "Zeige alle Verweise";
+char *msg_v_agents= "Zeige alle Anwenderprogramme";
+char *msg_v_search= "Zeige alle Suchausdrücke";
+char *msg_v_users = "Zeige alle Benutzer";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Mai", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Dez"};
+
+/* long month names - can be any length */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+char *l_month[12]={ "Januar",    "Februar",  "Maerz",    "April",
+                    "Mai",       "Juni",     "Juli",     "August",
+                    "September", "Oktober",  "November", "Dezember"};
+
+/* Nur Ligaturen verwenden, viele Browser haben nicht ISO_8859-1 */
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Unbekannter Antwort-Code",                                                      0 },
+         { "Code 100 - Weiter",                                                             0 },
+         { "Code 101 - Wechsel des Protokolls",                                             0 },
+         { "Code 200 - OK",                                                                 0 },
+         { "Code 201 - Erzeugt",                                                            0 },
+         { "Code 202 - Angenommen",                                                         0 },
+         { "Code 203 - Keine endg&uuml;ltige Information",                                  0 },
+         { "Code 204 - Kein Inhalt",                                                        0 },
+         { "Code 205 - L&ouml;sche Inhalt",                                                 0 },
+         { "Code 206 - Unvollst&auml;ndiger Inhalt",                                        0 },
+         { "Code 300 - Mehrere Auswahlm&ouml;glichkeiten",                                  0 },
+         { "Code 301 - Die Seite wurde dauerhaft an einen andere Stelle verlegt",           0 },
+         { "Code 302 - Die Seite wurde an einer anderer Stelle gefunden",                   0 },
+         { "Code 303 - Hole die Seite von einer anderen Position",                          0 },
+         { "Code 304 - Die Seite wurde nicht ge&auml;ndert",                                0 },
+         { "Code 305 - Die Benutzung des Proxys ist erforderlich",                          0 },
+         { "Code 307 - Die Seite wurde vor&uuml;bergehend an eine andere Stelle verlegt",   0 },
+         { "Code 400 - Ung&uuml;ltige Anfrage",                                             0 },
+         { "Code 401 - Die Authentifizierung fehlt oder ist ungültig",                      0 },
+         { "Code 402 - Bezahlung ist erforderlich",                                         0 },
+         { "Code 403 - Die Antwort wurde verweigert",                                       0 },
+         { "Code 404 - Die Seite wurde nicht gefunden!",                                    0 },
+         { "Code 405 - Die Methode ist nicht erlaubt",                                      0 },
+         { "Code 406 - Nicht akzeptabel",                                                   0 },
+         { "Code 407 - Eine Proxy-Autorisierung ist erforderlich",                          0 },
+         { "Code 408 - Eine Zeit&uuml;berschreitung erfolgte durch das Anwenderprogramm ...", 0 },
+         { "Code 409 - Konflikt",                                                           0 },
+         { "Code 410 - Verloren",                                                           0 },
+         { "Code 411 - Eine L&auml;ngenangabe ist erforderlich",                            0 },
+         { "Code 412 - Fehlende Voraussetzung",                                             0 },
+         { "Code 413 - Request-Entity zu gro&szlig;",                                       0 },
+         { "Code 414 - Request-URI zu lang",                                                0 },
+         { "Code 415 - Nicht unterst&uuml;tzter Medientyp",                                 0 },
+         { "Code 416 - Angegebener Bereich nicht in Ordnung",                               0 },
+         { "Code 417 - Die Erwartung ist fehlgeschlagen",                                   0 },
+         { "Code 500 - Interner Server-Fehler ist aufgetreten (CGI?)",                      0 },
+         { "Code 501 - Nicht implementiert",                                                0 },
+         { "Code 502 - Fehlerhaftes Gateway",                                               0 },
+         { "Code 503 - Der Service ist nicht verf&uuml;gbar",                               0 },
+         { "Code 504 - Gateway Zeit&uuml;berschreitung...",                                 0 },
+         { "Code 505 - Die HTTP-Version wird nicht unterst&uuml;tzt",                       0 } };
+
+/* New for 1.1 */
+
+char *msg_title   = "Aufruf-Statistik f&uuml;r";
+char *msg_h_other = "Sonstige";
+/* Country codes (previously in ctry.h header file) */
+
+/* Plural konstant beibehalten */
+/* Keine Umlaute, gd 1.3 kann sie nicht darstellen */
+struct country_code ctry[] = {
+{ 0,                      "Unbekannte Adressen",              0,0,0 },
+{ IDX_3C('c','o','m'),    "Firmen (com)",                     0,0,0 },
+{ IDX_3C('e','d','u'),    "Univers./Schulen (edu)",           0,0,0 },
+{ IDX_3C('g','o','v'),    "USA-Behoerden (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "Internationale Einrichtungen (int)",0,0,0 },
+{ IDX_3C('m','i','l'),    "USA-Militaer (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Netzwerke (net)",                  0,0,0 },
+{ IDX_3C('o','r','g'),    "Organisationen (org)",             0,0,0 },
+{ IDX_3C('b','i','z'),    "Allgemeine Firmen (biz)",          0,0,0 },
+{ IDX_3C('c','a','t'),    "Katalanische Gemeinschaft (cat)",  0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Adressregister (tel)",             0,0,0 },
+{ IDX_4C('a','e','r','o'),"Organisationen der Luftfahrt (aero)",0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asien/Pazifik Gemeinschaft (asia)",0,0,0 },
+{ IDX_4C('c','o','o','p'),"Gesellschaften (coop)",            0,0,0 },
+{ IDX_4C('i','n','f','o'),"Informationsanbieter (info)",      0,0,0 },
+{ IDX_4C('j','o','b','s'),"Stellenangebote (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Mobile Geräte (mobi)",             0,0,0 },
+{ IDX_4C('n','a','m','e'),"Privatpersonen (name)",            0,0,0 },
+{ IDX_4C('a','r','p','a'),"Alte Arpanet-Adressen (arpa)",     0,0,0 },
+{ IDX_4C('n','a','t','o'),"NATO-Adressen (nato)",             0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museen (museum)",         0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Reise-Industrie (travel)",0,0,0 },
+{ IDX_2C('a','c'),        "Ascension",                        0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Arabische Emirate",                0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua und Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albanien",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armenien",                         0,0,0 },
+{ IDX_2C('a','n'),        "Niederlaendische Antillen",        0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktis",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentinien",                      0,0,0 },
+{ IDX_2C('a','s'),        "Amerikanisch Samoa",               0,0,0 },
+{ IDX_2C('a','t'),        "Oesterreich",                      0,0,0 },
+{ IDX_2C('a','u'),        "Australien",                       0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Åland",                            0,0,0 },
+{ IDX_2C('a','z'),        "Aserbaidschan",                    0,0,0 },
+{ IDX_2C('b','a'),        "Bosnien und Herzegowina",          0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesch",                      0,0,0 },
+{ IDX_2C('b','e'),        "Belgien",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgarien",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint-Barthélemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei",                           0,0,0 },
+{ IDX_2C('b','o'),        "Bolivien",                         0,0,0 },
+{ IDX_2C('b','r'),        "Brasilien",                        0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Insel",                     0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Weissrussland",                    0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Kokos-Inseln",                     0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Zentralafrikanische Republik",     0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Schweiz",                          0,0,0 },
+{ IDX_2C('c','i'),        "Elfenbeinkueste",                  0,0,0 },
+{ IDX_2C('c','k'),        "Cook-Inseln",                      0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbien",                        0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Kapverden",                        0,0,0 },
+{ IDX_2C('c','x'),        "Weihnachtsinsel",                  0,0,0 },
+{ IDX_2C('c','y'),        "Zypern",                           0,0,0 },
+{ IDX_2C('c','z'),        "Tschechien",                       0,0,0 },
+{ IDX_2C('d','e'),        "Deutschland",                      0,0,0 },
+{ IDX_2C('d','j'),        "Djibuti",                          0,0,0 },
+{ IDX_2C('d','k'),        "Daenemark",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikanische Republik",          0,0,0 },
+{ IDX_2C('d','z'),        "Algerien",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ekuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estland",                          0,0,0 },
+{ IDX_2C('e','g'),        "Aegypten",                         0,0,0 },
+{ IDX_2C('e','h'),        "West-Sahara",                      0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spanien",                          0,0,0 },
+{ IDX_2C('e','t'),        "Aethiopien",                       0,0,0 },
+{ IDX_2C('e','u'),        "Europäische Union",                0,0,0 },
+{ IDX_2C('f','i'),        "Finnland",                         0,0,0 },
+{ IDX_2C('f','j'),        "Fidschi-Inseln",                   0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Inseln",                  0,0,0 },
+{ IDX_2C('f','m'),        "Mikronesien",                      0,0,0 },
+{ IDX_2C('f','o'),        "Faeroeer Inseln",                  0,0,0 },
+{ IDX_2C('f','r'),        "Frankreich",                       0,0,0 },
+{ IDX_2C('g','a'),        "Gabun",                            0,0,0 },
+{ IDX_2C('g','b'),        "Grossbritannien (alt)",            0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgien",                         0,0,0 },
+{ IDX_2C('g','f'),        "Franz. Guayana",                   0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Groenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Aequatorial Guinea",               0,0,0 },
+{ IDX_2C('g','r'),        "Griechenland",                     0,0,0 },
+{ IDX_2C('g','s'),        "Georgien und Sandwich Inseln",     0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard und McDonald Inseln",        0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroatien",                         0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungarn",                           0,0,0 },
+{ IDX_2C('i','d'),        "Indonesien",                       0,0,0 },
+{ IDX_2C('i','e'),        "Irland",                           0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indien",                           0,0,0 },
+{ IDX_2C('i','o'),        "Brit. Indischer Ozean",            0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Italien",                          0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaika",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordanien",                        0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirgistan",                        0,0,0 },
+{ IDX_2C('k','h'),        "Kambodscha",                       0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Komoren",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts und Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Nordkorea",                        0,0,0 },
+{ IDX_2C('k','r'),        "Suedkorea",                        0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Inseln",                    0,0,0 },
+{ IDX_2C('k','z'),        "Kasachstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Luzia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litauen",                          0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Lettland",                         0,0,0 },
+{ IDX_2C('l','y'),        "Libyen",                           0,0,0 },
+{ IDX_2C('m','a'),        "Marokko",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldawien",                        0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (französisch)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Inseln",                  0,0,0 },
+{ IDX_2C('m','k'),        "Mazedonien",                       0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar (Birma)",                  0,0,0 },
+{ IDX_2C('m','n'),        "Mongolei",                         0,0,0 },
+{ IDX_2C('m','o'),        "Makao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Nord-Marianen",                    0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauretanien",                      0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Malediven",                        0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexiko",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysien",                        0,0,0 },
+{ IDX_2C('m','z'),        "Mosambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Neukaledonien",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Insel",                    0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Niederlande",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norwegen",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Neuseeland",                       0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Franz. Polynesien",                0,0,0 },
+{ IDX_2C('p','g'),        "Papua Neu-Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippinen",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polen",                            0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre und Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palästinas",                       0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau (Belau)",                    0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumaenien",                        0,0,0 },
+{ IDX_2C('r','s'),        "Serbien",                          0,0,0 },
+{ IDX_2C('r','u'),        "Russische Foederation",            0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabien",                    0,0,0 },
+{ IDX_2C('s','b'),        "Solomonen",                        0,0,0 },
+{ IDX_2C('s','c'),        "Seychellen",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Schweden",                         0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sankt Helena",                     0,0,0 },
+{ IDX_2C('s','i'),        "Slowenien",                        0,0,0 },
+{ IDX_2C('s','j'),        "Spitzbergen und Jan Mayen Inseln", 0,0,0 },
+{ IDX_2C('s','k'),        "Slowakei",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome und Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "UdSSR (alt)",                      0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrien",                           0,0,0 },
+{ IDX_2C('s','z'),        "Swasiland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks und Caicos Inseln",          0,0,0 },
+{ IDX_2C('t','d'),        "Tschad",                           0,0,0 },
+{ IDX_2C('t','f'),        "Franz. Sued-Territorien",          0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tadschikistan",                    0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunesien",                         0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Ost-Timor",                        0,0,0 },
+{ IDX_2C('t','r'),        "Tuerkei",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad und Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tansania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda (alt)",                     0,0,0 },
+{ IDX_2C('u','k'),        "Grossbritannien",                  0,0,0 },
+{ IDX_2C('u','m'),        "USA Inseln",                       0,0,0 },
+{ IDX_2C('u','s'),        "USA",                              0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Usbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikan",                          0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent und Grenadinen",     0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Jungferninseln (Britisch)",        0,0,0 },
+{ IDX_2C('v','i'),        "Jungferninseln (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu (Neue Hebriden)",          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis und Futuna Inseln",         0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslawien (Serbien)",            0,0,0 },
+{ IDX_2C('z','a'),        "Suedafrika",                       0,0,0 },
+{ IDX_2C('z','m'),        "Sambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Simbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymisierter Proxy",             0,0,0 },
+{ IDX_2C('a','2'),        "Satelliten Provider",              0,0,0 },
+{ IDX_2C('o','1'),        "Sonstige",                         0,0,0 },
+{ IDX_2C('a','p'),        "Gebiet Asien/Pacifik",             0,0,0 },
+{ IDX_3C('l','a','n'),    "Loakales Netzwerk (lan)",          0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.greek b/lang/webalizer_lang.greek
new file mode 100644 (file)
index 0000000..f127db9
--- /dev/null
@@ -0,0 +1,631 @@
+/*
+   webalizer_lang.greek
+
+   Webalizer V2.0x Language Support file for Greek
+   19-Aug-1999 Translated in Greek by Christos Cheretakis (xalkina@otenet.gr)
+   22-Feb-2000 Modified for level 2.0x support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Greek";
+char *langcode  = "el";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "åããñáöÝò";
+char *msg_addresses="addresses";
+char *msg_ignored = "áãíïÞèçêáí";
+char *msg_bad     = "ëÜèïò";
+char *msg_in      = "óå";
+char *msg_seconds = "äåõôåñüëåðôá";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username field";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F        = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Ðåñßïäïò áíáöïñÜò";
+char *msg_hhdr_gt = "Çìåñïìçíßá ðáñáãùãÞò";
+
+/* main index strings */
+char *msg_main_us = "ÓôáôéóôéêÜ ãéá ôï óýóôçìá";
+/* char *msg_main_per= "ïé ôåëåõôáßïé 12 ìÞíåò"; */
+char *msg_main_per= "ÓõãêåíôñùôéêÜ óôïé÷åßá áíÜ ìÞíá";
+char *msg_main_sum= "ÓõãêåíôñùôéêÜ óôïé÷åßá áíÜ ìÞíá";
+char *msg_main_da = "ÌÝóïé üñïé áíÜ çìÝñá";
+char *msg_main_mt = "Ìçíéáßá óýíïëá";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Óôïé÷åßá áíÜ çìÝñá ãéá: ";
+char *msg_hmth_hu = "Óôïé÷åßá áíÜ þñá ãéá: ";
+
+/* table header strings */
+char *msg_h_by    = "ÁíÜ";
+char *msg_h_avg   = "ÌÝóï";
+char *msg_h_max   = "ÌÝãéóôï";
+char *msg_h_total = "Óýíïëï";
+char *msg_h_totals= "Óýíïëá";
+char *msg_h_day   = "ÇìÝñá";
+char *msg_h_mth   = "ÌÞíáò";
+char *msg_h_hour  = "¿ñá";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Óåëßäåò";
+char *msg_h_visits= "ÅðéóêÝøåéò";
+char *msg_h_files = "Áñ÷åßá";
+char *msg_h_sites = "ÓõóôÞìáôá";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Óýóôçìá";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Ðñüãñáììá";
+char *msg_h_ref   = "ÁíáöÝñùí";
+char *msg_h_ctry  = "×þñá";
+char *msg_h_search= "ÁíáæÞôçóç";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "ÁíÜ çìÝñá";
+char *msg_hlnk_hs = "ÁíÜ þñá";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "ÓõóôÞìáôá";
+char *msg_hlnk_a  = "ÐñïãñÜììáôá";
+char *msg_hlnk_c  = "×þñåò";
+char *msg_hlnk_r  = "ÁíáöÝñïíôåò";
+char *msg_hlnk_en = "Óçìåßá åéóüäïõ";
+char *msg_hlnk_ex = "Óçìåßá åîüäïõ";
+char *msg_hlnk_sr = "ÁíáæçôÞóåéò";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+char *msg_mtot_ms = "ÓõãêåíôñùôéêÜ óôïé÷åßá ãéá ôï ìÞíá";
+char *msg_mtot_th = "ÓõíïëéêÜ Hits";
+char *msg_mtot_tf = "Óýíïëï áñ÷åßùí";
+char *msg_mtot_tx = "Óýíïëï KBytes";
+char *msg_mtot_us = "Óýíïëï äéáöïñåôéêþí óõóôçìÜôùí";
+char *msg_mtot_ur = "Óýíïëï äéáöïñåôéêþí áíáöåñüíôùí";
+char *msg_mtot_ua = "Óýíïëï äéáöïñåôéêþí ðñïãñáììÜôùí";
+char *msg_mtot_uu = "Óýíïëï äéáöïñåôéêþí URLs";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Hits áíÜ çìÝñá";
+char *msg_mtot_mhh= "Hits áíÜ þñá";
+char *msg_mtot_mfd= "Áñ÷åßá áíÜ çìÝñá";
+char *msg_mtot_mpd= "Óåëßäåò áíÜ çìÝñá";
+char *msg_mtot_msd= "Sites per Day";
+char *msg_mtot_mvd= "ÅðéóêÝøåéò áíÜ çìÝñá";
+char *msg_mtot_mkd= "KBytes áíÜ çìÝñá";
+char *msg_mtot_rc = "Hits áðü ôï áðïôÝëåóìá";
+
+/* daily total table */
+char *msg_dtot_ds = "ÓõãêåíôñùôéêÜ óôïé÷åßá áíÜ çìÝñá -";
+
+/* hourly total table */
+char *msg_htot_hs = "ÓõãêåíôñùôéêÜ óôïé÷åßá áíÜ þñá -";
+
+/* country pie chart */
+char *msg_ctry_use= "ÓõãêåíôñùôéêÜ óôïé÷åßá áíÜ ÷þñá -";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Ðñþôá";
+char *msg_top_of  = "áðü";
+char *msg_top_s   = "óõóôÞìáôá";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "áíáöÝñïíôåò";
+char *msg_top_a   = "ðñïãñÜììáôá";
+char *msg_top_c   = "÷þñåò";
+char *msg_top_en  = "óçìåßá åéóüäïõ";
+char *msg_top_ex  = "óçìåßá åîüäïõ";
+char *msg_top_sr  = "áíáæçôÞóåéò";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Éáí", "Öåâ", "ÌÜñ",
+                    "Áðñ", "ÌÜé", "Éïí",
+                    "Éïë", "Áýã", "Óåð",
+                    "Ïêô", "ÍïÝ", "Äåê"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "ÉáíïõÜñéïò",  "ÖåâñïõÜñéïò", "ÌÜñôéïò",   "Áðñßëéïò",
+                    "ÌÜéïò",       "Éïýíéïò",     "Éïýëéïò",   "Áýãïõóôïò",
+                    "ÓåðôÝìâñéïò", "Ïêôþâñéïò",   "ÍïÝìâñéïò", "ÄåêÝìâñéïò"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "ÓôáôéóôéêÜ óôïé÷åßá ãéá ôï óýóôçìá";
+char *msg_h_other = "¶ëëï";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "¶ãíùóôç",                          0,0,0 },
+{ IDX_3C('c','o','m'),    "Åôáéñåßá (Ç.Ð.Á.)",                0,0,0 },
+{ IDX_3C('e','d','u'),    "Åêðáéäåõôéêü ºäñõìá (Ç.Ð.Á.)",     0,0,0 },
+{ IDX_3C('g','o','v'),    "ÊñáôéêÞ Õðçñåóßá (Ç.Ð.Á.)",        0,0,0 },
+{ IDX_3C('i','n','t'),    "ÄéåèíÞò Ïñãáíéóìüò",               0,0,0 },
+{ IDX_3C('m','i','l'),    "Óôñáôéùôéêü Óýóôçìá (Ç.Ð.Á.)",     0,0,0 },
+{ IDX_3C('n','e','t'),    "Äéêôõáêüò Ïñãáíéóìüò",             0,0,0 },
+{ IDX_3C('o','r','g'),    "¶ëëïò Ïñãáíéóìüò",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"ÐáëéÝò äéåõèýíóåéò (arpa)",        0,0,0 },
+{ IDX_4C('n','a','t','o'),"Í.Á.Ô.Ï.",                         0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Áíäüñá",                           0,0,0 },
+{ IDX_2C('a','e'),        "ÇìùíÝíá ÁñáâéêÜ ÅìéñÜôá",          0,0,0 },
+{ IDX_2C('a','f'),        "ÁöãáíéóôÜí",                       0,0,0 },
+{ IDX_2C('a','g'),        "Áíôßãêïõá êáé Ìðáñìðïýíôá",        0,0,0 },
+{ IDX_2C('a','i'),        "Áíãêïõßëá",                        0,0,0 },
+{ IDX_2C('a','l'),        "Áëâáíßá",                          0,0,0 },
+{ IDX_2C('a','m'),        "Áñìåíßá",                          0,0,0 },
+{ IDX_2C('a','n'),        "ÏëëáíäéêÝò Áíôßëåò",               0,0,0 },
+{ IDX_2C('a','o'),        "Áíãêüëá",                          0,0,0 },
+{ IDX_2C('a','q'),        "ÁíôáñêôéêÞ",                       0,0,0 },
+{ IDX_2C('a','r'),        "ÁñãåíôéíÞ",                        0,0,0 },
+{ IDX_2C('a','s'),        "ÁìåñéêáíéêÞ Óáìüá",                0,0,0 },
+{ IDX_2C('a','t'),        "Áõóôñßá",                          0,0,0 },
+{ IDX_2C('a','u'),        "Áõóôñáëßá",                        0,0,0 },
+{ IDX_2C('a','w'),        "Áñïýìðá",                          0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "ÁæåñìðáúôæÜí",                     0,0,0 },
+{ IDX_2C('b','a'),        "Âïóíßá êáé Åñæåãïâßíç",            0,0,0 },
+{ IDX_2C('b','b'),        "Ìðáñìðáíôüò",                      0,0,0 },
+{ IDX_2C('b','d'),        "ÌðáãêëáíôÝò",                      0,0,0 },
+{ IDX_2C('b','e'),        "ÂÝëãéï",                           0,0,0 },
+{ IDX_2C('b','f'),        "Ìðïõñêßíá ÖÜóï",                   0,0,0 },
+{ IDX_2C('b','g'),        "Âïõëãáñßá",                        0,0,0 },
+{ IDX_2C('b','h'),        "Ìðá÷ñÝéí",                         0,0,0 },
+{ IDX_2C('b','i'),        "Ìðïõñïýíôé",                       0,0,0 },
+{ IDX_2C('b','j'),        "Ìðåíßí",                           0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Âåñìïýäåò",                        0,0,0 },
+{ IDX_2C('b','n'),        "ÌðñïõíÝé Íôáñïýóáëáì",             0,0,0 },
+{ IDX_2C('b','o'),        "Âïëéâßá",                          0,0,0 },
+{ IDX_2C('b','r'),        "Âñáæéëßá",                         0,0,0 },
+{ IDX_2C('b','s'),        "Ìðá÷Üìåò",                         0,0,0 },
+{ IDX_2C('b','t'),        "ÌðïõôÜí",                          0,0,0 },
+{ IDX_2C('b','v'),        "ÌðïõâÝô",                          0,0,0 },
+{ IDX_2C('b','w'),        "ÌðïôóïõÜíá",                       0,0,0 },
+{ IDX_2C('b','y'),        "Ëåõêïñùóßá",                       0,0,0 },
+{ IDX_2C('b','z'),        "Ìðåëßæ",                           0,0,0 },
+{ IDX_2C('c','a'),        "ÊáíáäÜò",                          0,0,0 },
+{ IDX_2C('c','c'),        "ÍçóéÜ Êüêïò",                      0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "ÊåíôñéêÞ ÁöñéêáíéêÞ Äçìïêñáôßá",   0,0,0 },
+{ IDX_2C('c','g'),        "Êïãêü",                            0,0,0 },
+{ IDX_2C('c','h'),        "Åëâåôßá",                          0,0,0 },
+{ IDX_2C('c','i'),        "ÁêôÞ Åëåöáíôïóôïý",                0,0,0 },
+{ IDX_2C('c','k'),        "ÍçóéÜ Êïýê",                       0,0,0 },
+{ IDX_2C('c','l'),        "×éëÞ",                             0,0,0 },
+{ IDX_2C('c','m'),        "Êáìåñïýí",                         0,0,0 },
+{ IDX_2C('c','n'),        "Êßíá",                             0,0,0 },
+{ IDX_2C('c','o'),        "Êïëïìâßá",                         0,0,0 },
+{ IDX_2C('c','r'),        "Êüóôá Ñßêá",                       0,0,0 },
+{ IDX_2C('c','u'),        "Êïýâá",                            0,0,0 },
+{ IDX_2C('c','v'),        "ÐñÜóéíï ÁêñùôÞñéï",                0,0,0 },
+{ IDX_2C('c','x'),        "ÍçóéÜ ôùí ×ñéóôïõãÝííùí",          0,0,0 },
+{ IDX_2C('c','y'),        "Êýðñïò",                           0,0,0 },
+{ IDX_2C('c','z'),        "Ôóå÷ßá",                           0,0,0 },
+{ IDX_2C('d','e'),        "Ãåñìáíßá",                         0,0,0 },
+{ IDX_2C('d','j'),        "Ôæéìðïõôß",                        0,0,0 },
+{ IDX_2C('d','k'),        "Äáíßá",                            0,0,0 },
+{ IDX_2C('d','m'),        "Äïìéíßêá",                         0,0,0 },
+{ IDX_2C('d','o'),        "ÄïìéíéêáíéêÞ Äçìïêñáôßá",          0,0,0 },
+{ IDX_2C('d','z'),        "Áëãåñßá",                          0,0,0 },
+{ IDX_2C('e','c'),        "Åêïõáäüñ",                         0,0,0 },
+{ IDX_2C('e','e'),        "Åóèïíßá",                          0,0,0 },
+{ IDX_2C('e','g'),        "Áßãõðôïò",                         0,0,0 },
+{ IDX_2C('e','h'),        "ÄõôéêÞ Óá÷Üñá",                    0,0,0 },
+{ IDX_2C('e','r'),        "Åñõèñáßá",                         0,0,0 },
+{ IDX_2C('e','s'),        "Éóðáíßá",                          0,0,0 },
+{ IDX_2C('e','t'),        "Áéèéïðßá",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Öéëáíäßá",                         0,0,0 },
+{ IDX_2C('f','j'),        "Ößôæé",                            0,0,0 },
+{ IDX_2C('f','k'),        "ÍçóéÜ Öüêëáíô",                    0,0,0 },
+{ IDX_2C('f','m'),        "Ìéêñïíçóßá",                       0,0,0 },
+{ IDX_2C('f','o'),        "ÍçóéÜ Öáñüå",                      0,0,0 },
+{ IDX_2C('f','r'),        "Ãáëëßá",                           0,0,0 },
+{ IDX_2C('g','a'),        "Ãêáìðüí",                          0,0,0 },
+{ IDX_2C('g','b'),        "ÌåãÜëç Âñåôáíßá",                  0,0,0 },
+{ IDX_2C('g','d'),        "ÃñåíÜäá",                          0,0,0 },
+{ IDX_2C('g','e'),        "Ãåùñãßá",                          0,0,0 },
+{ IDX_2C('g','f'),        "ÃáëëéêÞ ÃïõéÜíá",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "ÃêÜíá",                            0,0,0 },
+{ IDX_2C('g','i'),        "ÃéâñáëôÜñ",                        0,0,0 },
+{ IDX_2C('g','l'),        "Ãñéëáíäßá",                        0,0,0 },
+{ IDX_2C('g','m'),        "ÃêÜìðéá",                          0,0,0 },
+{ IDX_2C('g','n'),        "ÃïõéíÝá",                          0,0,0 },
+{ IDX_2C('g','p'),        "Ãïõáäåëïýðç",                      0,0,0 },
+{ IDX_2C('g','q'),        "ÉóçìåñéíÞ ÃïõéíÝá",                0,0,0 },
+{ IDX_2C('g','r'),        "ÅëëÜäá",                           0,0,0 },
+{ IDX_2C('g','s'),        "ÍçóéÜ ÓÜíôïõéôò",                  0,0,0 },
+{ IDX_2C('g','t'),        "ÃïõáôåìÜëá",                       0,0,0 },
+{ IDX_2C('g','u'),        "ÃêïõÜì",                           0,0,0 },
+{ IDX_2C('g','w'),        "ÃïõéíÝá ÌðéóÜïõ",                  0,0,0 },
+{ IDX_2C('g','y'),        "ÃïõéÜíá",                          0,0,0 },
+{ IDX_2C('h','k'),        "×ïãê Êïãê",                        0,0,0 },
+{ IDX_2C('h','m'),        "ÍçóéÜ ÌáêÍôüíáëíô",                0,0,0 },
+{ IDX_2C('h','n'),        "Ïíäïýñá",                          0,0,0 },
+{ IDX_2C('h','r'),        "Êñïáôßá",                          0,0,0 },
+{ IDX_2C('h','t'),        "ÁúôÞ",                             0,0,0 },
+{ IDX_2C('h','u'),        "Ïõãêáñßá",                         0,0,0 },
+{ IDX_2C('i','d'),        "Éíäïíçóßá",                        0,0,0 },
+{ IDX_2C('i','e'),        "Éñëáíäßá",                         0,0,0 },
+{ IDX_2C('i','l'),        "ÉóñáÞë",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Éíäßá",                            0,0,0 },
+{ IDX_2C('i','o'),        "ÂñåôáíéêÝò ÊôÞóåéò Éíäéêïý",       0,0,0 },
+{ IDX_2C('i','q'),        "ÉñÜê",                             0,0,0 },
+{ IDX_2C('i','r'),        "ÉñÜí",                             0,0,0 },
+{ IDX_2C('i','s'),        "Éóëáíäßá",                         0,0,0 },
+{ IDX_2C('i','t'),        "Éôáëßá",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "ÔæáìÜéêá",                         0,0,0 },
+{ IDX_2C('j','o'),        "Éïñäáíßá",                         0,0,0 },
+{ IDX_2C('j','p'),        "Éáðùíßá",                          0,0,0 },
+{ IDX_2C('k','e'),        "ÊÝíõá",                            0,0,0 },
+{ IDX_2C('k','g'),        "Êéñãéæßá",                         0,0,0 },
+{ IDX_2C('k','h'),        "Êáìðüíôéá",                        0,0,0 },
+{ IDX_2C('k','i'),        "ÊéñéìðÜôé",                        0,0,0 },
+{ IDX_2C('k','m'),        "Êïìüñïò",                          0,0,0 },
+{ IDX_2C('k','n'),        "Óáßíô Êßôò",                       0,0,0 },
+{ IDX_2C('k','p'),        "Âüñåéá ÊïñÝá",                     0,0,0 },
+{ IDX_2C('k','r'),        "Íüôéá ÊïñÝá",                      0,0,0 },
+{ IDX_2C('k','w'),        "ÊïõâÝéô",                          0,0,0 },
+{ IDX_2C('k','y'),        "ÍçóéÜ ÊÜéìáí",                     0,0,0 },
+{ IDX_2C('k','z'),        "ÊáæáêóôÜí",                        0,0,0 },
+{ IDX_2C('l','a'),        "ËÜïò",                             0,0,0 },
+{ IDX_2C('l','b'),        "Ëßâáíïò",                          0,0,0 },
+{ IDX_2C('l','c'),        "Óáßíô Ëïýôóéá",                    0,0,0 },
+{ IDX_2C('l','i'),        "Ëé÷ôåíóôÜéí",                      0,0,0 },
+{ IDX_2C('l','k'),        "Óñé ËÜíêá",                        0,0,0 },
+{ IDX_2C('l','r'),        "Ëéâåñßá",                          0,0,0 },
+{ IDX_2C('l','s'),        "Ëåóüôï",                           0,0,0 },
+{ IDX_2C('l','t'),        "Ëéèïõáíßá",                        0,0,0 },
+{ IDX_2C('l','u'),        "Ëïõîåìâïýñãï",                     0,0,0 },
+{ IDX_2C('l','v'),        "Ëéèïõáíßá",                        0,0,0 },
+{ IDX_2C('l','y'),        "Ëéâýç",                            0,0,0 },
+{ IDX_2C('m','a'),        "Ìáñüêï",                           0,0,0 },
+{ IDX_2C('m','c'),        "Ìïíáêü",                           0,0,0 },
+{ IDX_2C('m','d'),        "Ìüëíôïâá",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "ÌáäáãáóêÜñç",                      0,0,0 },
+{ IDX_2C('m','h'),        "ÍçóéÜ ÌÜñóáë",                     0,0,0 },
+{ IDX_2C('m','k'),        "Óêüðéá",                           0,0,0 },
+{ IDX_2C('m','l'),        "ÌÜëé",                             0,0,0 },
+{ IDX_2C('m','m'),        "ÌéáíìÜñ",                          0,0,0 },
+{ IDX_2C('m','n'),        "Ìïãêïëßá",                         0,0,0 },
+{ IDX_2C('m','o'),        "ÌáêÜïõ",                           0,0,0 },
+{ IDX_2C('m','p'),        "ÍçóéÜ Âüñåéá ÌáñéÜíá",             0,0,0 },
+{ IDX_2C('m','q'),        "Ìáñôéíßêá",                        0,0,0 },
+{ IDX_2C('m','r'),        "Ìáõñéôáíßá",                       0,0,0 },
+{ IDX_2C('m','s'),        "ÌïíôóåñÜô",                        0,0,0 },
+{ IDX_2C('m','t'),        "ÌÜëôá",                            0,0,0 },
+{ IDX_2C('m','u'),        "Ìáõñßêéïò",                        0,0,0 },
+{ IDX_2C('m','v'),        "Ìáëäßâåò",                         0,0,0 },
+{ IDX_2C('m','w'),        "ÌáëÜïõé",                          0,0,0 },
+{ IDX_2C('m','x'),        "Ìåîéêü",                           0,0,0 },
+{ IDX_2C('m','y'),        "Ìáëáéóßá",                         0,0,0 },
+{ IDX_2C('m','z'),        "Ìïáæìâßêç",                        0,0,0 },
+{ IDX_2C('n','a'),        "Íáìßìðéá",                         0,0,0 },
+{ IDX_2C('n','c'),        "ÍÝá Êáëçäïíßá",                    0,0,0 },
+{ IDX_2C('n','e'),        "Íßãçñ",                            0,0,0 },
+{ IDX_2C('n','f'),        "ÍçóéÜ Íüñöïëê",                    0,0,0 },
+{ IDX_2C('n','g'),        "Íéãçñßá",                          0,0,0 },
+{ IDX_2C('n','i'),        "ÍéêáñÜãïõá",                       0,0,0 },
+{ IDX_2C('n','l'),        "Ïëëáíäßá",                         0,0,0 },
+{ IDX_2C('n','o'),        "Íïñâçãßá",                         0,0,0 },
+{ IDX_2C('n','p'),        "ÍåðÜë",                            0,0,0 },
+{ IDX_2C('n','r'),        "Íáïýñïõ",                          0,0,0 },
+{ IDX_2C('n','u'),        "Íéïýå",                            0,0,0 },
+{ IDX_2C('n','z'),        "ÍÝá Æçëáíäßá",                     0,0,0 },
+{ IDX_2C('o','m'),        "ÏìÜí",                             0,0,0 },
+{ IDX_2C('p','a'),        "ÐáíáìÜò",                          0,0,0 },
+{ IDX_2C('p','e'),        "Ðåñïý",                            0,0,0 },
+{ IDX_2C('p','f'),        "ÃáëëéêÞ Ðïëõíçóßá",                0,0,0 },
+{ IDX_2C('p','g'),        "Ðáðïýá ÍÝá ÃïõéíÝá",               0,0,0 },
+{ IDX_2C('p','h'),        "Öéëéððßíåò",                       0,0,0 },
+{ IDX_2C('p','k'),        "ÐáêéóôÜí",                         0,0,0 },
+{ IDX_2C('p','l'),        "Ðïëùíßá",                          0,0,0 },
+{ IDX_2C('p','m'),        "Óáßíô ÐéÝñ",                       0,0,0 },
+{ IDX_2C('p','n'),        "Ðßôêáéñí",                         0,0,0 },
+{ IDX_2C('p','r'),        "Ðüñôï Ñßêï",                       0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Ðïñôïãáëßá",                       0,0,0 },
+{ IDX_2C('p','w'),        "ÐáëÜïõ",                           0,0,0 },
+{ IDX_2C('p','y'),        "ÐáñáãïõÜç",                        0,0,0 },
+{ IDX_2C('q','a'),        "ÊáôÜñ",                            0,0,0 },
+{ IDX_2C('r','e'),        "ÅðáíÝíùóç",                        0,0,0 },
+{ IDX_2C('r','o'),        "Ñïõìáíßá",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Ñùóßá",                            0,0,0 },
+{ IDX_2C('r','w'),        "ÑïõÜíôá",                          0,0,0 },
+{ IDX_2C('s','a'),        "ÓáïõäéêÞ Áñáâßá",                  0,0,0 },
+{ IDX_2C('s','b'),        "ÍçóéÜ Óïëïìþíôá",                  0,0,0 },
+{ IDX_2C('s','c'),        "Óåû÷Ýëåò",                         0,0,0 },
+{ IDX_2C('s','d'),        "ÓïõäÜí",                           0,0,0 },
+{ IDX_2C('s','e'),        "Óïõçäßá",                          0,0,0 },
+{ IDX_2C('s','g'),        "Óéãêáðïýñç",                       0,0,0 },
+{ IDX_2C('s','h'),        "Áãßá ÅëÝíç",                       0,0,0 },
+{ IDX_2C('s','i'),        "Óëïâåíßá",                         0,0,0 },
+{ IDX_2C('s','j'),        "ÍçóéÜ ÓâÜëìðáñíô",                 0,0,0 },
+{ IDX_2C('s','k'),        "Óëïâáêßá",                         0,0,0 },
+{ IDX_2C('s','l'),        "Óßåñá Ëåüíå",                      0,0,0 },
+{ IDX_2C('s','m'),        "Óáí Ìáñßíï",                       0,0,0 },
+{ IDX_2C('s','n'),        "ÓåíåãÜëç",                         0,0,0 },
+{ IDX_2C('s','o'),        "Óïìáëßá",                          0,0,0 },
+{ IDX_2C('s','r'),        "ÓïõñéíÜì",                         0,0,0 },
+{ IDX_2C('s','t'),        "ÓÜï Ôüìå êáé Ðñéíôóßðå",           0,0,0 },
+{ IDX_2C('s','u'),        "Ðñþçí Å.Ó.Ó.Ä.",                   0,0,0 },
+{ IDX_2C('s','v'),        "Åë Óáëâáäüñ",                      0,0,0 },
+{ IDX_2C('s','y'),        "Óõñßá",                            0,0,0 },
+{ IDX_2C('s','z'),        "ÓïõáæéëÜíäç",                      0,0,0 },
+{ IDX_2C('t','c'),        "ÍçóéÜ ÊÜéêïò",                     0,0,0 },
+{ IDX_2C('t','d'),        "ÔóÜíô",                            0,0,0 },
+{ IDX_2C('t','f'),        "ÃáëëéêÝò ÊôÞóåéò",                 0,0,0 },
+{ IDX_2C('t','g'),        "Ôüãêï",                            0,0,0 },
+{ IDX_2C('t','h'),        "ÔáúëÜíäç",                         0,0,0 },
+{ IDX_2C('t','j'),        "ÔáôæéêéóôÜí",                      0,0,0 },
+{ IDX_2C('t','k'),        "ÔïêåëÜïõ",                         0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "ÔïõñêìåíéóôÜí",                    0,0,0 },
+{ IDX_2C('t','n'),        "Ôõíçóßá",                          0,0,0 },
+{ IDX_2C('t','o'),        "Ôüãêá",                            0,0,0 },
+{ IDX_2C('t','p'),        "Áíáôëéêü Ôéìüñ",                   0,0,0 },
+{ IDX_2C('t','r'),        "Ôïõñêßá",                          0,0,0 },
+{ IDX_2C('t','t'),        "Ôñßíéíôáíô êáé ÔïìðÜãêï",          0,0,0 },
+{ IDX_2C('t','v'),        "Ôïõâáëïý",                         0,0,0 },
+{ IDX_2C('t','w'),        "ÔáúâÜí",                           0,0,0 },
+{ IDX_2C('t','z'),        "Ôáíæáíßá",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ïõêñáíßá",                         0,0,0 },
+{ IDX_2C('u','g'),        "ÏõãêÜíôá",                         0,0,0 },
+{ IDX_2C('u','k'),        "ÇíùìÝíï Âáóßëåéï",                 0,0,0 },
+{ IDX_2C('u','m'),        "ÍçóéÜ Ç.Ð.Á.",                     0,0,0 },
+{ IDX_2C('u','s'),        "Ç.Ð.Á.",                           0,0,0 },
+{ IDX_2C('u','y'),        "ÏõñïõãïõÜç",                       0,0,0 },
+{ IDX_2C('u','z'),        "ÏõæìðåêéóôÜí",                     0,0,0 },
+{ IDX_2C('v','a'),        "Âáôéêáíü",                         0,0,0 },
+{ IDX_2C('v','c'),        "Óáßíô Âßíóåíô",                    0,0,0 },
+{ IDX_2C('v','e'),        "ÂåíåæïõÝëá",                       0,0,0 },
+{ IDX_2C('v','g'),        "ÂñåôáíéêÝò ÐáñèÝíåò ÍÞóïé",        0,0,0 },
+{ IDX_2C('v','i'),        "ÐáñèÝíåò ÍÞóïé (Ç.Ð.Á.)",          0,0,0 },
+{ IDX_2C('v','n'),        "ÂéåôíÜì",                          0,0,0 },
+{ IDX_2C('v','u'),        "ÂáíïõÜôïõ",                        0,0,0 },
+{ IDX_2C('w','f'),        "ÍçóéÜ ÃïõÜëéò",                    0,0,0 },
+{ IDX_2C('w','s'),        "Óáìüá",                            0,0,0 },
+{ IDX_2C('y','e'),        "ÕåìÝíç",                           0,0,0 },
+{ IDX_2C('y','t'),        "Ìáãéüô",                           0,0,0 },
+{ IDX_2C('y','u'),        "Ãéïõãêïóëáâßá",                    0,0,0 },
+{ IDX_2C('z','a'),        "Íüôéá ÁöñéêÞ",                     0,0,0 },
+{ IDX_2C('z','m'),        "ÆÜìðéá",                           0,0,0 },
+{ IDX_2C('z','w'),        "ÆéìðÜìðïõå",                       0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.hungarian b/lang/webalizer_lang.hungarian
new file mode 100644 (file)
index 0000000..9504f2a
--- /dev/null
@@ -0,0 +1,638 @@
+/*
+   webalizer_lang.hungarian
+
+   Webalizer V2.0x Language Support file for Hungarian.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   20-Jul-1999 Translated by Viktor Haas (haasviki@hotmail.com)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   27-Mar-2000 Modified hungarian translation for level 2.0 by
+               Viktor Haas (haasviki@hotmail.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Magyar";
+char *langcode  = "hu";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "rekord";
+char *msg_addresses="addresses";
+char *msg_ignored = "mellõzött";
+char *msg_bad     = "rossz";
+char *msg_in      = "";
+char *msg_seconds = "másodperc alatt";
+
+/* progress and setup error messages */
+char *msg_log_err = "Hiba: Nem tudom megnyitni a log file-t";
+char *msg_log_use = "Használom a logfile-t";
+char *msg_dir_err = "Hiba: Nem tudom megváltoztatni a könyvtárat erre:  ";
+char *msg_dir_use = "Készítem a kimenetet:";
+char *msg_cur_dir = "jelenlegi könyvtár";
+char *msg_hostname= "A jelentésnek a hostneve:";
+char *msg_ign_hist= "Mellõzöm az elözõ history-t...";
+char *msg_no_hist = "History file-t nem találom...";
+char *msg_get_hist= "Olvasom a history file-t...";
+char *msg_put_hist= "Mentem a history információt...";
+char *msg_hist_err= "Hiba: Nem tudom írni a history file-t";
+char *msg_bad_hist= "Hiba: Mellõzöm érvénytelen history rekordot";
+char *msg_bad_conf= "Hiba: Nem tudom megnyitni a konfigurációs file-t";
+char *msg_bad_key = "Figyelmeztetés: Érvénytelen kulcsszó";
+char *msg_bad_date= "Hiba: Kihagyom a rekordot (rossz dátum)";
+char *msg_ign_nscp= "Kihagyom Netscape header rekordot";
+char *msg_bad_rec = "Kihagyom a rossz rekordot";
+char *msg_no_vrec = "Nem találtam érvényes rekordokat!";
+char *msg_gen_rpt = "Készítem a jelentés:";
+char *msg_gen_sum = "Készítem az összefoglalt jelentést";
+char *msg_get_data= "Olvasom az elözõ futatott adatokat..";
+char *msg_put_data= "Mentem a jelenlegi futatott adatokat...";
+char *msg_no_data = "Az elözõ futatott adatokat nem találom...";
+char *msg_bad_data= "Hiba: Nem tudom helyreállítani a futatott adatokat";
+char *msg_data_err= "Hiba: Nem tudom menteni a jelenlegi futatott adatokat";
+char *msg_dup_data= "Figyelmeztetés: Lehetséges ismételt adatot találtam";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nincs cache file elõírva, megszakítás...";
+char *msg_dns_nodb= "Hiba: Nem lehet megnyitni a DNS cache file-t";
+char *msg_dns_nolk= "Hiba: Nem lehet zárni a DNS cache file-t";
+char *msg_dns_usec= "Használom a DNS cache file-t";
+char *msg_dns_rslv= "DNS kikeresés";
+char *msg_dns_none= "Nincs mit feldolgozni";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nem tudok elegendõ memóriát lefoglalni, Top Oldal tiltva!";
+char *msg_nomem_tr= "Nem tudok elegendõ memóriát lefoglalni, Top Hivatkozás tiltva!";
+char *msg_nomem_tu= "Nem tudok elegendõ memóriát lefoglalni, Top URL tiltva!";
+char *msg_nomem_tc= "Nem tudok elegendõ memóriát lefoglalni, Top Ország tiltva!";
+char *msg_nomem_ta= "Nem tudok elegendõ memóriát lefoglalni, Top Felhasználó böngészõje tiltva!";
+char *msg_nomem_tsr="Nem tudok elegendõ memóriát lefoglalni, Top Keresési string tiltva!";
+char *msg_nomem_ti= "Nem tudok elegendõ memóriát lefoglalni, Top Felhasználónevek tiltva!";
+char *msg_nomem_dh= "Hiba a hozzáadásnál host node (napi), kihagyom";
+char *msg_nomem_mh= "Hiba a hozzáadásnál host node (havi), kihagyom";
+char *msg_nomem_u = "Hiba a hozzáadásnál URL node, kihagyom";
+char *msg_nomem_a = "Hiba a hozzáadásnál Agent node, kihagyom";
+char *msg_nomem_r = "Hiba a hozzáadásnál Hivatkozás node, kihagyom";
+char *msg_nomem_sc= "Hiba a hozzáadásnál Keresési string Node, kihagyom";
+char *msg_nomem_i = "Hiba a felhasználónév node hozzáadásánál, kihagyom";
+
+/* log record errors */
+char *msg_big_rec = "Hiba: Kihagyom a túl nagy log rekordot";
+char *msg_big_host= "Figyelmeztetés: Lerövidítem a túl hosszú hostnevet";
+char *msg_big_date= "Figyelmeztetés: Levágom a túl nagy adat mezõt";
+char *msg_big_req = "Figyelmeztetés: Levágom a túl nagy kérés mezõt";
+char *msg_big_ref = "Figyelmeztetés: Levágom a túl nagy hivatkozás mezõt";
+char *msg_big_user= "Figyelmeztetés: Levágom a túl nagy felhasználónevet";
+char *msg_big_one = "Figyelmeztetés: String nagyob a tárolható méretnél";
+
+/* misc errors */
+char *msg_no_open = "Hiba: Nem tudom megnyítni a file-t";
+
+/* Help display... */
+char *h_usage1 = "Használat";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = Kiírja ezt a sugó üzenetet"          ,
+         "-V        = Kiírja a verziószámot"               ,
+         "-v        = be verbose"                          ,
+         "-d        = Kiírja a további debug infót"        ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Összefogja a sorozatos hibákat"      ,
+         "-i        = Mellõzi a history file-t"            ,
+         "-p        = Megõrzi az állapotott  (incremental)",
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = Használja a konfigurációs file-t 'file'",
+         "-n name   = Hostnév amit használjon"             ,
+         "-o dir    = Kimeneti könyvtár"                   ,
+         "-t name   = Report címe 'name'"                  ,
+         "-a name   = Rejtse a felhasználó böngészõjét 'name'",
+         "-r name   = Rejtse a hivatkozást 'name'"         ,
+         "-s name   = Rejtse az oldalt 'name'"             ,
+         "-u name   = Rejtse az URL-t 'name'"              ,
+         "-x name   = Használja a filenév kiterjesztését 'name'",
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Oldal tipusának a kiterjesztése 'name'",
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Használja a DNS Cache file-t 'name'" ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Vizsgálati idõszak";
+char *msg_hhdr_gt = "Készült:";
+
+/* main index strings */
+char *msg_main_us = "Használat összegzése:";
+/* char *msg_main_per= "Elmúlt 12 Hónap"; */
+char *msg_main_per= "Havi összefoglalás";
+char *msg_main_sum= "Havi összefoglalás";
+char *msg_main_da = "Napi átlag";
+char *msg_main_mt = "Havi összegzés";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Napi használat:";
+char *msg_hmth_hu = "Óránkénti használat:";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Átlag";
+char *msg_h_max   = "Maximum";
+char *msg_h_total = "Összes";
+char *msg_h_totals= "Összegzés";
+char *msg_h_day   = "Nap";
+char *msg_h_mth   = "Hónap";
+char *msg_h_hour  = "Óra";
+char *msg_h_hits  = "Találatok";
+char *msg_h_pages = "Lapok";
+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_hname = "Hostnév";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Felhasználó böngészõje";
+char *msg_h_ref   = "Hivatkozás";
+char *msg_h_ctry  = "Ország";
+char *msg_h_search= "Keresési String";
+char *msg_h_uname = "Felhasználónév";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Napi Statisztika";
+char *msg_hlnk_hs = "Óránkénti Statisztika";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Oldalak";
+char *msg_hlnk_a  = "Böngészõk";
+char *msg_hlnk_c  = "Országok";
+char *msg_hlnk_r  = "Hivatkozások";
+char *msg_hlnk_en = "Belépés";
+char *msg_hlnk_ex = "Kilépés";
+char *msg_hlnk_sr = "Keresés";
+char *msg_hlnk_i  = "Felhasználók";
+
+/* monthly total table */
+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_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";
+char *msg_mtot_uu = "Összes különbözõ URL";
+char *msg_mtot_ui = "Összes különbözõ Felhasználónevek";
+char *msg_mtot_mhd= "Találat/nap";
+char *msg_mtot_mhh= "Találat/óra";
+char *msg_mtot_mfd= "File/nap";
+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_rc = "Válaszkódok általi találatok";
+
+/* daily total table */
+char *msg_dtot_ds = "Napi Statisztika:";
+
+/* hourly total table */
+char *msg_htot_hs = "Óránkénti Statisztika:";
+
+/* country pie chart */
+char *msg_ctry_use= "Országok általi használat:";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "of";
+char *msg_top_s   = "Összes Oldal";
+char *msg_top_u   = "Összes URL";
+char *msg_top_r   = "Összes Hivatkozás";
+char *msg_top_a   = "Összes Felhasználó böngészõje";
+char *msg_top_c   = "Összes Ország";
+char *msg_top_en  = "Összes Belépési lap";
+char *msg_top_ex  = "Összes Kilépési lap";
+char *msg_top_sr  = "Összes Keresési string";
+char *msg_top_i   = "Összes Felhasználónevek";
+char *msg_v_sites = "Összes Oldal megtekintése";
+char *msg_v_urls  = "Összes URL megtekintése";
+char *msg_v_refs  = "Összes Hivatkozás megtekintése";
+char *msg_v_agents= "Összes Felhasználó böngészõje megtekintése";
+char *msg_v_search= "Összes Keresési string megtekintése";
+char *msg_v_users = "Összes Felhasználó megtekintése";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Már",
+                    "Ápr", "Máj", "Jún",
+                    "Júl", "Aug", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Január",  "Február", "Március",   "Április",
+                    "Május",      "Június",     "Július",    "Augusztus",
+                    "Szeptember","Október",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Használati Statisztika:";
+char *msg_h_other = "Más";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Ismeretlen",                       0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Magyarország",                     0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.icelandic b/lang/webalizer_lang.icelandic
new file mode 100644 (file)
index 0000000..387d9a0
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+   webalizer_lang.icelandic
+
+   Webalizer V2.0x Language Support file for Icelandic.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   15-Dec-2000 Translated to icelandic (isak@snerpa.is]
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+   
+   I used as a guide an older file that Kristofer & Veigar had 
+   Translated for 1.3.
+   This was originally the english version...i just translated it.
+   Still a few lines i didn't have time do dig up translations on maybe 
+   i'll do it later...or maybe someone else will? ;)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Icelandic";
+char *langcode  = "is";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "skráningar";
+char *msg_addresses="frá";
+char *msg_ignored = "hunsaðar";
+char *msg_bad     = "gallaðar";
+char *msg_in      = "á";
+char *msg_seconds = "sekúndum";
+
+/* progress and setup error messages */
+char *msg_log_err = "Villa: Get ekki opnað annála";
+char *msg_log_use = "Nota annála";
+char *msg_dir_err = "Villa: Get ekki farið í möppuna:";
+char *msg_dir_use = "Bý til úttak í";
+char *msg_cur_dir = "Núverandi mappa";
+char *msg_hostname= "Nafn þjóns fyrir skýrslur er:";
+char *msg_ign_hist= "Hunsa fyrri atburði...";
+char *msg_no_hist = "Finn ekki atburðaskrá...";
+char *msg_get_hist= "Les atburðaskrá...";
+char *msg_put_hist= "Vista atburðaskrá...";
+char *msg_hist_err= "Villa: Get ekki skrifað í atburðaskrá";
+char *msg_bad_hist= "Villa: Gölluð atburðaskráning";
+char *msg_bad_conf= "Villa: Get ekki opnað stillingaskrá";
+char *msg_bad_key = "Varúð: Rangt lykilorð";
+char *msg_bad_date= "Villa: Sleppi skráningu, gölluð dagsetning";
+char *msg_ign_nscp= "Sleppi Netscape hausskráningu";
+char *msg_bad_rec = "Sleppi gallaðri skráningu";
+char *msg_no_vrec = "Engar skráningar fundnar í lagi!";
+char *msg_gen_rpt = "Bý til skráningu fyrir";
+char *msg_gen_sum = "Bý til stutta skráningu";
+char *msg_get_data= "Les eldri gögn..";
+char *msg_put_data= "Vista núverandi gögn...";
+char *msg_no_data = "Eldri gögn fundust ekki...";
+char *msg_bad_data= "Villa: Get ekki endurheimt gögn";
+char *msg_data_err= "Villa: Get ekki vistað núverandi gögn";
+char *msg_dup_data= "Aðvörun: Möguleiki á tvískráðum gögnum";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Enginn cache skrá skilgreind, hætti við...";
+char *msg_dns_nodb= "Villa: Get ekki opnað DNS cache skrá";
+char *msg_dns_nolk= "Villa: Get get ekki læsta DNS cache skrá";
+char *msg_dns_usec= "Nota DNS cache skrá";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "Enginn til að vinna";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Get ekki fundið nóg minni, sleppi Top Sites!";
+char *msg_nomem_tr= "Get ekki fundið nóg minni, Top Referrers!";
+char *msg_nomem_tu= "Get ekki fundið nóg minni, Top URLs!";
+char *msg_nomem_tc= "Get ekki fundið nóg minni, Top Countries!";
+char *msg_nomem_ta= "Get ekki fundið nóg minni, Top User Agents!";
+char *msg_nomem_tsr="Get ekki fundið nóg minni, Top Search Strings!";
+char *msg_nomem_ti= "Get ekki fundið nóg minni, Top Usernames!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Villa: Sleppi of stórum annálum";
+char *msg_big_host= "Aðvörun: Minnka of stórt host nafn";
+char *msg_big_date= "Aðvörun: Minnka of stóra dags. línu";
+char *msg_big_req = "Aðvörun: Minnka of stóra request línu";
+char *msg_big_ref = "Aðvörun: Minnka of stóra referrer línu";
+char *msg_big_user= "Aðvörun: Minnka of stórt notandanafn";
+char *msg_big_one = "Aðvörun: Strengur er stærri en geymslupláss";
+
+/* misc errors */
+char *msg_no_open = "Villa: Get ekki opnað skrá";
+
+/* Help display... */
+char *h_usage1 = "notkun";
+char *h_usage2 = "[rofar] [log file]";
+char *h_msg[]= {
+         "-h        = prentar þessa hjálp"                 ,
+         "-V        = prentar útgáfu upplýsingar"          ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F tegund = Annála tegund.  tegund= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = hunsa history skrá"                  ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Tímabil";
+char *msg_hhdr_gt = "Skýrsla gerð";
+
+/* main index strings */
+char *msg_main_us = "Yfirlit heimsókn fyrir";
+/* char *msg_main_per= "Síðustu 12 mánuðir "; */
+char *msg_main_per= "Yfirlit eftir mánuðum";
+char *msg_main_sum= "Yfirlit eftir mánuðum";
+char *msg_main_da = "Dags meðaltal";
+char *msg_main_mt = "Samtals á mánuði";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Notkun á dag fyrir";
+char *msg_hmth_hu = "Notkun á klukkustund fyrir";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Meðaltal";
+char *msg_h_max   = "Mest";
+char *msg_h_total = "Samtals";
+char *msg_h_totals= "Samtals";
+char *msg_h_day   = "Dagur";
+char *msg_h_mth   = "Mánuður";
+char *msg_h_hour  = "Klukkustund";
+char *msg_h_hits  = "Beiðnir";
+char *msg_h_pages = "Síður";
+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_hname = "Host nafn";
+char *msg_h_url   = "Slóð";
+char *msg_h_agent = "User Agent";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "Land";
+char *msg_h_search= "Leitarstrengur";
+char *msg_h_uname = "Notandanafn";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Daglegar samtölur";
+char *msg_hlnk_hs = "Klukkustundar samtölur";
+char *msg_hlnk_u  = "Slóðir";
+char *msg_hlnk_s  = "Síður";
+char *msg_hlnk_a  = "Agents";
+char *msg_hlnk_c  = "Lönd";
+char *msg_hlnk_r  = "Referrers";
+char *msg_hlnk_en = "Byrjunar";
+char *msg_hlnk_ex = "loka";
+char *msg_hlnk_sr = "Leita";
+char *msg_hlnk_i  = "Notendur";
+
+/* monthly total table */
+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_us = "Samtals Einstakar Síður";
+char *msg_mtot_ur = "Samtals Unique Referrers";
+char *msg_mtot_ua = "Samtals Unique User Agents";
+char *msg_mtot_uu = "Samtals Einstakar Slóðir";
+char *msg_mtot_ui = "Samtals Einstök Notandanöfn";
+char *msg_mtot_mhd= "Beiðnir á Dag";
+char *msg_mtot_mhh= "Beiðnir á Klukkustund";
+char *msg_mtot_mfd= "Skrár á Dag";
+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_rc = "Hits by Response Code";
+
+/* daily total table */
+char *msg_dtot_ds = "Daglegar Samtölur fyrir";
+
+/* hourly total table */
+char *msg_htot_hs = "Klukkustundar Samtölur fyrir";
+
+/* country pie chart */
+char *msg_ctry_use= "Notkun eftir Landi fyrir";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Efstu";
+char *msg_top_of  = "af";
+char *msg_top_s   = "Heildar Síður";
+char *msg_top_u   = "Heildar slóðir";
+char *msg_top_r   = "Heildar Referrers";
+char *msg_top_a   = "Heildar User Agents";
+char *msg_top_c   = "Heildar Lönd";
+char *msg_top_en  = "Heildar Byrjunarsíðum";
+char *msg_top_ex  = "Heildar Lokasíðum";
+char *msg_top_sr  = "Heildar Leitarstrengir";
+char *msg_top_i   = "Heildar Notendanöfn";
+char *msg_v_sites = "Skoða Allar síður";
+char *msg_v_urls  = "Skoða Allar Slóðir";
+char *msg_v_refs  = "Skoða Allar Referrers";
+char *msg_v_agents= "Skoða Alla User Agents";
+char *msg_v_search= "Skoða Alla Leitarstrengi";
+char *msg_v_users = "Skoða Öll Notandanöfn";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maí", "Jún",
+                    "Júl", "Agú", "Sep",
+                    "Okt", "Nóv", "Des"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Janúar",  "Febrúar", "Mars",   "Apríl",
+                    "Maí",      "Júní",     "Júlý",    "Ágúst",
+                    "September","Október",  "Nóvember","Desember"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Áfram",                           0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - I Lagi",                          0 },
+         { "Code 201 - Búið til",                        0 },
+         { "Code 202 - Samþykkt",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - Ekkert Innihald",                 0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Margir Möguleikar",               0 },
+         { "Code 301 - Fært",                            0 },
+         { "Code 302 - Fundið",                          0 },
+         { "Code 303 - Sjá Annað",                       0 },
+         { "Code 304 - Ekki Breytt",                     0 },
+         { "Code 305 - Nota Proxy",                      0 },
+         { "Code 307 - Fært Um Stundarsakir",            0 },
+         { "Code 400 - Slæm Beiðni",                     0 },
+         { "Code 401 - Óleyfilegt",                      0 },
+         { "Code 402 - Greiðslu Krafist",                0 },
+         { "Code 403 - Óleyfilegt",                      0 },
+         { "Code 404 - Fannst Ekki",                     0 },
+         { "Code 405 - Aðferð Ekki Leyfð",               0 },
+         { "Code 406 - Ekki Ásættanlegt",                0 },
+         { "Code 407 - Proxy Auðkenning Nauðsynleg",     0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Árekstur",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Of Stórt",         0 },
+         { "Code 414 - Request-URI Of Langt",            0 },
+         { "Code 415 - Óstudd Media Tegund",             0 },
+         { "Code 416 - Umbeðið svæði Ekki Ásættanlegt",  0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Innlæg þjóna villa",              0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Rangur Gateway",                  0 },
+         { "Code 503 - Þjónusta Ekki Fyrir Hendi",       0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Útgáfa Ekki Studd",          0 } };
+char *msg_title   = "Yfirlit Heimsókna fyrir";
+char *msg_h_other = "Annað";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "óþekkt",                           0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Menntanet (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "US Ríkisnet (gov)",                0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Her (mil)",                     0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Gamla Arpanet (arpa)",             0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Sameiginlegu Arabísku Furstadæmin",0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua og Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albanía",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenía",                          0,0,0 },
+{ IDX_2C('a','n'),        "Holland",                          0,0,0 },
+{ IDX_2C('a','o'),        "Angóla",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentína",                        0,0,0 },
+{ IDX_2C('a','s'),        "Amerísku Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austurríki",                       0,0,0 },
+{ IDX_2C('a','u'),        "Ástralía",                         0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnía and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgía",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Búlgaría",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermúda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bólivía",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasilía",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Kókos (Keeling) Eyjur",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Mið Afríkulýðveldið ",             0,0,0 },
+{ IDX_2C('c','g'),        "Kongó",                            0,0,0 },
+{ IDX_2C('c','h'),        "Swiss",                            0,0,0 },
+{ IDX_2C('c','i'),        "Fílabeinsströndin (Ivory Coast)",  0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerún",                          0,0,0 },
+{ IDX_2C('c','n'),        "Kína",                             0,0,0 },
+{ IDX_2C('c','o'),        "Kólumbía",                         0,0,0 },
+{ IDX_2C('c','r'),        "Kosta Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kúba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Jólaeyja",                         0,0,0 },
+{ IDX_2C('c','y'),        "Kýpur",                            0,0,0 },
+{ IDX_2C('c','z'),        "Tékkneska Lýðveldið",              0,0,0 },
+{ IDX_2C('d','e'),        "Þýskaland",                        0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danmörk",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dóminíka",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dóminíska Lýðveldið",              0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estónía",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egyptaland",                       0,0,0 },
+{ IDX_2C('e','h'),        "Vestur Sahara",                    0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spánn",                            0,0,0 },
+{ IDX_2C('e','t'),        "Eþíópía",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fíjí",                             0,0,0 },
+{ IDX_2C('f','k'),        "Fálkeyjur (Malvinas)",             0,0,0 },
+{ IDX_2C('f','m'),        "Míkrónesía",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "Frakkland",                        0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Stóra Bretland (UK)",              0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgía",                          0,0,0 },
+{ IDX_2C('g','f'),        "Franska Guiana",                   0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gíbraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grænland",                         0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Grikkland",                        0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia og S. Samloku Eyjur.",  0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard og McDonald Eyjur",          0,0,0 },
+{ IDX_2C('h','n'),        "Hondúras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Króatía",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haítí",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungverjaland",                     0,0,0 },
+{ IDX_2C('i','d'),        "Indónesía",                        0,0,0 },
+{ IDX_2C('i','e'),        "Írland",                           0,0,0 },
+{ IDX_2C('i','l'),        "Ísrael",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indía",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Írak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Íran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Ísland",                           0,0,0 },
+{ IDX_2C('i','t'),        "Ítalía",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kambódía",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Kórea (Norður)",                   0,0,0 },
+{ IDX_2C('k','r'),        "Kórea (Suður)",                    0,0,0 },
+{ IDX_2C('k','w'),        "Kúweit",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Eyjur",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Lúxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Lettland",                         0,0,0 },
+{ IDX_2C('l','y'),        "Libýa",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marokko",                          0,0,0 },
+{ IDX_2C('m','c'),        "Mónakó",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldóvía",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Eyjur",                   0,0,0 },
+{ IDX_2C('m','k'),        "Makedónía",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongólía",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Norður Mariana eyjur",             0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanía",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexíko",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malasía",                          0,0,0 },
+{ IDX_2C('m','z'),        "Mozambík",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibía",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nýja Caledonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigería",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Noregur",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nýja Sjáland",                     0,0,0 },
+{ IDX_2C('o','m'),        "Óman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Franska Pólýnesía",                0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nýja Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filippseyjar",                     0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Pólland",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre og Miquelon",           0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Púerto Ríko",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portúgal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rúmenía",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rússneska Sambandið",              0,0,0 },
+{ IDX_2C('r','w'),        "Rúanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabía",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Eyjur",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Súdan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Svíþjóð",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapúr",                         0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slóvenía",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbarði og Jan Mayen Eyjarnar",  0,0,0 },
+{ IDX_2C('s','k'),        "Slóvenska lýðveldið",              0,0,0 },
+{ IDX_2C('s','l'),        "Síerra Léone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marinó",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Sómalía",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome og Principe",             0,0,0 },
+{ IDX_2C('s','u'),        "USSR (fyrrverandi)",               0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Sýrland",                          0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Eyjurnar",        0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Taíland",                          0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Túrkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Túnis",                            0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Tyrkland",                         0,0,0 },
+{ IDX_2C('t','t'),        "Trinídad og Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taíwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Úkraíne",                          0,0,0 },
+{ IDX_2C('u','g'),        "Úganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Bretland",                         0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "USA",                              0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Úsbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikanið (Holy See)",             0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent og Grenadines",      0,0,0 },
+{ IDX_2C('v','e'),        "Venesúela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Jómfreyjar-eyjar (Bresku)",        0,0,0 },
+{ IDX_2C('v','i'),        "Jómfreyjar-eyjar (U.S.)",          0,0,0 },
+{ IDX_2C('v','n'),        "Víet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis og Futuna Islands",         0,0,0 },
+{ IDX_2C('w','s'),        "Samóa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "júgóslavía",                       0,0,0 },
+{ IDX_2C('z','a'),        "Suður Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambía",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.indonesian b/lang/webalizer_lang.indonesian
new file mode 100644 (file)
index 0000000..6f04f5d
--- /dev/null
@@ -0,0 +1,636 @@
+/*
+   webalizer_lang.indonesian
+
+   Webalizer V2.0x Language Support file for Indonesian.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   08-Oct-1999 Translated to Indonesian by Adhi eN (webmaster@adhi.findhere.com)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Indonesian";
+char *langcode  = "id";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "record";
+char *msg_addresses="addresses";
+char *msg_ignored = "diabaikan";
+char *msg_bad     = "buruk";
+char *msg_in      = "dalam";
+char *msg_seconds = "detik";
+
+/* progress and setup error messages */
+char *msg_log_err = "Salah: Tak dapat membuka file log";
+char *msg_log_use = "Menggunakan file log";
+char *msg_dir_err = "Salah: Tak dapat berpindah ke direktori";
+char *msg_dir_use = "Membuat keluaran dalam";
+char *msg_cur_dir = "direktori saat ini";
+char *msg_hostname= "Nama host yang akan dilaporkan adalah";
+char *msg_ign_hist= "Abaikan history sebelumnya...";
+char *msg_no_hist = "File history tak dapat ditemukan...";
+char *msg_get_hist= "Sedang membaca file history...";
+char *msg_put_hist= "Menyimpan informasi history...";
+char *msg_hist_err= "Salah: Tak dapat menulisi file history";
+char *msg_bad_hist= "Salah: Abaikan record history yang cacat";
+char *msg_bad_conf= "Salah: Tak dapat membuka file konfigurasi";
+char *msg_bad_key = "Peringatan: Kata kunci tidak valid";
+char *msg_bad_date= "Salah: Melompati record (tanggal salah)";
+char *msg_ign_nscp= "Melompati record header Netscape";
+char *msg_bad_rec = "Melompati record yang salah";
+char *msg_no_vrec = "Tak ditemukan record yang valid!";
+char *msg_gen_rpt = "Sedang memproses laporan untuk";
+char *msg_gen_sum = "Sedang membuat laporan singkat";
+char *msg_get_data= "Sedang membaca data yang dijalankan sebelumnya..";
+char *msg_put_data= "Sedang menyimpan data yang dijalankan saat ini...";
+char *msg_no_data = "Data yang dijalankan sebelumnya tak ditemukan...";
+char *msg_bad_data= "Salah: Tak dapat memulihkan data yang dijalankan";
+char *msg_data_err= "Salah: Tak dapat menyimpan data yang dijalankan saat ini";
+char *msg_dup_data= "Peringatan: Kemungkinan ditemukan data yang terduplikasi";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Tak dapat mengalokasikan cukup memori, Situs-situs urutan teratas tidak diaktifkan!";
+char *msg_nomem_tr= "Tak dapat mengalokasikan cukup memori, Acuan-acuan urutan teratas tidak diaktifkan!";
+char *msg_nomem_tu= "Tak dapat mengalokasikan cukup memori, URL-URL urutan teratas tidak diaktifkan!";
+char *msg_nomem_tc= "Tak dapat mengalokasikan cukup memori, Negara-negara urutan teratas tidak diaktifkan!";
+char *msg_nomem_ta= "Tak dapat mengalokasikan cukup memori, Browser-browser urutan teratas tidak diaktifkan!";
+char *msg_nomem_tsr="Tak dapat mengalokasikan cukup memori, String-string pencarian urutan teratas tidak diaktifkan!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Terjadi kesalahan saat menambahkan node host (harian), dilewati";
+char *msg_nomem_mh= "Terjadi kesalahan saat menambahkan node host (bulanan), dilewati";
+char *msg_nomem_u = "Terjadi kesalahan saat menambahkan node URL, dilewati";
+char *msg_nomem_a = "Terjadi kesalahan saat menambahkan node User Agent, dilewati";
+char *msg_nomem_r = "Terjadi kesalahan saat menambahkan node acuan, dilewati";
+char *msg_nomem_sc= "Terjadi kesalahan saat menambahkan node string pencarian, dilewati";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Salah: Melompati rekaman log yang oversize";
+char *msg_big_host= "Peringatan: Memotong nama host yang oversize";
+char *msg_big_date= "Peringatan: Memotong field tanggal yang oversize";
+char *msg_big_req = "Peringatan: Memotong field permintaan yang oversize";
+char *msg_big_ref = "Peringatan: Memotong acuan yang oversize";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Peringatan: String melampaui ukuran penyimpanan";
+
+/* misc errors */
+char *msg_no_open = "Salah: Tak dapat membuka file";
+
+/* Help display... */
+char *h_usage1 = "Penggunaan";
+char *h_usage2 = "[opsi] [file log]";
+char *h_msg[]= {
+         "-h        = cetak pesan bantuan ini"                             ,
+         "-V        = cetak informasi versi"                               ,
+         "-v        = be verbose"                                          ,
+         "-d        = cetak informasi debug tambahan"                      ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)"          ,
+         "-f        = kesalahan urutan Fold"                               ,
+         "-i        = abaikan file history"                                ,
+         "-p        = menjaga pernyataan (penambahan)"                     ,
+         "-b        = abaikan pernyataan (penambahan)"                     ,
+         "-q        = mengeluarkan pesan informasional"                    ,
+         "-Q        = mengeluarkan _SEMUA_ pesan"                          ,
+         "-Y        = mengeluarkan grafik negara"                          ,
+         "-G        = mengeluarkan grafik per jam"                         ,
+         "-H        = mengeluarkan statistik per jam"                      ,
+         "-L        = mengeluarkan legenda grafik terkode yang berwarna"   ,
+         "-l num    = memakai num garis background di atas grafik"         ,
+         "-m num    = Harga timeout kunjungan (seconds)"                   ,
+         "-T        = cetak informasi pewaktuan"                           ,
+         "-c file   = memakai file konfigurasi 'file'"                     ,
+         "-n nama   = nama host yang dipakai"                              ,
+         "-o dir    = direktori keluaran yang dipakai"                     ,
+         "-t nama   = judul laporan bernama 'nama'"                        ,
+         "-a nama   = sembunyikan browser bernama 'nama'"                  ,
+         "-r nama   = sembunyikan acuan bernama 'nama'"                    ,
+         "-s nama   = sembunyikan situs bernama 'nama'"                    ,
+         "-u nama   = sembunyikan URL bernama 'nama'"                      ,
+         "-x nama   = Pergunakan ekstensi nama file 'nama'"                ,
+         "-O nama   = Omit page 'nama'"                                    ,
+         "-P nama   = Ektensi tipe halaman bernama 'nama'"                 ,
+         "-I nama   = Alias indeks bernama 'nama'"                         ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Tampilkan browser teratas sejumlah num"              ,
+         "-C num    = Tampilkan negara teratas sejumlah num"               ,
+         "-R num    = Tampilkan acuan teratas sejumlah num"                ,
+         "-S num    = Tampilkan situs teratas sejumlah num"                ,
+         "-U num    = Tampilkan URL teratas sejumlah num"                  ,
+         "-e num    = Tampilkan Halaman Masuk teratas sejumlah num"        ,
+         "-E num    = Tampilkan Halaman Keluar teratas sejumlah num"       ,
+         "-g num    = Group Domains to 'num' levels"                       ,
+         "-X        = Hide individual sites"                               ,
+         "-z dir    = Use country flags in 'dir'"                          ,
+#ifdef USE_DNS
+         "-D nama   = Use DNS Cache file 'nama'"                           ,
+         "-N num    = Number of DNS processes (0=disable)"                 ,
+         "-j        = Enable native GeoDB lookups"                         ,
+         "-J nama   = Use GeoDB database 'nama'"                           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nama   = Use GeoIP database 'nama'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Periode Ringkasan";
+char *msg_hhdr_gt = "Dibuat:";
+
+/* main index strings */
+char *msg_main_us = "Grafik Akses untuk";
+/* char *msg_main_per= "12 bulan terakhir"; */
+char *msg_main_per= "Ringkasan berdasarkan bulan";
+char *msg_main_sum= "Ringkasan berdasarkan bulan";
+char *msg_main_da = "Rata-rata harian";
+char *msg_main_mt = "Total bulanan";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Pengaksesan harian untuk";
+char *msg_hmth_hu = "Pengaksesan per jam untuk";
+
+/* table header strings */
+char *msg_h_by    = "berdasarkan";
+char *msg_h_avg   = "Rata-rata";
+char *msg_h_max   = "Maks";
+char *msg_h_total = "Jumlah";
+char *msg_h_totals= "Total";
+char *msg_h_day   = "Hari";
+char *msg_h_mth   = "Bulan";
+char *msg_h_hour  = "Jam";
+char *msg_h_hits  = "Hit";
+char *msg_h_pages = "Halaman";
+char *msg_h_visits= "Kunjungan";
+char *msg_h_files = "File";
+char *msg_h_sites = "Situs";
+char *msg_h_xfer  = "KByte";
+char *msg_h_hname = "Nama Host";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Browser/User Agent";
+char *msg_h_ref   = "Acuan";
+char *msg_h_ctry  = "Negara";
+char *msg_h_search= "String pencarian";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistik harian";
+char *msg_hlnk_hs = "Statistik per jam";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Situs";
+char *msg_hlnk_a  = "Browser";
+char *msg_hlnk_c  = "Negara";
+char *msg_hlnk_r  = "Acuan";
+char *msg_hlnk_en = "Masuk";
+char *msg_hlnk_ex = "Keluar";
+char *msg_hlnk_sr = "Cari";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+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_us = "Jumlah Situs unik";
+char *msg_mtot_ur = "Jumlah Acuan unik";
+char *msg_mtot_ua = "Jumlah Browser unik";
+char *msg_mtot_uu = "Jumlah URL unik";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Hit per hari";
+char *msg_mtot_mhh= "Hit per jam";
+char *msg_mtot_mfd= "File per hari";
+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_rc = "Hit oleh kode respon";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistik harian untuk";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistik per jam untuk";
+
+/* country pie chart */
+char *msg_ctry_use= "Pengaksesan oleh negara untuk";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "";
+char *msg_top_of  = "urutan teratas dari sejumlah";
+char *msg_top_s   = "situs";
+char *msg_top_u   = "URL";
+char *msg_top_r   = "acuan";
+char *msg_top_a   = "browser/user agents";
+char *msg_top_c   = "negara";
+char *msg_top_en  = "halaman masuk";
+char *msg_top_ex  = "halaman keluar";
+char *msg_top_sr  = "string pencarian";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Mei", "Jun",
+                    "Jul", "Agt", "Sep",
+                    "Okt", "Nov", "Des"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januari",  "Februari", "Maret",   "April",
+                    "Mei",      "Juni",     "Juli",    "Agustus",
+                    "September","Oktober",  "November","Desember"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Kode respon tak terdefinisi",                     0 },
+         { "Kode 100 - Teruskan",                             0 },
+         { "Kode 101 - Pertukaran Protokol",                  0 },
+         { "Kode 200 - OK",                                   0 },
+         { "Kode 201 - Dibuat",                               0 },
+         { "Kode 202 - Diterima",                             0 },
+         { "Kode 203 - Informasi Non-Authoritatif",           0 },
+         { "Kode 204 - Tak Ada Isi",                          0 },
+         { "Kode 205 - Reset Isi",                            0 },
+         { "Kode 206 - Berisi sebagian",                      0 },
+         { "Kode 300 - Multi Pilihan",                        0 },
+         { "Kode 301 - Pindah Permanen",                      0 },
+         { "Kode 302 - Ditemukan",                            0 },
+         { "Kode 303 - Lihat lainnya",                        0 },
+         { "Kode 304 - Tak dimodifikasi",                     0 },
+         { "Kode 305 - Memakai Proxy",                        0 },
+         { "Kode 307 - Dipindahkan secara Temporer",          0 },
+         { "Kode 400 - Permintaan yang Buruk",                0 },
+         { "Kode 401 - Tidak terotorisasi",                   0 },
+         { "Kode 402 - Mensyaratkan Pembayaran",              0 },
+         { "Kode 403 - Terlarang",                            0 },
+         { "Kode 404 - Tidak ditemukan",                      0 },
+         { "Kode 405 - Metode Tidak Diizinkan",               0 },
+         { "Kode 406 - Tak dapat diterima",                   0 },
+         { "Kode 407 - Otentikasi Proxy Diperlukan",          0 },
+         { "Kode 408 - Permintaan Timeout",                   0 },
+         { "Kode 409 - Konflik",                              0 },
+         { "Kode 410 - Hilang",                               0 },
+         { "Kode 411 - Panjang Disyaratkan",                  0 },
+         { "Kode 412 - Prakondisi Gagal",                     0 },
+         { "Kode 413 - Entitas Permintaan Terlalu Besar",     0 },
+         { "Kode 414 - Permintaan-URI Terlalu Panjang",       0 },
+         { "Kode 415 - Tipe Media Tidak Didukung",            0 },
+         { "Kode 416 - Kisaran yang Diminta Tidak Memuaskan", 0 },
+         { "Kode 417 - Harapan Gagal",                        0 },
+         { "Kode 500 - Kesalahan Internal Server",            0 },
+         { "Kode 501 - Tidak Diimplementasikan",              0 },
+         { "Kode 502 - Gateway Jelek",                        0 },
+         { "Kode 503 - Layanan Tidak Tersedia",               0 },
+         { "Kode 504 - Gateway Timeout",                      0 },
+         { "Kode 505 - Versi HTTP Tidak Didukung",            0 } };
+
+char *msg_title   = "Statistik pengaksesan untuk";
+char *msg_h_other = "Lainnya";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Tak Dapat Dilacak/Tidak Diketahui",0,0,0 },
+{ IDX_3C('c','o','m'),    "Komersial (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Edukasi (edu)",                    0,0,0 },
+{ IDX_3C('g','o','v'),    "Pemerintahan dari US (gov)",       0,0,0 },
+{ IDX_3C('i','n','t'),    "Internasional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "Militer dari US (mil)",            0,0,0 },
+{ IDX_3C('n','e','t'),    "Jaringan Komputer (net)",          0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet Gaya Lama (arpa)",         0,0,0 },
+{ IDX_4C('n','a','t','o'),"Field Nato (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua dan Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia dan Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Kepulauan Cocos (Keeling)",        0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Republik Afrika Tengah",           0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Swiss",                            0,0,0 },
+{ IDX_2C('c','i'),        "Pantai Gading",                    0,0,0 },
+{ IDX_2C('c','k'),        "Kepulauan Cook",                   0,0,0 },
+{ IDX_2C('c','l'),        "Chili",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Cina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Pulau Christmas",                  0,0,0 },
+{ IDX_2C('c','y'),        "Siprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Republik Ceko",                    0,0,0 },
+{ IDX_2C('d','e'),        "Jerman",                           0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                         0,0,0 },
+{ IDX_2C('d','o'),        "Republik Dominika",                0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Equador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Mesir",                            0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Barat",                     0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spanyol",                          0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Kepulauan Falkland (Malvinas)",    0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Kepulauan Faroe",                  0,0,0 },
+{ IDX_2C('f','r'),        "Perancis",                         0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Yunani",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia dan S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard dan McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroasia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungaria",                         0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlandia",                         0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islandia",                         0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaika",                          0,0,0 },
+{ IDX_2C('j','o'),        "Yordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Jepang",                           0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kamboja",                          0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Komoro",                           0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts dan Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea (Utara)",                    0,0,0 },
+{ IDX_2C('k','r'),        "Korea (Selatan)",                  0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kepulauan Cayman",                 0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Kepulauan Marshall",               0,0,0 },
+{ IDX_2C('m','k'),        "Makedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Kepulauan Northern Mariana",       0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Kepulauan Norfolk",                0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norwegia",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nugini",                     0,0,0 },
+{ IDX_2C('p','h'),        "Filipina",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polandia",                         0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre dan Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Federasi Rusia",                   0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Kepulauan Solomon",                0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Swedia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapura",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Kepulauan Svalbard dan Jan Mayen", 0,0,0 },
+{ IDX_2C('s','k'),        "Republik Slovakia",                0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome dan Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Kepulauan Turks dan Caicos",       0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Timor Timur",                      0,0,0 },
+{ IDX_2C('t','r'),        "Turki",                            0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad dan Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent dan the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Africa Selatan",                   0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.italian b/lang/webalizer_lang.italian
new file mode 100644 (file)
index 0000000..370bbcb
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+   webalizer_lang.italian
+
+   Webalizer V2.0x Language Support file for Italian.
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   12-Jun-1998 Translation Level 1.1 by Alberto Benati (a_benati@4net.com)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   10-Jul-1999 Update for 1.3 by Massimiliano Masserelli (masserelli@interim.it)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   25-Sep-2000 Total Rewrite by Mattia Coatti (xkaos@galactica.it)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Italian";
+char *langcode  = "it";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "record";
+char *msg_addresses="indirizzi";
+char *msg_ignored = "ignorato/i";
+char *msg_bad     = "errato/i";
+char *msg_in      = "in";
+char *msg_seconds = "secondi";
+
+/* progress and setup error messages */
+char *msg_log_err = "Errore: Impossibile elaborare il file di log";
+char *msg_log_use = "Utilizzo il file di log";
+char *msg_dir_err = "Errore: Impossibile accedere alla directory";
+char *msg_dir_use = "Creo i file di output nella directory";
+char *msg_cur_dir = "Directory attuale";
+char *msg_hostname= "Il nome dell'host per il riepilogo e'";
+char *msg_ign_hist= "Ignoro il precedente file di history";
+char *msg_no_hist = "Impossibile trovare il file di history";
+char *msg_get_hist= "Elaboro il file di history";
+char *msg_put_hist= "Salvo le statistiche degli accessi nel file di history";
+char *msg_hist_err= "Errore: Impossibile modificare il file di history";
+char *msg_bad_hist= "Errore: Tralascio il record non valido nel file di history";
+char *msg_bad_conf= "Errore: Impossibile accedere al file di configurazione";
+char *msg_bad_key = "Attenzione: Keyword non valida";
+char *msg_bad_date= "Errore: Tralascio il record (data errata)";
+char *msg_ign_nscp= "Tralascio il record dell'header di Netscape";
+char *msg_bad_rec = "Tralascio il record errato";
+char *msg_no_vrec = "Nessun record valido rilevato";
+char *msg_gen_rpt = "Creo l'analisi statistica per";
+char *msg_gen_sum = "Creo il riassunto statistico";
+char *msg_get_data= "Elaboro i dati sull'esecuzione precedente";
+char *msg_put_data= "Salvo i dati sull'esecuzione attuale";
+char *msg_no_data = "Impossibile trovare i dati sull'esecuzione precedente";
+char *msg_bad_data= "Errore: Impossibile ripristinare i dati dell'esecuzione precedente";
+char *msg_data_err= "Errore: Impossibile salvare i dati dell'esecuzione attuale";
+char *msg_dup_data= "Attenzione: Possibile individuazione di dati duplicati";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nessun file di cache specificato";
+char *msg_dns_nodb= "Errore: Impossibile accedere al file contenente la cache DNS";
+char *msg_dns_nolk= "Errore: Impossibile effettuare il locking del file contenente la cache DNS";
+char *msg_dns_usec= "Utilizzo il file di cache DNS";
+char *msg_dns_rslv= "Risoluzione DNS";
+char *msg_dns_none= "Nessun dato da elaborare";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Impossibile allocare abbastanza memoria, classifica degli host disabilitata";
+char *msg_nomem_tr= "Impossibile allocare abbastanza memoria, classifica dei referrer disabilitata";
+char *msg_nomem_tu= "Impossibile allocare abbastanza memoria, classifica degli URL disabilitata";
+char *msg_nomem_tc= "Impossibile allocare abbastanza memoria, classifica dei paesi disabilitata";
+char *msg_nomem_ta= "Impossibile allocare abbastanza memoria, classifica dei browser disabilitata";
+char *msg_nomem_tsr="Impossibile allocare abbastanza memoria, classifica dei termini di ricerca disabilitata";
+char *msg_nomem_ti= "Impossibile allocare abbastanza memoria, classifica degli username disabilitata";
+char *msg_nomem_dh= "Errore nell'aggiungere il nome dell'host (giornaliero), tralasciato";
+char *msg_nomem_mh= "Errore nell'aggiungere il nome dell'host (mensile), tralasciato";
+char *msg_nomem_u = "Errore nell'aggiungere l'URL, tralasciato";
+char *msg_nomem_a = "Errore nell'aggiungere il browser, tralasciato";
+char *msg_nomem_r = "Errore nell'aggiungere il referrer, tralasciato";
+char *msg_nomem_sc= "Errore nell'aggiungere la stringa di ricerca, tralasciato";
+char *msg_nomem_i = "Errore nell'aggiungere l'username, tralasciato";
+
+/* log record errors */
+char *msg_big_rec = "Attenzione: Tralascio il record di dimensione eccessiva";
+char *msg_big_host= "Attenzione: Troncato il record dell'hostname in quanto di dimensione eccessiva";
+char *msg_big_date= "Attenzione: Troncata il record della data in quanto di dimensione eccessiva";
+char *msg_big_req = "Attenzione: Troncato il record della richiesta in quanto di dimensione eccessiva";
+char *msg_big_ref = "Attenzione: Troncato il record del referrer in quanto di dimensione eccessiva";
+char *msg_big_user= "Attenzione: Troncato il record dell'username in quanto di dimensione eccessiva";
+char *msg_big_one = "Attenzione: La stringa e' di dimensione eccessiva";
+
+/* misc errors */
+char *msg_no_open = "Errore: Impossibile accedere al file";
+
+/* Help display... */
+char *h_usage1 = "Sintassi";
+char *h_usage2 = "[parametri] [file di log]";
+char *h_msg[]= {
+         "-h        = visualizza questa schermata"         ,
+         "-V        = mostra il numero di versione"        ,
+         "-v        = be verbose"                          ,
+         "-d        = visualizza informazioni di debug addizionali",
+         "-F tipo   = specifica il tipo di log (clf | ftp | squid | w3c)",
+         "-f        = elenca sequenzialmente gli errori"   ,
+         "-i        = tralascia il file di history"        ,
+         "-p        = conserva le statistiche (modalita' incrementale)",
+         "-b        = ignore state (incremental)"          ,
+         "-q        = non visualizza i messaggi informativi",
+         "-Q        = non visualizza alcun messaggio"      ,
+         "-Y        = non visualizza il grafico relativo ai paesi",
+         "-G        = non visualizza il grafico orario"    ,
+         "-H        = non visualizza le statistiche orarie",
+         "-L        = non visualizza le legende policromatiche nei grafici"   ,
+         "-l num    = utilizza num linee nello sfondo dei grafici",
+         "-m num    = valore di timeout per gli accessi (seconds)",
+         "-T        = visualizza informazioni sul tempo di esecuzione",
+         "-c file   = utilizza 'file' per le impostazioni di configurazione",
+         "-n nome   = nome dell'host da utilizzare"        ,
+         "-o dir    = directory in cui collocare i file di output",
+         "-t nome   = nome da utilizzare per il titolo del rapporto statistico",
+         "-a nome   = ignora il browser specificato"       ,
+         "-r nome   = ignora il referrer specificato"      ,
+         "-s nome   = ignora l'host specificato"           ,
+         "-u nome   = ignora l'URL specificato"            ,
+         "-x ext    = utilizza 'ext' come estensione per i file",
+         "-O nome   = Omit page 'nome'"                    ,
+         "-P ext    = utilizza 'ext' come estensione per le pagine",
+         "-I nome   = utilizza 'nome' come file di indice" ,
+         "-K num    = 'num' months in summary table"       , 
+         "-k num    = 'num' months in summary graph"       ,
+         "-A num    = visualizza 'num' browser nella classifica",
+         "-C num    = visualizza 'num' paesi nella classifica",
+         "-R num    = visualizza 'num' referrer nella classifica",
+         "-S num    = visualizza 'num' nomi di host nella classifica",
+         "-U num    = visualizza 'num' URL nella classifica",
+         "-e num    = visualizza 'num' pagine in ingresso nella classifica",
+         "-E num    = visualizza 'num' pagine in uscita nella classifica",
+         "-g num    = raggruppa i domini fino a 'num' livelli",
+         "-X        = non visualizza i singoli hostname"    ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D nome   = utilizza 'nome' come file di cache DNS",
+         "-N num    = numero massimo di thread per la risoluzione DNS (0=non abilitata)",
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J nome   = Use GeoDB database 'nome'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nome   = Use GeoIP database 'nome'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Riepilogo per il periodo";
+char *msg_hhdr_gt = "Generato";
+
+/* main index strings */
+char *msg_main_us = "Riepilogo statistico per";
+/* char *msg_main_per= "Ultimi 12 mesi"; */
+char *msg_main_per= "Riepilogo mensile";
+char *msg_main_sum= "Riepilogo mensile";
+char *msg_main_da = "Media giornaliera";
+char *msg_main_mt = "Totale mensile";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Contatti giornalieri per";
+char *msg_hmth_hu = "Contatti orari per";
+
+/* table header strings */
+char *msg_h_by    = "Per";
+char *msg_h_avg   = "Media";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Totale";
+char *msg_h_totals= "Totali";
+char *msg_h_day   = "Giorno";
+char *msg_h_mth   = "Mese";
+char *msg_h_hour  = "Ora";
+char *msg_h_hits  = "Contatti";
+char *msg_h_pages = "Pagine";
+char *msg_h_visits= "Visite";
+char *msg_h_files = "File";
+char *msg_h_sites = "Siti";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Nomi di Host";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Browser";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "Paese";
+char *msg_h_search= "Termini di Ricerca";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistiche Giornaliere";
+char *msg_hlnk_hs = "Statistiche Orarie";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Nomi di Host";
+char *msg_hlnk_a  = "Browser";
+char *msg_hlnk_c  = "Paesi";
+char *msg_hlnk_r  = "Referrer";
+char *msg_hlnk_en = "Ingressi";
+char *msg_hlnk_ex = "Uscite";
+char *msg_hlnk_sr = "Ricerca";
+char *msg_hlnk_i  = "Utenti";
+
+/* monthly total table */
+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_us = "Nomi di Host";
+char *msg_mtot_ur = "Referrer";
+char *msg_mtot_ua = "Browser";
+char *msg_mtot_uu = "URL";
+char *msg_mtot_ui = "Username";
+char *msg_mtot_mhd= "Contatti Giornalieri";
+char *msg_mtot_mhh= "Contatti Orari";
+char *msg_mtot_mfd= "File Giornalieri";
+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_rc = "Contatti per Codice di Risposta";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistiche Giornaliere per";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistiche Orarie per";
+
+/* country pie chart */
+char *msg_ctry_use= "Riepilogo dei Paesi per";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "di";
+char *msg_top_s   = "Nomi di Host Totali";
+char *msg_top_u   = "URL Totali";
+char *msg_top_r   = "Referrer Totali";
+char *msg_top_a   = "Browser Totali";
+char *msg_top_c   = "Paesi Totali";
+char *msg_top_en  = "Pagine in Ingresso Totali";
+char *msg_top_ex  = "Pagine in Uscita Totali";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "Visualizza ogni Nome di Host";
+char *msg_v_urls  = "Visualizza ogni URL";
+char *msg_v_refs  = "Visualizza ogni Referrer";
+char *msg_v_agents= "Visualizza ogni Browser";
+char *msg_v_search= "Visualizza ogni Termine di Ricerca";
+char *msg_v_users = "Visualizza ogni Username";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Gen", "Feb", "Mar",
+                    "Apr", "Mag", "Giu",
+                    "Lug", "Ago", "Set",
+                    "Ott", "Nov", "Dic"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Gennaio",  "Febbraio", "Marzo",   "Aprile",
+                    "Maggio",      "Giugno",     "Luglio",    "Agosto",
+                    "Settembre","Ottobre",  "Novembre","Dicembre"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continua",                        0 },
+         { "Code 101 - Scambio di Protocollo",           0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Creato",                          0 },
+         { "Code 202 - Accettato",                       0 },
+         { "Code 203 - Informazione non Autoritativa",   0 },
+         { "Code 204 - Nessun Contenuto",                0 },
+         { "Code 205 - Contenuto Reimpostato",           0 },
+         { "Code 206 - Contenuto Parziale",              0 },
+         { "Code 300 - Scelta Multipla",                 0 },
+         { "Code 301 - Spostato Permanentemente",        0 },
+         { "Code 302 - Trovato",                         0 },
+         { "Code 303 - Vedere Altro",                    0 },
+         { "Code 304 - Non Modificato",                  0 },
+         { "Code 305 - Utilizzare Proxy",                0 },
+         { "Code 307 - Spostato Temporaneamente",        0 },
+         { "Code 400 - Richiesta Errata",                0 },
+         { "Code 401 - Non Autorizzato",                 0 },
+         { "Code 402 - Richiesto Pagamento",             0 },
+         { "Code 403 - Proibito",                        0 },
+         { "Code 404 - Non Trovato",                     0 },
+         { "Code 405 - Metodo Non Permesso",             0 },
+         { "Code 406 - Non Accettabile",                 0 },
+         { "Code 407 - Il Proxy Richiede Autenticazione",0 },
+         { "Code 408 - Richiesta Scaduta",               0 },
+         { "Code 409 - Conflitto",                       0 },
+         { "Code 410 - Abbandonato",                     0 },
+         { "Code 411 - Lunghezza Richiesta",             0 },
+         { "Code 412 - Prerequisito Fallito",            0 },
+         { "Code 413 - Entita' Richiesta Troppo Estesa", 0 },
+         { "Code 414 - Indirizzo Richiesto Troppo Lungo",0 },
+         { "Code 415 - Media Non Supportato",            0 },
+         { "Code 416 - Intervallo di Richiesta Non Soddisfabile", 0 },
+         { "Code 417 - Aspettativa non Soddisfatta",     0 },
+         { "Code 500 - Errore Interno del Server",       0 },
+         { "Code 501 - Non Implementato",                0 },
+         { "Code 502 - Gateway Errato",                  0 },
+         { "Code 503 - Servizio non Disponibile",        0 },
+         { "Code 504 - Timeout nell'Accesso al Gateway", 0 },
+         { "Code 505 - Versione HTTP Non Supportata", 0 } };
+
+char *msg_title   = "Statistiche per";
+char *msg_h_other = "Altri";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Non Risolto/Sconosciuto",          0,0,0 },
+{ IDX_3C('c','o','m'),    "Commerciali (.com)",               0,0,0 },
+{ IDX_3C('e','d','u'),    "Universita' (.edu)",               0,0,0 },
+{ IDX_3C('g','o','v'),    "Enti Governativo (.gov)",          0,0,0 },
+{ IDX_3C('i','n','t'),    "Enti Internazionali (.int)",       0,0,0 },
+{ IDX_3C('m','i','l'),    "Enti Militari (.mil)",             0,0,0 },
+{ IDX_3C('n','e','t'),    "Reti (.net)",                      0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizzazioni Generiche (.org)",  0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet (.arpa)",                  0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (.nato)",                     0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emirati Arabi",                    0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua e Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antille Olandesi",                 0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antartica",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Americana",                  0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia e Herzegovina",             0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgio",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Sultanato del Brunei",             0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasile",                          0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Isole Bouvet",                     0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Isole Cocos",                      0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Africa Centrale",                  0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Svizzera",                         0,0,0 },
+{ IDX_2C('c','i'),        "Costa D'Avorio",                   0,0,0 },
+{ IDX_2C('c','k'),        "Isole Cook",                       0,0,0 },
+{ IDX_2C('c','l'),        "Cile",                             0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Cina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Capo Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Isola di Natale",                  0,0,0 },
+{ IDX_2C('c','y'),        "Cipro",                            0,0,0 },
+{ IDX_2C('c','z'),        "Repubblica Ceca",                  0,0,0 },
+{ IDX_2C('d','e'),        "Germania",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danimarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Repubblica Dominicana",            0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egitto",                           0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Occidentale",               0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spagna",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Isole Falkland (Malvine)",         0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Isole Faroe",                      0,0,0 },
+{ IDX_2C('f','r'),        "Francia",                          0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Gran Bretagna",                    0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guiana Francese",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibilterra",                       0,0,0 },
+{ IDX_2C('g','l'),        "Groenlandia",                      0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupa",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guinea Equatoriale",               0,0,0 },
+{ IDX_2C('g','r'),        "Grecia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Isole di S. Georgia e S. Sandwich",0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Isole Heard e McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croazia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungaria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israele",                          0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "Territori Britannici nell'Oceano Indiano",0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islanda",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Giordania",                        0,0,0 },
+{ IDX_2C('j','p'),        "Giappone",                         0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts e Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Corea (Nord)",                     0,0,0 },
+{ IDX_2C('k','r'),        "Corea (Sud)",                      0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Isole Cayman",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libano",                           0,0,0 },
+{ IDX_2C('l','c'),        "Santa Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituania",                         0,0,0 },
+{ IDX_2C('l','u'),        "Lussemburgo",                      0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Isole Marshall",                   0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Isole Mariana del Nord",           0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldive",                          0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Messico",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambico",                        0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nuova Caledonia",                  0,0,0 },
+{ IDX_2C('n','e'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Isole Norfolk",                    0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Olanda",                           0,0,0 },
+{ IDX_2C('n','o'),        "Norvegia",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nuova Zealanda",                   0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinesia Francese",               0,0,0 },
+{ IDX_2C('p','g'),        "Papua e Nuova Guinea",             0,0,0 },
+{ IDX_2C('p','h'),        "Filippine",                        0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polonia",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Porto Rico",                       0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portogallo",                       0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Federazione Russa",                0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudita",                   0,0,0 },
+{ IDX_2C('s','b'),        "Isole Solomon",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Svezia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Isole Svalbard e Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "Repubblica Slovacca",              0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome e Principe",              0,0,0 },
+{ IDX_2C('s','u'),        "Ex USSR",                          0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Isole Turks e Caicos",             0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Territori Francesi Meridionali",   0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailandia",                       0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turchia",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad e Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Regno Unito",                      0,0,0 },
+{ IDX_2C('u','m'),        "Isole US Minori",                  0,0,0 },
+{ IDX_2C('u','s'),        "Stati Uniti",                      0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Citta' del Vaticano",              0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent e Grenadines",       0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Isole Vergini (Britanniche)",      0,0,0 },
+{ IDX_2C('v','i'),        "Isole Vergini (Statunitensi)",     0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Isole Wallis e Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Sud Africa",                       0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.japanese b/lang/webalizer_lang.japanese
new file mode 100644 (file)
index 0000000..9ac229a
--- /dev/null
@@ -0,0 +1,629 @@
+/*
+   webalizer_lang.japanese
+
+   Webalizer V2.0x Language Support file for Japanese.
+   09-Jun-2001 by Yasuhiko Takahashi<ty@club-e.co.jp>
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Japanese";
+char *langcode  = "ja";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoIP lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+/* char *msg_hhdr_sp = "Summary Period";*/
+char *msg_hhdr_sp = "Åý·×´ü´Ö";
+char *msg_hhdr_gt = "ºîÀ®Æü»þ";
+
+/* main index strings */
+char *msg_main_us = "Usage summary for";
+/* char *msg_main_per= "²áµî12¥ö·î"; */
+char *msg_main_per= "·î¤ÎÅý·×";
+char *msg_main_sum= "·î¤ÎÅý·×";
+char *msg_main_da = "°ìÆü¤¢¤¿¤ê¤ÎÊ¿¶Ñ";
+char *msg_main_mt = "·î¹ç·×";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daily usage for";
+char *msg_hmth_hu = "Hourly usage for";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Ê¿¶Ñ";
+char *msg_h_max   = "ºÇÂç";
+char *msg_h_total = "¹ç·×";
+char *msg_h_totals= "Áí¹ç·×";
+char *msg_h_day   = "Æü";
+char *msg_h_mth   = "·î";
+char *msg_h_hour  = "»þ";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visits";
+char *msg_h_files = "Files";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "¥Û¥¹¥È̾";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "¥æ¡¼¥¶¥¨¡¼¥¸¥§¥ó¥È";
+char *msg_h_ref   = "¥ê¥Õ¥¡¥é¡¼";
+char *msg_h_ctry  = "¹ñ";
+char *msg_h_search= "¸¡º÷ʸ»úÎó";
+char *msg_h_uname = "¥æ¡¼¥¶Ì¾";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Æü¤´¤È¤ÎÅý·×";
+char *msg_hlnk_hs = "»þ´Ö¤´¤È¤ÎÅý·×";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "¥µ¥¤¥È";
+char *msg_hlnk_a  = "¥¨¡¼¥¸¥§¥ó¥È";
+char *msg_hlnk_c  = "¹ñ";
+char *msg_hlnk_r  = "¥ê¥Õ¥¡¥é¡¼";
+char *msg_hlnk_en = "¥¨¥ó¥È¥ê¡¼";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "¸¡º÷ʸ»úÎó";
+char *msg_hlnk_i  = "¥æ¡¼¥¶¿ô";
+
+/* monthly total table */
+char *msg_mtot_ms = "·î¤ÎÅý·×";
+char *msg_mtot_th = "Á´¥Ò¥Ã¥È¿ô";
+char *msg_mtot_tf = "Á´¥Õ¥¡¥¤¥ë¿ô";
+char *msg_mtot_tx = "Á´ KBytes¿ô";
+char *msg_mtot_us = "¸ÄÊÌ¥µ¥¤¥È¿ô";
+char *msg_mtot_ur = "¸ÄÊÌ¥ê¥Õ¥¡¥é¡¼¿ô";
+char *msg_mtot_ua = "¸ÄÊ̥桼¥¶¥¨¡¼¥¸¥§¥ó¥È¿ô";
+char *msg_mtot_uu = "¸ÄÊÌURL¿ô";
+char *msg_mtot_ui = "¸ÄÊ̥桼¥¶¿ô";
+char *msg_mtot_mhd= "°ìÆü¤¢¤¿¤ê¤Î¥Ò¥Ã¥È¿ô";
+char *msg_mtot_mhh= "°ì»þ´Ö¤¢¤¿¤ê¤Î¥Ò¥Ã¥È¿ô";
+char *msg_mtot_mfd= "°ìÆü¤¢¤¿¤ê¤Î¥Õ¥¡¥¤¥ë¿ô";
+char *msg_mtot_mpd= "°ìÆü¤¢¤¿¤ê¤Î¥Ú¡¼¥¸¿ô";
+char *msg_mtot_msd= "Sites per Day";
+char *msg_mtot_mvd= "°ìÆü¤¢¤¿¤ê¤ÎˬÌä¼Ô¿ô";
+char *msg_mtot_mkd= "°ìÆü¤¢¤¿¤ê¤ÎKBytes¿ô";
+char *msg_mtot_rc = "¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É¤´¤È¤Î¥Ò¥Ã¥È¿ô";
+
+/* daily total table */
+char *msg_dtot_ds = "Æü¤´¤È¤ÎÅý·×";
+
+/* hourly total table */
+char *msg_htot_hs = "»þ´Ö¤´¤È¤ÎÅý·×";
+
+/* country pie chart */
+char *msg_ctry_use= "Usage by Country for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "¥È¥Ã¥×";
+char *msg_top_of  = "of";
+char *msg_top_s   = "¥µ¥¤¥È";
+char *msg_top_u   = "Á´URL";
+char *msg_top_r   = "¥ê¥Õ¥¡¥é¡¼";
+char *msg_top_a   = "¥æ¡¼¥¶¥¨¡¼¥¸¥§¥ó¥È";
+char *msg_top_c   = "¹ñ";
+char *msg_top_en  = "Total Entry Pages";
+char *msg_top_ex  = "Total Exit Pages";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "January",  "February", "March",   "April",
+                    "May",      "June",     "July",    "August",
+                    "September","October",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "ÍøÍÑÅý·×";
+char *msg_h_other = "Other";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.korean b/lang/webalizer_lang.korean
new file mode 100644 (file)
index 0000000..d857f85
--- /dev/null
@@ -0,0 +1,633 @@
+/*
+   webalizer_lang.korean
+
+   Webalizer V2.0x Language Support file for Korean.
+   10-Arp-1999 Translated by Seung-young Kim (nobreak@nobreak.com)
+   20-Arp-1999 Corrections/updates by Seung-young Kim (nobreak@nobreak.com)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Korean";
+char *langcode  = "ko";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "·¹ÄÚµå";
+char *msg_addresses="addresses";
+char *msg_ignored = "¹«½Ã";
+char *msg_bad     = "ºÒ·®";
+char *msg_in      = "µ¿À۽ð£";
+char *msg_seconds = "ÃÊ";
+
+/* progress and setup error messages */
+char *msg_log_err = "¿À·ù: ·Î±×ÆÄÀÏÀ» Ã£À» ¼ö ¾øÀ½";
+char *msg_log_use = "´ë»ó ·Î±× ÆÄÀÏ:";
+char *msg_dir_err = "¿À·ù: µð·ºÅ丮¸¦ º¯°æÇÒ ¼ö ¾øÀ½";
+char *msg_dir_use = "Ãâ·Â µð·ºÅ丮:";
+char *msg_cur_dir = "ÇöÀç µð·ºÅ丮";
+char *msg_hostname= "È£½ºÆ®¸í:";
+char *msg_ign_hist= "±âÁ¸ÀÇ È÷½ºÅ丮 Á¤º¸ ¹«½Ã";
+char *msg_no_hist = "È÷½ºÅ丮 ÆÄÀÏÀ» Ã£À» ¼ö ¾øÀ½";
+char *msg_get_hist= "±âÁ¸ È÷½ºÅ丮 Á¤º¸ Çؼ®:";
+char *msg_put_hist= "È÷½ºÅ丮 Á¤º¸ ÀúÀå";
+char *msg_hist_err= "¿À·ù: È÷½ºÅ丮 ÆÄÀÏÀ» ÀúÀåÇÒ ¼ö ¾øÀ½";
+char *msg_bad_hist= "¿À·ù: ÀûÇÕÇÏÁö ¾ÊÀº È÷½ºÅ丮 ·¹Äڵ堹«½Ã";
+char *msg_bad_conf= "¿À·ù: ¼³Á¤ ÆÄÀÏÀ» Ã£À» ¼ö ¾øÀ½";
+char *msg_bad_key = "ÁÖÀÇ: ¾Ë¼ö¾ø´Â Å°¿öµå";
+char *msg_bad_date= "¿À·ù: ·¹Äڵ堹«½Ã (À߸øµÈ ³¯Â¥)";
+char *msg_ign_nscp= "³Ý½ºÄÉÀÌÇÁ Çì´õ ·¹Äڵ堹«½Ã";
+char *msg_bad_rec = "ºÎÀûÀýÇÑ ·¹Äڵ堹«½Ã";
+char *msg_no_vrec = "ó¸®ÇÒ ·¹Äڵ堾øÀ½!";
+char *msg_gen_rpt = "¸®Æ÷Æ® »ý¼º:";
+char *msg_gen_sum = "¸®Æ÷Æ® Ãâ·Â";
+char *msg_get_data= "±âÁ¸ Åë°è Á¤º¸ Çؼ®:";
+char *msg_put_data= "Åë°è Á¤º¸ ÀúÀå";
+char *msg_no_data = "Åë°è Á¤º¸ ÆÄÀÏÀ» Ã£À» ¼ö ¾øÀ½";
+char *msg_bad_data= "¿À·ù: Åë°è Á¤º¸¸¦ Çؼ®ÇÒ ¼ö ¾øÀ½";
+char *msg_data_err= "¿À·ù: Åë°è Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ¾øÀ½";
+char *msg_dup_data= "ÁÖÀÇ: Áߺ¹µÈ Á¤º¸°¡ ÀÖÀ½";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "¸Þ¸ð¸® ºÎÁ·, '»óÀ§ »çÀÌÆ®' °Ç³Ê¶Ü!";
+char *msg_nomem_tr= "¸Þ¸ð¸® ºÎÁ·, '»óÀ§ ·¹ÆÛ·²' °Ç³Ê¶Ü!";
+char *msg_nomem_tu= "¸Þ¸ð¸® ºÎÁ·, '»óÀ§ URL' °Ç³Ê¶Ü!";
+char *msg_nomem_tc= "¸Þ¸ð¸® ºÎÁ·, '»óÀ§ ±¹°¡' °Ç³Ê¶Ü!";
+char *msg_nomem_ta= "¸Þ¸ð¸® ºÎÁ·, '»óÀ§ ¿¡ÀÌÀüÆ®' °Ç³Ê¶Ü!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "È£½ºÆ® Ãß°¡ ½ÇÆР(ÀϺ°), ¹«½Ã";
+char *msg_nomem_mh= "È£½ºÆ® Ãß°¡ ½ÇÆР(¿ùº°), ¹«½Ã";
+char *msg_nomem_u = "URL Ãß°¡ ½ÇÆÐ, ¹«½Ã";
+char *msg_nomem_a = "¿¡ÀÌÀüÆ® Ãß°¡ ½ÇÆÐ, ¹«½Ã";
+char *msg_nomem_r = "·¹ÆÛ·² Ãß°¡ ½ÇÆÐ, ¹«½Ã";
+char *msg_nomem_sc= "Error adding Search String node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "¿À·ù: ÃÊ°ú ·Î±× ·¹Äڵ堹«½Ã";
+char *msg_big_host= "ÁÖÀÇ: ±ä È£½ºÆ®³×ÀӠ¥¸§";
+char *msg_big_date= "ÁÖÀÇ: ±ä ³¯Â¥ Çʵå Â¥¸§";
+char *msg_big_req = "ÁÖÀÇ: ±ä ¿äû Çʵå Â¥¸§";
+char *msg_big_ref = "ÁÖÀÇ: ±ä ·¹ÆÛ·² Çʵå Â¥¸§";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "ÁÖÀÇ: ¹®ÀÚ¿­ ±æÀÌ ÃÊ°ú";
+
+/* misc errors */
+char *msg_no_open = "¿À·ù: ÆÄÀÏÀ» Ã£À» ¼ö ¾øÀ½";
+
+/* Help display... */
+char *h_usage1 = "»ç¿ë¹ý";
+char *h_usage2 = "[¿É¼Ç] [·Î±× ÆÄÀÏ]";
+char *h_msg[]= {
+         "-h        = µµ¿ò¸» È­¸é Ãâ·Â"                    ,
+         "-V        = ÆǹøÈ£ Ãâ·Â"                         ,
+         "-v        = be verbose"                          ,
+         "-d        = Ãß°¡ µð¹ö±ë Á¤º¸ Ãâ·Â"               ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = fold sequence errors"                ,
+         "-i        = È÷½ºÅ丮 ÆÄÀÏ ¹«½Ã"                  ,
+         "-p        = Åë°è Á¤º¸ ÀúÀå (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = ÀϹݠÁ¤º¸ Ãâ·Â »ý·«"                 ,
+         "-Q        = ¸ðµç Á¤º¸ Ãâ·Â »ý·«"                 ,
+         "-Y        = supress country graph"               ,
+         "-G        = ÀϺ° ±×·¡ÇÁ »ý·«"                    ,
+         "-H        = ½Ã°£º° Åë°è »ý·«"                    ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timeout value (seconds)"       ,
+         "-T        = µ¿ÀÛ ½Ã°£ Ãâ·Â"                      ,
+         "-c file   = ¼³Á¤ ÆÄÀÏ"                           ,
+         "-n name   = È£½ºÆ®¸í"                            ,
+         "-o dir    = Ãâ·Â µð·ºÅ丮"                       ,
+         "-t name   = Ãâ·Â Å¸ÀÌƲ"                         ,
+         "-a name   = ÇØ´ç ¿¡ÀÌÀüÆ® °¨Ãã"                  ,
+         "-r name   = ÇØ´ç ·¹ÆÛ·² °¨Ãã"                    ,
+         "-s name   = ÇØ´ç »çÀÌÆ® °¨Ãã"                    ,
+         "-u name   = ÇØ´ç URL °¨Ãã"                       ,
+         "-x name   = Ãâ·Â ÆÄÀÏÀÇ È®ÀåÀÚ"                  ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Ãâ·Â ÆÄÀÏÀÇ ÆÄÀϸí"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Ãâ·ÂÇÒ '»óÀ§ ¿¡ÀÌÀüÆ®' °³¼ö"         ,
+         "-C num    = Ãâ·ÂÇÒ '»óÀ§ ±¹°¡' °³¼ö"             ,
+         "-R num    = Ãâ·ÂÇÒ '»óÀ§ ·¹ÆÛ·²' °³¼ö"           ,
+         "-S num    = Ãâ·ÂÇÒ '»óÀ§ »çÀÌÆ®' °³¼ö"           ,
+         "-U num    = Ãâ·ÂÇÒ '»óÀ§ URL' °³¼ö"              ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Åë°è ±â°£";
+char *msg_hhdr_gt = "ÃÖÁ¾ °»½ÅÀÏ";
+
+/* main index strings */
+char *msg_main_us = "Usage summary for";
+/* char *msg_main_per= "Last 12 Months"; */
+char *msg_main_per= "ÃÖÁ¾ 12°³¿ù";
+char *msg_main_sum= "ÃÖÁ¾ 12°³¿ù";
+char *msg_main_da = "ÀÏ Æò±Õ";
+char *msg_main_mt = "¿ù ÃÑ°è";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daily usage for";
+char *msg_hmth_hu = "Hourly usage for";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Æò±Õ";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Àüü";
+char *msg_h_totals= "ÃÑ°è";
+char *msg_h_day   = "ÀÏ";
+char *msg_h_mth   = "¿ù";
+char *msg_h_hour  = "½Ã°£";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visits";
+char *msg_h_files = "Files";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "È£½ºÆ®¸í";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "¿¡ÀÌÀüÆ®";
+char *msg_h_ref   = "·¹ÆÛ·²";
+char *msg_h_ctry  = "±¹°¡";
+char *msg_h_search= "Search String";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "ÀϺ° Åë°è";
+char *msg_hlnk_hs = "½Ã°£´ëº° Åë°è";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "»çÀÌÆ®";
+char *msg_hlnk_a  = "¿¡ÀÌÀüÆ®";
+char *msg_hlnk_c  = "±¹°¡";
+char *msg_hlnk_r  = "·¹ÆÛ·²";
+char *msg_hlnk_en = "Entry";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "Search";
+char *msg_hlnk_i  = "Users";
+
+/* monthly total table */
+char *msg_mtot_ms = "¿ùº° Åë°è";
+char *msg_mtot_th = "ÃÑ È÷Æ®¼ö";
+char *msg_mtot_tf = "ÃÑ ÆÄÀϼö";
+char *msg_mtot_tx = "ÃÑ KByte";
+char *msg_mtot_us = "ÃÑ °³º° »çÀÌÆ®";
+char *msg_mtot_ur = "ÃÑ °³º° ·¹ÆÛ·²";
+char *msg_mtot_ua = "ÃÑ °³º° ¿¡ÀÌÀüÆ®";
+char *msg_mtot_uu = "ÃÑ °³º° URL";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Hits per Day";
+char *msg_mtot_mhh= "Hits per Hour";
+char *msg_mtot_mfd= "Files per Day";
+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_rc = "ÀÀ´ä Äڵ庰 È÷Æ®¼ö";
+
+/* daily total table */
+char *msg_dtot_ds = "ÀϺ° Åë°è";
+
+/* hourly total table */
+char *msg_htot_hs = "½Ã°£´ëº° Åë°è";
+
+/* country pie chart */
+char *msg_ctry_use= "Usage by Country for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "»óÀ§";
+char *msg_top_of  = "/";
+char *msg_top_s   = "»çÀÌÆ®";
+char *msg_top_u   = "URL";
+char *msg_top_r   = "·¹ÆÛ·²";
+char *msg_top_a   = "¿¡ÀÌÀüÆ®";
+char *msg_top_c   = "±¹°¡";
+char *msg_top_en  = "Total Entry Pages";
+char *msg_top_ex  = "Total Exit Pages";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "January",  "February", "March",   "April",
+                    "May",      "June",     "July",    "August",
+                    "September","October",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "»ç¿ë·® Åë°è:";
+char *msg_h_other = "±âŸ";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.latvian b/lang/webalizer_lang.latvian
new file mode 100644 (file)
index 0000000..413cee6
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+   webalizer_lang.latvian
+
+   Webalizer V2.0x Language Support file for Latvian.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   06-Jul-2000 Latvian translation by Andis (andis@millenium.lv)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Latvian";
+char *langcode  = "lv";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "ieraksti";
+char *msg_addresses="addreses";
+char *msg_ignored = "ignorçti";
+char *msg_bad     = "slikti";
+char *msg_in      = "ienâkoðie";
+char *msg_seconds = "sekundes";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Nevaru atvçrt Log failu";
+char *msg_log_use = "Izmantojam logfailu";
+char *msg_dir_err = "Error: Nepareiza direktorija";
+char *msg_dir_use = "Izvietojam Statistiku iekð";
+char *msg_cur_dir = "Esoðâ Direktorija";
+char *msg_hostname= "Ðî pârskata Hostname ir";
+char *msg_ign_hist= "Ignorçjam iepriekðçjos datus...";
+char *msg_no_hist = "Nav informâcijas par vçsturi...";
+char *msg_get_hist= "Lasâm vçstures failus...";
+char *msg_put_hist= "Saglabâjam vçstures informâciju...";
+char *msg_hist_err= "Error: Nevar saglabât vçstures failus";
+char *msg_bad_hist= "Error: Bojâti vçstures ieraksti";
+char *msg_bad_conf= "Error: Nevar atvçrt konfigurâcijas failu";
+char *msg_bad_key = "Warning: Nepareizs keyword";
+char *msg_bad_date= "Error: Izlaiþam ierakstu (kïûda datumâ)";
+char *msg_ign_nscp= "Izlaiþam Netscape header ierakstu";
+char *msg_bad_rec = "Izlaiþam sliktu ierakstu";
+char *msg_no_vrec = "Nav atrasti derîgi ieraksti!";
+char *msg_gen_rpt = "Veidojam pârskatu par";
+char *msg_gen_sum = "Veidojam summâro pârskatu par";
+char *msg_get_data= "Lasâm iepriekðçjos datus..";
+char *msg_put_data= "Saglabâjam paðreizçjos datus...";
+char *msg_no_data = "Iepriekðçjie dati nav atrasti...";
+char *msg_bad_data= "Error: Nav iespçjams atjaunot iepriekðçjos datus";
+char *msg_data_err= "Error: Nav iespçjams saglabât paðreizçjos datus";
+char *msg_dup_data= "Warning: Iespçjams, ka dati atkârtojas";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Cache fails nav atrasts, pârtraucam...";
+char *msg_dns_nodb= "Error: Nevar atvçrt DNS cache failu";
+char *msg_dns_nolk= "Error: Nevar noslçgt DNS cache failu";
+char *msg_dns_usec= "Lietojam DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (HHMMSS format)"  ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URL's"               ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Sumârais Periods";
+char *msg_hhdr_gt = "Izveidots";
+
+/* main index strings */
+char *msg_main_us = "Apmeklçjumu pârskats pâr";
+/* char *msg_main_per= "Pçdçjie 12 Mçneði"; */
+char *msg_main_per= "Pârskati par mçneðiem";
+char *msg_main_sum= "Pârskati par mçneðiem";
+char *msg_main_da = "Ikdienas pârskati";
+char *msg_main_mt = "Mçneðu kopsummas";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Dienas pârskati par ";
+char *msg_hmth_hu = "Stundu pârskati par";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Avg";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totals";
+char *msg_h_day   = "Diena";
+char *msg_h_mth   = "Mçneði";
+char *msg_h_hour  = "Stundas";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Lapas";
+char *msg_h_visits= "Apmeklçjumi";
+char *msg_h_files = "Faili";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Hostname";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Lietotâja programma";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "Valsts";
+char *msg_h_search= "Search String";
+char *msg_h_uname = "Lietotâja vârds";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Dienas statistika";
+char *msg_hlnk_hs = "Stundu statistika";
+char *msg_hlnk_u  = "URL's";
+char *msg_hlnk_s  = "Saites";
+char *msg_hlnk_a  = "Programmas";
+char *msg_hlnk_c  = "Valstis";
+char *msg_hlnk_r  = "Referrers";
+char *msg_hlnk_en = "Ieraksti";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "Meklçt";
+char *msg_hlnk_i  = "Lietotâji";
+
+/* monthly total table */
+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_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";
+char *msg_mtot_uu = "Kopçjie Unikâlie URL";
+char *msg_mtot_ui = "Total Unique Usernames";
+char *msg_mtot_mhd= "Pieprasîjumi Dienâ";
+char *msg_mtot_mhh= "Pieprasîjumi Stundâs";
+char *msg_mtot_mfd= "Faili Dienâ";
+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_rc = "Hits by Response Code";
+
+/* daily total table */
+char *msg_dtot_ds = "Ikdienas statistika par";
+
+/* hourly total table */
+char *msg_htot_hs = "Stundu statistika par";
+
+/* country pie chart */
+char *msg_ctry_use= "Ârvalstu apmeklçtâju statistika par";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "par";
+char *msg_top_s   = "Visas Saites";
+char *msg_top_u   = "Visi URL";
+char *msg_top_r   = "Visi Reffereri";
+char *msg_top_a   = "Visas apmeklçtâju pârlûkprogrammas";
+char *msg_top_c   = "Visas valstis";
+char *msg_top_en  = "Total Entry Pages";
+char *msg_top_ex  = "Total Exit Pages";
+char *msg_top_sr  = "Total Search Strings";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "Apskatît visas saites";
+char *msg_v_urls  = "Apskatît visus URL";
+char *msg_v_refs  = "Apskatît visus Referrerus";
+char *msg_v_agents= "Apskatît visas pârlûkprogrammas";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Janvâris",  "Februâris", "Marts",   "Aprîlis",
+                    "Maijs",      "Jûnijs",     "Jûlijs",    "Augusts",
+                    "Septembris","Oktobris",  "Novembris","Decembris"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Usage Statistics for";
+char *msg_h_other = "Other";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.lithuanian b/lang/webalizer_lang.lithuanian
new file mode 100644 (file)
index 0000000..e3d5292
--- /dev/null
@@ -0,0 +1,628 @@
+/*
+   webalizer_lang.lithuanian
+
+   Webalizer V2.0x Language Support file for Lithuanian.
+   24-Sep-2004 by Justas Butkus (justasbutkus@takas.lt)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Lithuanian";
+char *langcode  = "lt";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "áraðai";
+char *msg_addresses="adresai";
+char *msg_ignored = "ignoruojami";
+char *msg_bad     = "blogi";
+char *msg_in      = "per";
+char *msg_seconds = "sekundes";
+
+/* progress and setup error messages */
+char *msg_log_err = "Klaida: Nepavyko atidaryti áraðø failo";
+char *msg_log_use = "Naudojamas áraðø failas";
+char *msg_dir_err = "Klaida: Nepavyko pereiti á katalogà";
+char *msg_dir_use = "Kuriama iðvestis";
+char *msg_cur_dir = "dabartinis katalogas";
+char *msg_hostname= "Áraðai apie tarnybinæ stotá pavadinimu";
+char *msg_ign_hist= "Ignoruojami ankstesni istorijos áraðai...";
+char *msg_no_hist = "Nerastas istorijos failas...";
+char *msg_get_hist= "Skaitomas istorijos failas...";
+char *msg_put_hist= "Iðsaugomi istorijos áraðai...";
+char *msg_hist_err= "Klaida: Nepavyko áraðyti istorijos failo";
+char *msg_bad_hist= "Klaida: Ignoruojamas klaidingas istorijos áraðas";
+char *msg_bad_conf= "Klaida: Nepavyko atverti nuostatø failo";
+char *msg_bad_key = "Perspëjimas: Neteisingas raktaþodis";
+char *msg_bad_date= "Klaida: Praleidþiamas áraðas (neteisinga data)";
+char *msg_ign_nscp= "Praleidþiami Netscape antraðèiø áraðai";
+char *msg_bad_rec = "Praleidþiami blogi áraðai";
+char *msg_no_vrec = "Taisyklingi áraðai nerasti!";
+char *msg_gen_rpt = "Kuriamas áraðas";
+char *msg_gen_sum = "Kuriamas áraðo sàvadas";
+char *msg_get_data= "Nuskaitomi ankstesnio veikimo laikotarpiu sukurti duomenys..";
+char *msg_put_data= "Iðsaugomi ðio veikimo laikotarpiu sukurti duomenys...";
+char *msg_no_data = "Ankstesnio veikimo duomenys nerasti...";
+char *msg_bad_data= "Klaida: Nepavyko atstatyti veikimo duomenø";
+char *msg_data_err= "Klaida: Nepavyko iðsaugoti ðio veikimo duomenø";
+char *msg_dup_data= "Perspëjimas: Spëjama, jog rasti pasikartojantys duomenys";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nenurodytas spartinanèiosios atmintinës failas, atðaukiama...";
+char *msg_dns_nodb= "Klaida: Nepavyko atverti DNS spartinanèiosios atmintinës failo";
+char *msg_dns_nolk= "Klaida: Nepavyko uþrakinti DNS spartinanèiosios atmintinës failo";
+char *msg_dns_usec= "Naudojamas DNS spartinanèiosios atmintinës failas";
+char *msg_dns_rslv= "DNS paieðka";
+char *msg_dns_none= "Nëra kà vykdyti";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nepavyksta paskirti pakankamai atminties, Populiariausi Puslapiai uþdrausti!";
+char *msg_nomem_tr= "Nepavyksta paskirti pakankamai atminties, Daþniausi Nukreipëjai uþdrausti!";
+char *msg_nomem_tu= "Nepavyksta paskirti pakankamai atminties, Daþniausi URL uþdrausti!";
+char *msg_nomem_tc= "Nepavyksta paskirti pakankamai atminties, Daþniausios Valstybës uþdraustos!";
+char *msg_nomem_ta= "Nepavyksta paskirti pakankamai atminties, Daþniausios Klientø Programos uþdraustos!";
+char *msg_nomem_tsr="Nepavyksta paskirti pakankamai atminties, Daþniausios Paieðkos uþdraustos!";
+char *msg_nomem_ti= "Nepavyksta paskirti pakankamai atminties, Daþniausi Vartotojø Vardai uþdrausti!";
+char *msg_nomem_dh= "Klaida pridedant kompiuterio vardo jungtá (kasdiená), praleidþiama";
+char *msg_nomem_mh= "Klaida pridedant kompiuterio vardo jungtá (kas mënesiná), praleidþiama";
+char *msg_nomem_u = "Klaida pridedant URL jungtá, praleidþiama";
+char *msg_nomem_a = "Klaida pridedant Kliento Programos jungtá, praleidþiama";
+char *msg_nomem_r = "Klaida pridedant Nukreipëjo jungtá, praleidþiama";
+char *msg_nomem_sc= "Klaida pridedant Paieðkos jungtá, praleidþiama";
+char *msg_nomem_i = "Klaida pridedant Vartotojo Vardo jungtá, praleidþiama";
+
+/* log record errors */
+char *msg_big_rec = "Klaida: Praleidþiamas virðijæs dydþio limità áraðas";
+char *msg_big_host= "Perspëjimas: Trumpinamas  per ilgas kompiuterio vardas";
+char *msg_big_date= "Perspëjimas: Trumpinamas per ilgas datos laukas";
+char *msg_big_req = "Perspëjimas: Trumpinamas per ilgas uþklausos laukas";
+char *msg_big_ref = "Perspëjimas: Trumpinamas per ilgas nukreipëjo laukas";
+char *msg_big_user= "Perspëjimas: Trumpinamas per ilgas vartotojo vardas";
+char *msg_big_one = "Perspëjimas: Áraðo reikðmë yra didesnë nei ámanoma vieta";
+
+/* misc errors */
+char *msg_no_open = "Klaida: Nepavyko atidaryti failo";
+
+/* Help display... */
+char *h_usage1 = "Naudojimas";
+char *h_usage2 = "[pasirinktys] [áraðo failas]";
+char *h_msg[]= {
+         "-h        = atvaizduoti ðià pagalbos þinutæ"                ,
+         "-V        = atvaizduoti versijos informacijà"               ,
+         "-v        = be verbose"                                     ,
+         "-d        = atvaizduoti papildomà derinimo informacijà"     ,
+         "-F type   = Áraðo tipas.  tipas= (clf | ftp | squid | w3c)" ,
+         "-f        = Eilës nuoseklumo klaida"                        ,
+         "-i        = ignoruoti istorijos failà"                      ,
+         "-p        = iðlaikyti bûsenà (didëjanèià)"                  ,
+         "-b        = ignore state (incremental)"                     ,
+         "-q        = atidëti informacines þinutes"                   ,
+         "-Q        = atidëti _VISAS_ þinutes"                        ,
+         "-Y        = atidëti ðaliø grafikà"                          ,
+         "-G        = atidëti valandiná grafikà"                      ,
+         "-H        = atidëti valandinæ statistikà"                   ,
+         "-L        = atidëti spalvomis koduotà grafikø legendà"      ,
+         "-l num    = rodyti numeruotas fono linijas grafikuose"      ,
+         "-m num    = Apsilankymo laiko limito reikðmë (sekundëmis)"  ,
+         "-T        = iðvesti laiko matavimo informacijà"             ,
+         "-c file   = naudoti pasirinkèiø failà 'failas'"             ,
+         "-n pavadinimas   = vartotinas kompiuterio vardas"           ,
+         "-o dir           = iðvesties katalogas"                     ,
+         "-t pavadinimas   = ataskaitos pavadinimas 'pavadinimas'"    ,
+         "-a pavadinimas   = slëpti kliento programà 'pavadinimas'"   ,
+         "-r pavadinimas   = slëpti nukreipëjà 'pavadinimas'"         ,
+         "-s pavadinimas   = slëpti puslapá 'pavadinimas'"            ,
+         "-u pavadinimas   = slëpti URL 'pavadinimas'"                ,
+         "-x pavadinimas   = Naudoti rinkmenos plëtiná 'pavadinimas'" ,
+         "-O pavadinimas   = Omit page 'pavadinimas'"                 ,
+         "-P pavadinimas   = Puslapio tipo plëtinys 'pavadinimas'"    ,
+         "-I pavadinimas   = Indekso pavadinimas 'pavadinimas'"       ,
+         "-K num    = num months in summary table"                    ,
+         "-k num    = num months in summary graph"                    ,
+         "-A num    = Rodyti daþniausiø programø (kiekis)"            ,
+         "-C num    = Rodyti daþniausiø ðaliø (kiekis)"               ,
+         "-R num    = Rodyti daþniausiø nukreipëjø (kiekis)"          ,
+         "-S num    = Rodyti daþniausiø puslapiø (kiekis)"            ,
+         "-U num    = Rodyti daþniausiø URL (kiekis)"                 ,
+         "-e num    = Rodyti daþniausiø Áëjimo Puslapiø (kiekis)"     ,
+         "-E num    = Rodyti daþniausiø Iðëjimo puslapiø (kiekis)"    ,
+         "-g num    = Grupuoti adresø sritis á 'kieká' lygiø"         ,
+         "-X        = Slëpti asmeninius puslapius"                    ,
+         "-z dir    = Use country flags in 'dir'"                     ,
+#ifdef USE_DNS
+         "-D pavadinimas   = Naudoti DNS Spartinanèiosios atmintinës failà 'pavadinimas'"           ,
+         "-N num           = DNS procesø kiekis (0=iðjungta)"         ,
+         "-j               = Enable native GeoDB lookups"             ,
+         "-J pavadinimas   = Use GeoDB database 'pavadinimas'"        ,
+#endif
+#ifdef USE_GEOIP
+         "-w               = Enable GeoIP lookups"                    ,
+         "-W pavadinimas   = Use GeoIP database 'pavadinimas'"        ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Sàvado periodas";
+char *msg_hhdr_gt = "Sugeneruota";
+
+/* main index strings */
+char *msg_main_us = "Naudojimo sàvadas";
+/* char *msg_main_per= "Paskutinius 12 mënesiø"; */
+char *msg_main_per= "Sàvadas pagal mënesius";
+char *msg_main_sum= "Sàvadas pagal mënesius";
+char *msg_main_da = "Dieninis vidurkis";
+char *msg_main_mt = "Mënesio suminis";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Dieninis naudojimas";
+char *msg_hmth_hu = "Valandinis naudojimas";
+
+/* table header strings */
+char *msg_h_by    = "Pagal";
+char *msg_h_avg   = "Vidurkis";
+char *msg_h_max   = "Didþiausias";
+char *msg_h_total = "Bendras";
+char *msg_h_totals= "Suminiai";
+char *msg_h_day   = "DIena";
+char *msg_h_mth   = "Mënesis";
+char *msg_h_hour  = "Valanda";
+char *msg_h_hits  = "Jungèiø";
+char *msg_h_pages = "Puslapiø";
+char *msg_h_visits= "Apsilankymø";
+char *msg_h_files = "Rinkmenø";
+char *msg_h_sites = "Tinklalapiø";
+char *msg_h_xfer  = "KBaitø";
+char *msg_h_hname = "Kompiuterio vardas";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Kliento programa";
+char *msg_h_ref   = "Nukreipëjas";
+char *msg_h_ctry  = "Ðalis";
+char *msg_h_search= "Paieðka";
+char *msg_h_uname = "Vartotojo vardas";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Dieninë statistika";
+char *msg_hlnk_hs = "Valandinë statistika";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Puslapiai";
+char *msg_hlnk_a  = "Klientø programos";
+char *msg_hlnk_c  = "Ðalys";
+char *msg_hlnk_r  = "Nukreipëjai";
+char *msg_hlnk_en = "Áëjimai";
+char *msg_hlnk_ex = "Iðëjimai";
+char *msg_hlnk_sr = "Paieðka";
+char *msg_hlnk_i  = "Vartotojø vardai";
+
+/* monthly total table */
+char *msg_mtot_ms = "Mënesinë statistika";
+char *msg_mtot_th = "Viso jungèiø";
+char *msg_mtot_tf = "Viso rinkmenø";
+char *msg_mtot_tx = "Viso KBaitø";
+char *msg_mtot_us = "Viso unikaliø puslapiø";
+char *msg_mtot_ur = "Viso unikaliø nukreipëjø";
+char *msg_mtot_ua = "Viso unikaliø klientø programø";
+char *msg_mtot_uu = "Viso unikaliø URL";
+char *msg_mtot_ui = "Viso unikaliø vartotojø vardø";
+char *msg_mtot_mhd= "Jungèiø per dienà";
+char *msg_mtot_mhh= "Jungèiø per valandà";
+char *msg_mtot_mfd= "Failø per dienà";
+char *msg_mtot_mpd= "Puslapiø per dienà";
+char *msg_mtot_msd= "Puslapiø (sites) per dienà";
+char *msg_mtot_mvd= "Apsilankymø per dienà";
+char *msg_mtot_mkd= "KBaitø per dienà";
+char *msg_mtot_rc = "Jungèiø pagal atsako kodà";
+
+/* daily total table */
+char *msg_dtot_ds = "Dieninë statistika";
+
+/* hourly total table */
+char *msg_htot_hs = "Valandinë statistika";
+
+/* country pie chart */
+char *msg_ctry_use= "Vartojimas pagal ðalá";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Daþniausiai";
+char *msg_top_of  = "ið";
+char *msg_top_s   = "Viso puslapiø";
+char *msg_top_u   = "Viso URL";
+char *msg_top_r   = "Viso Nukreipëjø";
+char *msg_top_a   = "Viso Vartotojø programø";
+char *msg_top_c   = "Viso Ðaliø";
+char *msg_top_en  = "Viso Áëjimo puslapiø";
+char *msg_top_ex  = "Viso Iðëjimo puslapiø";
+char *msg_top_sr  = "Viso Paieðkø";
+char *msg_top_i   = "Viso Vartotojø vardø";
+char *msg_v_sites = "Perþiûrëti visus Puslapius";
+char *msg_v_urls  = "Perþiûrëti visus URL";
+char *msg_v_refs  = "Perþiûrëti visus Nukreipëjus";
+char *msg_v_agents= "Perþiûrëti visus Vartotojø programas";
+char *msg_v_search= "Perþiûrëti visus Paieðkas";
+char *msg_v_users = "Perþiûrëti visus Vartotojø vardus";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Sau", "Vas", "Kov",
+                    "Bal", "Geg", "Bir",
+                    "Lie", "Rgp", "Rgs",
+                    "Spa", "Lap", "Gru"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Sausis",  "Vasaris", "Kovas",   "Balandis",
+                    "Geguþë",      "Birþelis",     "Liepa",    "Rugpjûtis",
+                    "Rugsëjis","Spalis",  "Lapkritis","Gruodis"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Neapibrëþtas atsako kodas",                    0 },
+         { "Kodas 100 - Tæsiama",                        0 },
+         { "Kodas 101 - Keièiami protokolai",             0 },
+         { "Kodas 200 - Gerai",                              0 },
+         { "Kodas 201 - Sukurta",                         0 },
+         { "Kodas 202 - Priimta",                        0 },
+         { "Kodas 203 - Ne autorizuojamoji informacija",   0 },
+         { "Kodas 204 - Nëra turinio",                      0 },
+         { "Kodas 205 - Perkrauti turiná",                   0 },
+         { "Kodas 206 - Dalinis turinys",                 0 },
+         { "Kodas 300 - Keli pasirinkimai",                0 },
+         { "Kodas 301 - Perkelta ilgam",               0 },
+         { "Kodas 302 - Rasta",                           0 },
+         { "Kodas 303 - Mato kiti",                       0 },
+         { "Kodas 304 - Nepakeista",                    0 },
+         { "Kodas 305 - Naudojamas proxy",                       0 },
+         { "Kodas 307 - Perkelta laikinai",               0 },
+         { "Kodas 400 - Bloga uþklausa",                     0 },
+         { "Kodas 401 - Neautorizuota",                    0 },
+         { "Kodas 402 - Reikalingas apmokëjimas",                0 },
+         { "Kodas 403 - Uþdrausta",                       0 },
+         { "Kodas 404 - Nerasta",                       0 },
+         { "Kodas 405 - Metodas neleistas",              0 },
+         { "Kodas 406 - Nepriimtina",                  0 },
+         { "Kodas 407 - Bûtina proxy autentifikacija",   0 },
+         { "Kodas 408 - Baigësi uþklausai skirtas laikas",                 0 },
+         { "Kodas 409 - Konfliktas",                        0 },
+         { "Kodas 410 - Perkeltas",                            0 },
+         { "Kodas 411 - Ilgis bûtinas",                 0 },
+         { "Kodas 412 - Prieð-parengtis nepavyko",             0 },
+         { "Kodas 413 - Per ilga uþklausa",        0 },
+         { "Kodas 414 - Uþklausos-URI per ilgas",            0 },
+         { "Kodas 415 - Nepalaikomas terpës tipas",          0 },
+         { "Kodas 416 - Uþklausos ribos nepatenkinamos", 0 },
+         { "Kodas 417 - Laukimas nepavyko",              0 },
+         { "Kodas 500 - Vidinë serverio klaida",           0 },
+         { "Kodas 501 - Neádiegta",                 0 },
+         { "Kodas 502 - Neteisingas ðliuzas",                     0 },
+         { "Kodas 503 - Paslauga neprieinama",             0 },
+         { "Kodas 504 - Ðliuzas neatsakë per paskirtà laiko intervalà",                 0 },
+         { "Kodas 505 - HTTP versija nepalaikoma",      0 } };
+
+char *msg_title   = "Naudojimo statistika";
+char *msg_h_other = "Kitkas";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Neapspræsta/Neþinoma",             0,0,0 },
+{ IDX_3C('c','o','m'),    "Komercinë (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Mokomoji (edu)",                   0,0,0 },
+{ IDX_3C('g','o','v'),    "US Valstybinë (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "Tarptautinë (int)",                0,0,0 },
+{ IDX_3C('m','i','l'),    "US Karinë",                        0,0,0 },
+{ IDX_3C('n','e','t'),    "Tinklo (net)",                     0,0,0 },
+{ IDX_3C('o','r','g'),    "Ne pelno siekianèiø organizacijø", 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Seno stiliaus Arpaneto (arpa)",    0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato lauko (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andora",                           0,0,0 },
+{ IDX_2C('a','e'),        "Jungitniai arabø emiratai",        0,0,0 },
+{ IDX_2C('a','f'),        "Afganistanas",                     0,0,0 },
+{ IDX_2C('a','g'),        "Antigva ir Barbadua",              0,0,0 },
+{ IDX_2C('a','i'),        "Angila",                           0,0,0 },
+{ IDX_2C('a','l'),        "Albanija",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armënija",                         0,0,0 },
+{ IDX_2C('a','n'),        "Nyderlandø Antilø salos",          0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktika",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Amerikos Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austrija",                         0,0,0 },
+{ IDX_2C('a','u'),        "Australija",                       0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaidþanas",                    0,0,0 },
+{ IDX_2C('b','a'),        "Bosnija ir Hercogovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbadosas",                       0,0,0 },
+{ IDX_2C('b','d'),        "Bangladeðas",                      0,0,0 },
+{ IDX_2C('b','e'),        "Beglija",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Fasas",                    0,0,0 },
+{ IDX_2C('b','g'),        "Bulgarija",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahreinas",                        0,0,0 },
+{ IDX_2C('b','i'),        "Burundis",                         0,0,0 },
+{ IDX_2C('b','j'),        "Beninai",                          0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermudai",                         0,0,0 },
+{ IDX_2C('b','n'),        "Brunëjus Daruslamas",              0,0,0 },
+{ IDX_2C('b','o'),        "Bolivija",                         0,0,0 },
+{ IDX_2C('b','r'),        "Brazilija",                        0,0,0 },
+{ IDX_2C('b','s'),        "Bahamai",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutanas",                         0,0,0 },
+{ IDX_2C('b','v'),        "Buveto salos",                     0,0,0 },
+{ IDX_2C('b','w'),        "Botsvana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Gudija",                           0,0,0 },
+{ IDX_2C('b','z'),        "Belizija",                         0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Kokoso (Kylingo) salos",           0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Centrinës Afrikos respublika",     0,0,0 },
+{ IDX_2C('c','g'),        "Kongas",                           0,0,0 },
+{ IDX_2C('c','h'),        "Ðveicarija",                       0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Dramblio kaulo kranto)", 0,0,0 },
+{ IDX_2C('c','k'),        "Kuko salos",                       0,0,0 },
+{ IDX_2C('c','l'),        "Èilë",                             0,0,0 },
+{ IDX_2C('c','m'),        "Kemrûnas",                         0,0,0 },
+{ IDX_2C('c','n'),        "Kinija",                           0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbija",                        0,0,0 },
+{ IDX_2C('c','r'),        "Kosta Rika",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Þaliasis Kyðulys (Cape Verde)",    0,0,0 },
+{ IDX_2C('c','x'),        "Kalëdø salos",                     0,0,0 },
+{ IDX_2C('c','y'),        "Kipras",                           0,0,0 },
+{ IDX_2C('c','z'),        "Èekijos respublika",               0,0,0 },
+{ IDX_2C('d','e'),        "Vokietija",                        0,0,0 },
+{ IDX_2C('d','j'),        "Dþibutis",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danija",                           0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikos respublika",             0,0,0 },
+{ IDX_2C('d','z'),        "Alþyras",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ekvadoras",                        0,0,0 },
+{ IDX_2C('e','e'),        "Estija",                           0,0,0 },
+{ IDX_2C('e','g'),        "Egiptas",                          0,0,0 },
+{ IDX_2C('e','h'),        "Vakarø sahara",                    0,0,0 },
+{ IDX_2C('e','r'),        "Eritrëja",                         0,0,0 },
+{ IDX_2C('e','s'),        "Ispanija",                         0,0,0 },
+{ IDX_2C('e','t'),        "Etiopija",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Suomija",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fijis",                            0,0,0 },
+{ IDX_2C('f','k'),        "Falklando salos (Malvinas)",       0,0,0 },
+{ IDX_2C('f','m'),        "Mikronezija",                      0,0,0 },
+{ IDX_2C('f','o'),        "Farerø salos",                     0,0,0 },
+{ IDX_2C('f','r'),        "Prancûzija",                       0,0,0 },
+{ IDX_2C('g','a'),        "Gabonas",                          0,0,0 },
+{ IDX_2C('g','b'),        "Didþioji Britanija (JK)",          0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Gruzija",                          0,0,0 },
+{ IDX_2C('g','f'),        "Prancûzijos Gviana",               0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltaras",                      0,0,0 },
+{ IDX_2C('g','l'),        "Grenlandija",                      0,0,0 },
+{ IDX_2C('g','m'),        "Gambija",                          0,0,0 },
+{ IDX_2C('g','n'),        "Gvinëja",                          0,0,0 },
+{ IDX_2C('g','p'),        "Gvadelupë",                        0,0,0 },
+{ IDX_2C('g','q'),        "Ekvatorinë Gvinëja",               0,0,0 },
+{ IDX_2C('g','r'),        "Graikija",                         0,0,0 },
+{ IDX_2C('g','s'),        "Ðv. Dþordþijos ir Ðv. Sandvièiø salos.", 0,0,0 },
+{ IDX_2C('g','t'),        "Gvatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guama",                            0,0,0 },
+{ IDX_2C('g','w'),        "Gvinëja-Bisau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Gujana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Honkongas",                        0,0,0 },
+{ IDX_2C('h','m'),        "Herdo ir McDonaldo salos",         0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroatija",                         0,0,0 },
+{ IDX_2C('h','t'),        "Haitis",                           0,0,0 },
+{ IDX_2C('h','u'),        "Vengrija",                         0,0,0 },
+{ IDX_2C('i','d'),        "Indonezija",                       0,0,0 },
+{ IDX_2C('i','e'),        "Airija",                           0,0,0 },
+{ IDX_2C('i','l'),        "Izraelis",                         0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indija",                           0,0,0 },
+{ IDX_2C('i','o'),        "Britø Indijos vandenyno teritorija", 0,0,0 },
+{ IDX_2C('i','q'),        "Irakas",                           0,0,0 },
+{ IDX_2C('i','r'),        "Iranas",                           0,0,0 },
+{ IDX_2C('i','s'),        "Islandija",                        0,0,0 },
+{ IDX_2C('i','t'),        "Italija",                          0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaika",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordanija",                        0,0,0 },
+{ IDX_2C('j','p'),        "Japonija",                         0,0,0 },
+{ IDX_2C('k','e'),        "Kenija",                           0,0,0 },
+{ IDX_2C('k','g'),        "Kirgiztanas",                      0,0,0 },
+{ IDX_2C('k','h'),        "Kambodþa",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribatis",                        0,0,0 },
+{ IDX_2C('k','m'),        "Komorai",                          0,0,0 },
+{ IDX_2C('k','n'),        "Ðventas Kitsas ir Nevis",          0,0,0 },
+{ IDX_2C('k','p'),        "Korëja (Ðiaurës)",                 0,0,0 },
+{ IDX_2C('k','r'),        "Korëja (Pietø)",                   0,0,0 },
+{ IDX_2C('k','w'),        "Kuveitas",                         0,0,0 },
+{ IDX_2C('k','y'),        "Kaimanø salos",                    0,0,0 },
+{ IDX_2C('k','z'),        "Kazakstanas",                      0,0,0 },
+{ IDX_2C('l','a'),        "Laosas",                           0,0,0 },
+{ IDX_2C('l','b'),        "Lebanonas",                        0,0,0 },
+{ IDX_2C('l','c'),        "Ðventa Liucija",                   0,0,0 },
+{ IDX_2C('l','i'),        "Lichtenðteinas",                   0,0,0 },
+{ IDX_2C('l','k'),        "Ðri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberija",                         0,0,0 },
+{ IDX_2C('l','s'),        "Lesotas",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lietuva",                          0,0,0 },
+{ IDX_2C('l','u'),        "Liuksemburgas",                    0,0,0 },
+{ IDX_2C('l','v'),        "Latvija",                          0,0,0 },
+{ IDX_2C('l','y'),        "Libija",                           0,0,0 },
+{ IDX_2C('m','a'),        "Marokas",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monakas",                          0,0,0 },
+{ IDX_2C('m','d'),        "Moldavija",                        0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskaras",                     0,0,0 },
+{ IDX_2C('m','h'),        "Marðalo salos",                    0,0,0 },
+{ IDX_2C('m','k'),        "Makedojina",                       0,0,0 },
+{ IDX_2C('m','l'),        "Malis",                            0,0,0 },
+{ IDX_2C('m','m'),        "Mianmaras",                        0,0,0 },
+{ IDX_2C('m','n'),        "Mongolija",                        0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Ðiaurinës Marianos salos",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinika",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritanija",                      0,0,0 },
+{ IDX_2C('m','s'),        "Montseratis",                      0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritis",                         0,0,0 },
+{ IDX_2C('m','v'),        "Maldivai",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malavis",                          0,0,0 },
+{ IDX_2C('m','x'),        "Meksika",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malaizija",                        0,0,0 },
+{ IDX_2C('m','z'),        "Mozambikas",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibija",                         0,0,0 },
+{ IDX_2C('n','c'),        "Naujoji Kaledonija",               0,0,0 },
+{ IDX_2C('n','e'),        "Nigerija",                         0,0,0 },
+{ IDX_2C('n','f'),        "Norfolko salos",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigerija",                         0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragva",                        0,0,0 },
+{ IDX_2C('n','l'),        "Nyderlandai",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norvegija",                        0,0,0 },
+{ IDX_2C('n','p'),        "Napalas",                          0,0,0 },
+{ IDX_2C('n','r'),        "Naurutis",                         0,0,0 },
+{ IDX_2C('n','u'),        "Nevis",                            0,0,0 },
+{ IDX_2C('n','z'),        "Naujoji Zelandija",                0,0,0 },
+{ IDX_2C('o','m'),        "Omanas",                           0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Prancûzø Polinezija",              0,0,0 },
+{ IDX_2C('p','g'),        "Papua ir Naujoji Gvinëja",         0,0,0 },
+{ IDX_2C('p','h'),        "Filipinai",                        0,0,0 },
+{ IDX_2C('p','k'),        "Pakistanas",                       0,0,0 },
+{ IDX_2C('p','l'),        "Lenkija",                          0,0,0 },
+{ IDX_2C('p','m'),        "Ðv. Pieras ir Mikelonas",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitkaimas",                        0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rikas",                     0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugalija",                      0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Parugvajus",                       0,0,0 },
+{ IDX_2C('q','a'),        "Kataras",                          0,0,0 },
+{ IDX_2C('r','e'),        "Susijungimas",                     0,0,0 },
+{ IDX_2C('r','o'),        "Rumunija",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rusijos federacija",               0,0,0 },
+{ IDX_2C('r','w'),        "Randa",                            0,0,0 },
+{ IDX_2C('s','a'),        "Saudo Arabija",                    0,0,0 },
+{ IDX_2C('s','b'),        "Solomono salos",                   0,0,0 },
+{ IDX_2C('s','c'),        "Seiðelai",                         0,0,0 },
+{ IDX_2C('s','d'),        "Sudanas",                          0,0,0 },
+{ IDX_2C('s','e'),        "Ðvedija",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapûras",                       0,0,0 },
+{ IDX_2C('s','h'),        "Ðv. Elena",                        0,0,0 },
+{ IDX_2C('s','i'),        "Slovënija",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbardo ir Þano Majeno salos",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakijos respublika",            0,0,0 },
+{ IDX_2C('s','l'),        "Siera Leonë",                      0,0,0 },
+{ IDX_2C('s','m'),        "San Marinas",                      0,0,0 },
+{ IDX_2C('s','n'),        "Senegalas",                        0,0,0 },
+{ IDX_2C('s','o'),        "Somalis",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinamis",                        0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tomë ir Principë",             0,0,0 },
+{ IDX_2C('s','u'),        "TSRS (buvusi)",                    0,0,0 },
+{ IDX_2C('s','v'),        "El Salvadoras",                    0,0,0 },
+{ IDX_2C('s','y'),        "Sirija",                           0,0,0 },
+{ IDX_2C('s','z'),        "Svazilandas",                      0,0,0 },
+{ IDX_2C('t','c'),        "Turkijos ir Kaikijos salos",       0,0,0 },
+{ IDX_2C('t','d'),        "Èadas",                            0,0,0 },
+{ IDX_2C('t','f'),        "Prancûzijos pietinës teritorijos", 0,0,0 },
+{ IDX_2C('t','g'),        "Togas",                            0,0,0 },
+{ IDX_2C('t','h'),        "Tailandas",                        0,0,0 },
+{ IDX_2C('t','j'),        "Tadþikistanas",                    0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmënistanas",                   0,0,0 },
+{ IDX_2C('t','n'),        "Tunisas",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Rytø Timoras",                     0,0,0 },
+{ IDX_2C('t','r'),        "Turkija",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidadas ir Tobagas",            0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taivanas",                         0,0,0 },
+{ IDX_2C('t','z'),        "Tanzanija",                        0,0,0 },
+{ IDX_2C('u','a'),        "Ukraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Jungtinë Karalystë",               0,0,0 },
+{ IDX_2C('u','m'),        "US maþosios sàlos",                0,0,0 },
+{ IDX_2C('u','s'),        "Jungtinës Valstijos",              0,0,0 },
+{ IDX_2C('u','y'),        "Urugvajus",                        0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistanas",                     0,0,0 },
+{ IDX_2C('v','a'),        "Vatikano miestas-valstybë (Ðventasis Sostas)",0,0,0 },
+{ IDX_2C('v','c'),        "Ðventas Vincentas ir Grenadinai",  0,0,0 },
+{ IDX_2C('v','e'),        "Venesuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Mergelës salos (Britø)",           0,0,0 },
+{ IDX_2C('v','i'),        "Mergelës salos (JAV)",             0,0,0 },
+{ IDX_2C('v','n'),        "Vietnamas",                        0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Valio ir Futunos salos",           0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemenis",                          0,0,0 },
+{ IDX_2C('y','t'),        "Majotis",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslavija",                      0,0,0 },
+{ IDX_2C('z','a'),        "Pietø Afrika",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambija",                          0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabvë",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.malay b/lang/webalizer_lang.malay
new file mode 100644 (file)
index 0000000..3fb9013
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+   webalizer_lang.malay
+
+   Webalizer V2.0x Language Support file for Malay
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   30-Oct-2000 Malay translation by Nazri Hussain (nazrih@mimos.my)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Malay";
+char *langcode  = "ms";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "rekod";
+char *msg_addresses="alamat";
+char *msg_ignored = "diabaikan";
+char *msg_bad     = "rosak";
+char *msg_in      = "dalam";
+char *msg_seconds = "saat";
+
+/* progress and setup error messages */
+char *msg_log_err = "Ralat: Saya rasa log fail anda tiada";
+char *msg_log_use = "Menggunakan fail log";
+char *msg_dir_err = "Ralat: Saya tidak dapat menukar ke direktori";
+char *msg_dir_use = "Menjana hasil di dalam";
+char *msg_cur_dir = "direktori terkini";
+char *msg_hostname= "Nama Host untuk laporan ini ialah";
+char *msg_ign_hist= "Mengabaikan fail terdahulu...";
+char *msg_no_hist = "Fail terdahulu tiada...";
+char *msg_get_hist= "Baca fail terdahulu...";
+char *msg_put_hist= "Simpan maklumat terdahulu...";
+char *msg_hist_err= "Ralat: Saya tidak dapat menyimpan fail terdahulu";
+char *msg_bad_hist= "Ralat: Saya mengabaikan rekod terdahulu yang rosak";
+char *msg_bad_conf= "Ralat: Saya tidak dapat membuka fail konfigurasi";
+char *msg_bad_key = "Amaran: katakunci tidak sah";
+char *msg_bad_date= "Ralat: Satu rekod diabaikan (tarikh salah)";
+char *msg_ign_nscp= "Satu kepala rekod Netscape diabaikan";
+char *msg_bad_rec = "Satu rekod salah diabaikan";
+char *msg_no_vrec = "Tiada rekod sah dijumpai!";
+char *msg_gen_rpt = "Menjana laporan untuk";
+char *msg_gen_sum = "Menjana ringkasan laporan";
+char *msg_get_data= "Membaca data larian terdahulu..";
+char *msg_put_data= "Menimpan data larian terkini...";
+char *msg_no_data = "Data larian terdahulu tidak dijumpai...";
+char *msg_bad_data= "Ralat: Saya tidak dapat mengambil-semula data larian";
+char *msg_data_err= "Ralat: Saya tidak dapat menyimpan data larian";
+char *msg_dup_data= "Amaran: Kemungkinan data yang sama dijumpai";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Fail cache tidak dinyatakan, proses dibatalkan...";
+char *msg_dns_nodb= "Ralat: Saya tidak dapat membuka fail cache DNS";
+char *msg_dns_nolk= "Ralat: Saya tidak dapat mengunci fail cache DNS";
+char *msg_dns_usec= "Fail cache DNS sedang digunakan";
+char *msg_dns_rslv= "Carian DNS";
+char *msg_dns_none= "Tiada apa untuk diproses";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Tidak dapat memperuntukkan ingatan, Halaman Terbaik diabaikan!";
+char *msg_nomem_tr= "Tidak dapat memperuntukkan ingatan, Perujuk Terbaik diabaikan!";
+char *msg_nomem_tu= "Tidak dapat memperuntukkan ingatan, URL Terbaik diabaikan!";
+char *msg_nomem_tc= "Tidak dapat memperuntukkan ingatan, Negara Terbaik diabaikan!";
+char *msg_nomem_ta= "Tidak dapat memperuntukkan ingatan, Agen Pengguna Terbaik diabaikan!";
+char *msg_nomem_tsr="Tidak dapat memperuntukkan ingatan, Katakunci Carian Terbaik diabaikan!";
+char *msg_nomem_ti= "Tidak dapat memperuntukkan ingatan, Katanama Pengguna Terbaik diabaikan!";
+char *msg_nomem_dh= "Ralat untuk menambah nod hos (harian), proses diabaikan";
+char *msg_nomem_mh= "Ralat untuk menambah nod hos (bulanan), proses diabaikan";
+char *msg_nomem_u = "Ralat untuk menambah nod URL, proses diabaikan";
+char *msg_nomem_a = "Ralat untuk menambah nod Agen Pengguna, proses diabaikan";
+char *msg_nomem_r = "Ralat untuk menambah nod Perujuk, proses diabaikan";
+char *msg_nomem_sc= "Ralat untuk menambah nod Katakunci Carian, proses diabaikan";
+char *msg_nomem_i = "Ralat untuk menambah nod Katanama Pengguna, proses diabaikan";
+
+/* log record errors */
+char *msg_big_rec = "Ralat: Rekod log anda terlalu besar, proses diabaikan";
+char *msg_big_host= "Amaran: Nama hos yang terlalu panjang telah dipotong";
+char *msg_big_date= "Amaran: Ruangan tarikh yang terlalu panjang telah dipotong";
+char *msg_big_req = "Amaran: Ruangan pertanyaan yang terlalu panjang telah dipotong";
+char *msg_big_ref = "Amaran: Ruangan perujuk yang terlalu panjang telah dipotong";
+char *msg_big_user= "Amaran: Katanama yang terlalu panjang telah dipotong";
+char *msg_big_one = "Amaran: Perkataan melebihi saiz simpanan";
+
+/* misc errors */
+char *msg_no_open = "Ralat: Tidak dapat membuka fail";
+
+/* Help display... */
+char *h_usage1 = "Penggunaan";
+char *h_usage2 = "[pilihan] [fail log]";
+char *h_msg[]= {
+         "-h        = cetak mesej pertolongan ini"             ,
+         "-V        = cetak maklumat versi"           ,
+         "-v        = be verbose"                          ,
+         "-d        = cetak maklumat tambahan berkenaan dengan debug"         ,
+         "-F type   = jenis Log.  jenis= (clf | ftp | squid | w3c)",
+         "-f        = Alas turutan ralat"                ,
+         "-i        = abaikan fail terdahulu"                 ,
+         "-p        = kekalkan keadaan (secara menaik)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = abaikan maklumat mesej"      ,
+         "-Q        = abaikan _SEMUA_ mesej"              ,
+         "-Y        = abaikan graf negara"               ,
+         "-G        = abaikan graf ikut jam"                ,
+         "-H        = abaikan statistik ikut jam"                ,
+         "-L        = abaikan graf yang berdasarkan petunjuk warna"   ,
+         "-l num    = gunakan sejumlah garisan latarbelakang pada graf"   ,
+         "-m num    = Nilai masa tamat untuk Lawatan (dalam saat)"        ,
+         "-T        = cetak maklumat berkenaan masa jangkaan"            ,
+         "-c file   = gunakan fail konfigurasi ini"       ,
+         "-n name   = gunakan nama hos ini"                     ,
+         "-o dir    = gunakan direktori ini untuk hasil janaan"             ,
+         "-t name   = nama laporan"                 ,
+         "-a name   = sorokkan nama agen pengguna"              ,
+         "-r name   = sorokkan nama perujuk"                ,
+         "-s name   = sorokkan nama halaman"                    ,
+         "-u name   = sorokkan nama URL"                     ,
+         "-x name   = gunakan pengakhir ini bagi nama fail"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Jenis pengakhir bagi nama fail ini"          ,
+         "-I name   = Nama lain bagi fail Index"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Paparkan bilangan agen terbaik"              ,
+         "-C num    = Paparkan bilangan negara terbaik"           ,
+         "-R num    = Paparkan bilangan perujuk terbaik"           ,
+         "-S num    = Paparkan bilangan halaman terbaik"               ,
+         "-U num    = Paparkan bilangan URL terbaik"                ,
+         "-e num    = Paparkan bilangan Halaman Utama yang terbaik"         ,
+         "-E num    = Paparkan bilangan Hamalan Keluar yang terbaik"          ,
+         "-g num    = Kumpulkan tahap Domain kepada"       ,
+         "-X        = Sorokkan halaman individu ini"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Gunakan fail cache DNS ini"          ,
+         "-N num    = Nombor proses bagi DNS (0=abaikan)"  ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Jangkamasa Ringkasan";
+char *msg_hhdr_gt = "Dijanakan";
+
+/* main index strings */
+char *msg_main_us = "Ringkasan Penggunaan untuk";
+/* char *msg_main_per= "12 bulan yang lepas"; */
+char *msg_main_per= "Ringkasan Bulanan";
+char *msg_main_sum= "Ringkasan Bulanan";
+char *msg_main_da = "Purata harian";
+char *msg_main_mt = "Jumlah Bulanan";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Pengunaan Harian bagi";
+char *msg_hmth_hu = "Pengunaan ikut Jam bagi";
+
+/* table header strings */
+char *msg_h_by    = "Ikut";
+char *msg_h_avg   = "Purata";
+char *msg_h_max   = "Maksima";
+char *msg_h_total = "Jumlah";
+char *msg_h_totals= "Jumlah";
+char *msg_h_day   = "Hari";
+char *msg_h_mth   = "Bulan";
+char *msg_h_hour  = "Jam";
+char *msg_h_hits  = "Capaian";
+char *msg_h_pages = "Muka";
+char *msg_h_visits= "Lawatan";
+char *msg_h_files = "Fail";
+char *msg_h_sites = "Halaman";
+char *msg_h_xfer  = "KBait";
+char *msg_h_hname = "Nama Hos";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Agen Pengguna";
+char *msg_h_ref   = "Perujuk";
+char *msg_h_ctry  = "Negara";
+char *msg_h_search= "Perkataan Carian";
+char *msg_h_uname = "Katanama";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistik Harian";
+char *msg_hlnk_hs = "Statistik ikut Jam";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Halaman";
+char *msg_hlnk_a  = "Agen";
+char *msg_hlnk_c  = "Negara";
+char *msg_hlnk_r  = "Perujuk";
+char *msg_hlnk_en = "Masuk dari";
+char *msg_hlnk_ex = "Keluar dari";
+char *msg_hlnk_sr = "Carian";
+char *msg_hlnk_i  = "Pengguna";
+
+/* monthly total table */
+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_us = "Jumlah Halaman Unik";
+char *msg_mtot_ur = "Jumlah Perujuk Unik";
+char *msg_mtot_ua = "Jumlah Agen Pengguna Unik";
+char *msg_mtot_uu = "Jumlah URL unik";
+char *msg_mtot_ui = "Jumlah Katanama Unik";
+char *msg_mtot_mhd= "Purata Capaian Sehari";
+char *msg_mtot_mhh= "Purata Capaian Sejam";
+char *msg_mtot_mfd= "Purata Fail Sehari";
+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_rc = "Purata Capaian mengikut Kod Respon";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistik Harian untuk";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistik mengikut Jam bagi";
+
+/* country pie chart */
+char *msg_ctry_use= "Penggunaan mengikut Negara bagi";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Antara";
+char *msg_top_of  = "yang Terbaik dari";
+char *msg_top_s   = "Jumlah Halaman";
+char *msg_top_u   = "Jumlah URL";
+char *msg_top_r   = "Jumlah Penujuk";
+char *msg_top_a   = "Jumlah Agen Pengguna";
+char *msg_top_c   = "Jumlah Negara";
+char *msg_top_en  = "Jumlah Halaman Masukan";
+char *msg_top_ex  = "Jumlah Halaman Keluar";
+char *msg_top_sr  = "Jumlah Katakunci Carian";
+char *msg_top_i   = "Jumlah Katanama";
+char *msg_v_sites = "Lihat Semua Halaman";
+char *msg_v_urls  = "Lihat Semua URL";
+char *msg_v_refs  = "Lihat Semua Penunjuk";
+char *msg_v_agents= "Lihat Semua Agen Pengguna";
+char *msg_v_search= "Lihat Semua Katakunci Carian";
+char *msg_v_users = "Lihat Semua Katanama";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Mei", "Jun",
+                    "Jul", "Ogo", "Sep",
+                    "Okt", "Nov", "Dis"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januari",  "Februari", "March",   "April",
+                    "Mei",      "Jun",     "July",    "Ogos",
+                    "September","Oktober",  "November","Disember"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Kod Respon tidak dapat ditakrif",                       0 },
+         { "Code 100 - Teruskan",                                   0 },
+         { "Code 101 - Bertukar Protokol",                          0 },
+         { "Code 200 - OK",                                         0 },
+         { "Code 201 - Dihasilkan",                                 0 },
+         { "Code 202 - Diterima",                                   0 },
+         { "Code 203 - Maklumat yang tidak dapat disahkan",         0 },
+         { "Code 204 - Maklumat Tiada",                             0 },
+         { "Code 205 - Maklumat diset semula",                      0 },
+         { "Code 206 - Maklumat tidak lengkap",                     0 },
+         { "Code 300 - Pilihan Pelbagai",                           0 },
+         { "Code 301 - Telah berpindah secara tetap",               0 },
+         { "Code 302 - Dijumpai",                                   0 },
+         { "Code 303 - Lihat yang lain",                            0 },
+         { "Code 304 - Tidak Diubah",                               0 },
+         { "Code 305 - Gunakan Proxy",                              0 },
+         { "Code 307 - Telah berpindah sementara",                  0 },
+         { "Code 400 - Permintaan Salah",                           0 },
+         { "Code 401 - Tidak dibenarkan",                           0 },
+         { "Code 402 - Bayaran diperlukan",                         0 },
+         { "Code 403 - Capaian Disekat",                            0 },
+         { "Code 404 - Tidak Dijumpai",                             0 },
+         { "Code 405 - Method Tidak Dibenarkan",                    0 },
+         { "Code 406 - Tidak Boleh Diterima",                       0 },
+         { "Code 407 - Pengesahan Proxy Diperlukan",                0 },
+         { "Code 408 - Masa Permintaan Tamat",                      0 },
+         { "Code 409 - Konflik",                                    0 },
+         { "Code 410 - Hilang",                                     0 },
+         { "Code 411 - Panjang Diperlukan",                         0 },
+         { "Code 412 - Keadaan Awal Gagal",                         0 },
+         { "Code 413 - Permintaan Entiti Terlalu Besar",            0 },
+         { "Code 414 - Permintaan URI Terlalu Panjang",             0 },
+         { "Code 415 - Jenis Media Tidak Disokong",                 0 },
+         { "Code 416 - Julat Permintaan Tidak Dibenarkan",          0 },
+         { "Code 417 - Anggapan Gagal",                             0 },
+         { "Code 500 - Ralat Dalaman Bagi Pelayan",                 0 },
+         { "Code 501 - Tidak Diimplemen",                           0 },
+         { "Code 502 - Gateway Gagal",                              0 },
+         { "Code 503 - Perkhidmatan Tiada",                         0 },
+         { "Code 504 - Masa Tamat Bagi Gateway",                    0 },
+         { "Code 505 - Versi HTTP Tidak Disokong",                  0 } };
+
+char *msg_title   = "Statistik Penggunaan bagi";
+char *msg_h_other = "Lain-lain";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Tidak Diketahui",                  0,0,0 },
+{ IDX_3C('c','o','m'),    "Komersil (com)",                   0,0,0 },
+{ IDX_3C('e','d','u'),    "Pendidikan (edu)",                 0,0,0 },
+{ IDX_3C('g','o','v'),    "Kerajaan US (gov)",                0,0,0 },
+{ IDX_3C('i','n','t'),    "Antarabangsa (int)",               0,0,0 },
+{ IDX_3C('m','i','l'),    "Ketenteraan US (mil)",             0,0,0 },
+{ IDX_3C('n','e','t'),    "Rangkaian (net)",                  0,0,0 },
+{ IDX_3C('o','r','g'),    "Organisasi Tidak Komersil (org)",  0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Gaya Lama Arpanet (arpa)",         0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Pulau Cocos (Keeling)",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Republik Tengah Afrika",           0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.norwegian b/lang/webalizer_lang.norwegian
new file mode 100644 (file)
index 0000000..beb9524
--- /dev/null
@@ -0,0 +1,645 @@
+/*
+   webalizer_lang.norwegian
+
+   Webalizer V2.0x Language Support file for norwegian.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   03-Oct-1998 Swedish Translation by Daniel Bergstrom (daniel@bergstrom.net)
+   28-Oct-1998 Lots of typos fixed, Daniel Bergstrom (daniel@bergstrom.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   26-Apr-1999 More typos fixed, thanks to "Mika Perälä" <mika@unit.liu.se>
+               (daniel@bergstrom.net)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   14-Oct-1999 Additional translation by Daved Cross (daved.cross@forefront.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   01-Jun-2000 Modified/corrected by Joaquim Homrighausen (joho@webbplatsen.se)
+   10-Nov-1999 Translated to Norwegian Håkon Flatøy (hakon@flatoy.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+   Please fix all typos, or drop me a note and i will fix it and submit
+   patches upstream. /daniel
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Norwegian";
+char *langcode  = "no";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "poster";
+char *msg_addresses="adresser";
+char *msg_ignored = "ignorerte";
+char *msg_bad     = "feilaktige";
+char *msg_in      = "i";
+char *msg_seconds = "sekunder";
+
+/* progress and setup error messages */
+char *msg_log_err = "Feil: kan ikke åpne loggfilen";
+char *msg_log_use = "Bruker loggfil";
+char *msg_dir_err = "Feil: kan ikke skifte katalog til";
+char *msg_dir_use = "Oppretter utdata i";
+char *msg_cur_dir = "aktuell katalog";
+char *msg_hostname= "Maskinnavn for rapportene er";
+char *msg_ign_hist= "Ignorerer tidigere historie...";
+char *msg_no_hist = "Fant ikke historiefilen...";
+char *msg_get_hist= "Leser historiefil...";
+char *msg_put_hist= "Lagrer historieinformasjon...";
+char *msg_hist_err= "Feil: kan ikke skrive til historefil";
+char *msg_bad_hist= "Feil: Ignorerer feilaktig historiepost";
+char *msg_bad_conf= "Feil: Kan ikke åpne konfigurasjonsfilen";
+char *msg_bad_key = "Advarsel: ugyldig nøkkelord";
+char *msg_bad_date= "Feil: hopper over post (feilaktig dato)";
+char *msg_ign_nscp= "Hopper over Netscape-spesifikk innledningsrad";
+char *msg_bad_rec = "Hopper over feilaktig post";
+char *msg_no_vrec = "Fant ingen gyldige poster!";
+char *msg_gen_rpt = "Genererer rapport for";
+char *msg_gen_sum = "Genererar oversiktsinformasjon";
+char *msg_get_data= "Leser tidligere genererte data...";
+char *msg_put_data= "Lagrer data fra denne generering...";
+char *msg_no_data = "Fant ikke tidligere genererte data...";
+char *msg_bad_data= "Feil: kan ikke gjenopprette lagret data";
+char *msg_data_err= "Feil: kan ikke lagre data for denne genereringen";
+char *msg_dup_data= "Advarsel: Mulige dobble oppføringer funnet";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Ingen cachefil spesifisert...";
+char *msg_dns_nodb= "Feil: Kan ikke åpne DNS-cachefilen";
+char *msg_dns_nolk= "Feil: Kan ikke låse DNS-cachefilen";
+char *msg_dns_usec= "Bruker DNS-cachefilen";
+char *msg_dns_rslv= "DNS Anrop";
+char *msg_dns_none= "Ingen ting å bearbeide";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Kan ikke allokere minne, stenger av 'Top sites'";
+char *msg_nomem_tr= "Kan ikke allokere minne, stenger av 'Top referrers'";
+char *msg_nomem_tu= "Kan ikke allokere minne, stenger av 'Top URLs'";
+char *msg_nomem_tc= "Kan ikke allokere minne, stenger av 'Top Countries'";
+char *msg_nomem_ta= "Kan ikke allokere minne, stenger av 'Top User Agents'";
+char *msg_nomem_tsr="Kan ikke allokere minne, stenger av 'Top Search Strings'";
+char *msg_nomem_ti= "Kan ikke allokere minne, stenger av 'Top Usernames'";
+char *msg_nomem_dh= "Feil ved tillegging av dato i listen (daglig), hopper over";
+char *msg_nomem_mh= "Feil ved tillegging av dato i listen (månedlig), hopper over";
+char *msg_nomem_u = "Feil ved tillegging av URL i listen, hopper over";
+char *msg_nomem_a = "Feil ved tillegging av klienttype i listen, hopper over";
+char *msg_nomem_r = "Feil ved tillegging av henvisning i listen, hopper over";
+char *msg_nomem_sc= "Feil ved tillegging av søkestreng, hopper over";
+char *msg_nomem_i = "Feil ved tillegging av brukernavn, hopper over";
+
+/* log record errors */
+char *msg_big_rec = "Feil: hopper over for stor post i loggfil";
+char *msg_big_host= "Advarsel: Tilpasser (kapper) for langt datonavn";
+char *msg_big_date= "Advarsel: Tilpasser (kapper) for langt datofelt";
+char *msg_big_req = "Advarsel: Tilpasser (kapper) for langt spørrefelt";
+char *msg_big_ref = "Advarsel: Tilpasser (kapper) for langt henvisningsfelt";
+char *msg_big_user= "Advarsel: Tilpasser (kapper) for langt brukernavn";
+char *msg_big_one = "Advarsel: Streng overskrider størrelsen på lagringsplass";
+
+/* misc errors */
+char *msg_no_open = "Feil: kan ikke åpne fil";
+
+/* Help display... */
+char *h_usage1 = "Bruk";
+char *h_usage2 = "[flaggor] [loggfil]";
+char *h_msg[]= {
+         "-h         = skriv hjelpetekst"                       ,
+         "-V         = skriv versjonsinforasjon"                ,
+         "-v         = be verbose"                              ,
+         "-d         = skriv ytterligere debuginformasjon"      ,
+         "-F typ     = Loggtype.  type= (clf | ftp | squid | w3c)" ,
+         "-f         = hantere sekvensfeil"                     ,
+         "-i         = ignorerer historiefilen"                 ,
+         "-p         = bevar tillstand (inkrementell)"          ,
+         "-b         = ignore state (incremental)"              ,
+         "-q         = vis ikke informasjonsbeskjeder"          ,
+         "-Q         = vis ikke noe informasjon"                ,
+         "-Y         = ikke opprettgraf for land"               ,
+         "-G         = ikke opprett graf for timmar"            ,
+         "-H         = ikke opprett statistikk for timmar"      ,
+         "-L         = ikke opprett fargekodet grafer"          ,
+         "-l num     = opprett 'num' referenslinjer for grafer" ,
+         "-m num     = Verdi for timeout for besøk (sekunder)"  ,
+         "-T         = skriv informasjon om tidsbruk"           ,
+         "-c fil     = bruk konfigurasjonsfilen 'fil'"          ,
+         "-n navn    = datonavn som skal brukes"                ,
+         "-o katalog = katalog for utskrift"                    ,
+         "-t navn    = bruk 'navn' som tittel"                  ,
+         "-a navn    = skjul brukernavn 'navn'"                 ,
+         "-r navn    = skjul henvisning 'navn'"                 ,
+         "-s navn    = skjul klientadresse 'navn'"              ,
+         "-u navn    = skjul URL 'navn'"                        ,
+         "-x navn    = Bruk filnavnsending 'navn'"              ,
+         "-O navn    = Omit page 'navn'"                        ,
+         "-P navn    = Endelse for sidefiler 'navn'"            ,
+         "-I navn    = ha 'navn' som alias till index.html"     ,
+         "-K antall  = vis 'antall' months in summary table"    ,
+         "-k antall  = vis 'andall' months in summary graph"    ,
+         "-A antall  = vis 'antall' i listen over klienter"     ,
+         "-C antall  = vis 'antall' i listen over land"         ,
+         "-R antall  = vis 'antall' i listen over henvisninger" ,
+         "-S antall  = vis 'antall' i fraadresse-listen"        ,
+         "-U antall  = vis 'antall' i listen over URL-er"       ,
+         "-e antall  = Vis 'antall' i listen over startsider"   ,
+         "-E antall  = Vis 'antall' i listen over sluttsider"   ,
+         "-g antall  = Group Domains to 'antall' levels"        ,
+         "-X         = Skjul indiveduelle plasser"              ,
+         "-z dir     = Use country flags in 'dir'"              ,
+#ifdef USE_DNS
+         "-D navn    = Bruk DNS-cachfil 'navn'"                 ,
+         "-N num     = Antall DNS-processer (0=stäng av)"       ,
+         "-j         = Enable native GeoDB lookups"             ,
+         "-J navn    = Use GeoDB database 'navn'"               ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                     ,
+         "-W navn   = Use GeoIP database 'navn'"                ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Periode for summering";
+char *msg_hhdr_gt = "Opprettet";
+
+/* main index strings */
+char *msg_main_us = "Summering for";
+/* char *msg_main_per= "Siste 12 månedene"; */
+char *msg_main_per= "Summering måned for måned";
+char *msg_main_sum= "Summering måned for måned";
+char *msg_main_da = "Snitt over dagen";
+char *msg_main_mt = "Summer pr. måned";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daglig bruk for";
+char *msg_hmth_hu = "Bruk time for time for";
+
+/* table header strings */
+char *msg_h_by    = "Av";
+char *msg_h_avg   = "Snitt";
+char *msg_h_max   = "Maks";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totaler";
+char *msg_h_day   = "Dag";
+char *msg_h_mth   = "Måned";
+char *msg_h_hour  = "Time";
+char *msg_h_hits  = "Treff";
+char *msg_h_pages = "Sider";
+char *msg_h_visits= "Besøk";
+char *msg_h_files = "Filer";
+char *msg_h_sites = "Klientadresser";
+char *msg_h_xfer  = "kilobyte";
+char *msg_h_hname = "Servernavn";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Klienttype";
+char *msg_h_ref   = "Referent";
+char *msg_h_ctry  = "Land";
+char *msg_h_search= "Søkstreng";
+char *msg_h_uname = "Brukernavn";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Daglig statistikkk";
+char *msg_hlnk_hs = "Statistikkk time for time";
+char *msg_hlnk_u  = "URLer";
+char *msg_hlnk_s  = "Klientadresser";
+char *msg_hlnk_a  = "Klienttyper";
+char *msg_hlnk_c  = "Land";
+char *msg_hlnk_r  = "Referanser";
+char *msg_hlnk_en = "Inngang";
+char *msg_hlnk_ex = "Utgang";
+char *msg_hlnk_sr = "Søk";
+char *msg_hlnk_i  = "Brukere";
+
+/* monthly total table */
+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_us = "Totalt antall unike klientadresser";
+char *msg_mtot_ur = "Totalt antall unike henvisninger";
+char *msg_mtot_ua = "Totalt antall unike klienttyper";
+char *msg_mtot_uu = "Totalt antall unike URLer";
+char *msg_mtot_ui = "Totalt antall unike brukernavn";
+char *msg_mtot_mhd= "Treff per dag";
+char *msg_mtot_mhh= "Treff per time";
+char *msg_mtot_mfd= "Filer per dag";
+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_rc = "Treff sortert etter responskode";
+
+/* daily total table */
+char *msg_dtot_ds = "Daglig statistikk for";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistikk time for time for";
+
+/* country pie chart */
+char *msg_ctry_use= "Statsistik sortert etter land for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Vanligste";
+char *msg_top_of  = "utav totalt";
+char *msg_top_s   = "sider";
+char *msg_top_u   = "URLer";
+char *msg_top_r   = "henvisniger";
+char *msg_top_a   = "klienttyper";
+char *msg_top_c   = "land";
+char *msg_top_en  = "totalt inngangssider";
+char *msg_top_ex  = "totalt utgangssider";
+char *msg_top_sr  = "totalt søkestrenger";
+char *msg_top_i   = "totalt brukernavn";
+char *msg_v_sites = "View All Sites";
+char *msg_v_urls  = "View All URLs";
+char *msg_v_refs  = "View All Referrers";
+char *msg_v_agents= "View All User Agents";
+char *msg_v_search= "View All Search Strings";
+char *msg_v_users = "View All Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Mai", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Des"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januar",  "Februar", "Mars",   "April",
+                    "Mai",      "Juni",     "Juli",    "August",
+                    "September","Oktober",  "November","Desember"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Oidentifierad svarskod",                    0 },
+         { "Kode 100 - Fortsett",                        0 },
+         { "Kode 101 - Bytter protokoll",                 0 },
+         { "Kode 200 - OK",                              0 },
+         { "Kode 201 - Opprettet",                          0 },
+         { "Kode 202 - Akseptert",                      0 },
+         { "Kode 203 - Ikke-authorativ informasjon",   0 },
+         { "Kode 204 - Ikke noe innehold",                  0 },
+         { "Kode 205 - Tilbakestiller innehold",              0 },
+         { "Kode 206 - Partiellt innehold",              0 },
+         { "Kode 300 - Flervalg",                    0 },
+         { "Kode 301 - Permanent flyttet",               0 },
+         { "Kode 302 - Funnet",                          0 },
+         { "Kode 303 - Se annen",                        0 },
+         { "Kode 304 - Uforandret",                      0 },
+         { "Kode 305 - Bruk proxy",                    0 },
+         { "Kode 307 - Tilfeldig flyttet",             0 },
+         { "Kode 400 - Feilaktig forespørsel",              0 },
+         { "Kode 401 - Ikke autorisert",               0 },
+         { "Kode 402 - Betaling kreves",                 0 },
+         { "Kode 403 - ikke tillatt",                       0 },
+         { "Kode 404 - Ikke funnet",                     0 },
+         { "Kode 405 - Metode ikke tillatt",                 0 },
+         { "Kode 406 - Ikke aksepterbar",                0 },
+         { "Kode 407 - Verifiering fra proxy kreves",    0 },
+         { "Kode 408 - Forespørselen gikk over tiden",       0 },
+         { "Kode 409 - Konflikt",                        0 },
+         { "Kode 410 - Borte",                           0 },
+         { "Kode 411 - Trenger lengde",                   0 },
+         { "Kode 412 - Vilkår misslyktes",        0 },
+         { "Kode 413 - Forespørselsenhet for stor",          0 },
+         { "Kode 414 - Forespørrsels-URL for lang",           0 },
+         { "Kode 415 - Medietype ikke støttet",               0 },
+         { "Kode 416 - Forespurt intervall ikke tilgjengelig", 0 },
+         { "Kode 417 - Expectation Failed",              0 },
+         { "Kode 500 - Intern serverfeil",               0 },
+         { "Kode 501 - Ikke implementert",                0 },
+         { "Kode 502 - Feil gateway",                0 },
+         { "Kode 503 - Tjenesten utilgjengelig",           0 },
+         { "Kode 504 - Gateway gikk over tiden",         0 },
+         { "Kode 505 - denne HTTP-versionen støttes ikke",   0 } };
+
+char *msg_title   = "Statistikk over bruk for";
+char *msg_h_other = "Annen";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Ikke oppslått/ukjent",             0,0,0 },
+{ IDX_3C('c','o','m'),    "Kommersiell (com)",                0,0,0 },
+{ IDX_3C('e','d','u'),    "Utdanning (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "USA, staten (gov)",                0,0,0 },
+{ IDX_3C('i','n','t'),    "Internasjonalt (int)",             0,0,0 },
+{ IDX_3C('m','i','l'),    "USA, militær (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Nettverk (net)",                   0,0,0 },
+{ IDX_3C('o','r','g'),    "Ideell organisasjon (org)",        0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet (arpa)",                   0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Forenede Arabiske Emirater",       0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Nederland",                        0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktis",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Amerikansk Samoa",                 0,0,0 },
+{ IDX_2C('a','t'),        "Østerrike",                        0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbadjan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia Herzegovina",               0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocosøyene",                       0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Sentralafrikanske republikk",      0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Sveits",                           0,0,0 },
+{ IDX_2C('c','i'),        "Elfensbenkysten",                  0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Kina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Julön",                            0,0,0 },
+{ IDX_2C('c','y'),        "Cypros",                           0,0,0 },
+{ IDX_2C('c','z'),        "Tsjekkia",                         0,0,0 },
+{ IDX_2C('d','e'),        "Tyskland",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikanske Republikk",           0,0,0 },
+{ IDX_2C('d','z'),        "Algeri",                           0,0,0 },
+{ IDX_2C('e','c'),        "Equador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estland",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Vestsahara",                       0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spania",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falklandsøyene",                   0,0,0 },
+{ IDX_2C('f','m'),        "Mikronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faraoøyene",                       0,0,0 },
+{ IDX_2C('f','r'),        "Frankrike",                        0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "England",                          0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Franska Guiana",                   0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grønnland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Ekvatorialguinea",                 0,0,0 },
+{ IDX_2C('g','r'),        "Hellas",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia och S. Sandwichøyene",  0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard- och McDonaldøyene",         0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Kroatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungarn" ,                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irland",                           0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordanien",                        0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirgistan",                        0,0,0 },
+{ IDX_2C('k','h'),        "Kambodja",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts och Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Nordkorea",                        0,0,0 },
+{ IDX_2C('k','r'),        "Sydkorea",                         0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Caymanøyene",                      0,0,0 },
+{ IDX_2C('k','z'),        "Kazachstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litauen",                          0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Lettland",                         0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldavia",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Malagasy",                         0,0,0 },
+{ IDX_2C('m','h'),        "Marshalløyene",                    0,0,0 },
+{ IDX_2C('m','k'),        "Makedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Norra Marianaøyene",               0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldivene",                        0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Moçambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nye Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Nederland",                        0,0,0 },
+{ IDX_2C('n','o'),        "Norge",                            0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nye Zeeland",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Fransk Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nya Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Filippinene",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polen",                            0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre och Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russland",                         0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudiarabia",                      0,0,0 },
+{ IDX_2C('s','b'),        "Solomonøyene",                     0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sverige",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenien",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard och Jan Mayen-øyene",     0,0,0 },
+{ IDX_2C('s','k'),        "Slovakien",                        0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome och Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Sovjet (tidligere)",               0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks och Caicosøyene",            0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Søndre Fransk territorier",        0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisien",                         0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Øst-timor",                        0,0,0 },
+{ IDX_2C('t','r'),        "Tyrkia",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad og Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Storbritannia",                    0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "USA",                              0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikanstaten",                    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent och Grenadinerna",   0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin-øyene (Britiske)",          0,0,0 },
+{ IDX_2C('v','i'),        "Virgin-øyene (Amerikanske)",       0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis och Futunaøyene",           0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Sydafrika",                        0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.polish b/lang/webalizer_lang.polish
new file mode 100644 (file)
index 0000000..a6c12bd
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+   webalizer_lang.polish
+
+   Webalizer V2.0x Language Support file for Polish.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   08-Jun-1998 Translated by Dariusz P. Pawlak (darekp@lib.amu.edu.pl)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   27-Jan-2000 Some translation fixes and updates by Jerzy Hodor (jh@rsi.pl)
+   30-Jan-2000 Country code corrections by Bohdan Horst (nexus@hoth.amu.edu.pl)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   20-Mar-2000 Translation updates by Piotr Klaban (makler@man.torun.pl)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Polish";
+char *langcode  = "pl";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* te s± u¿ywane tylko w podsumowaniach */
+/* Format:   XXX rekordów (XXX zignorowano, XXX z³ych) w ci±gu X.XX sekund        */
+char *msg_records = "zapisów";
+char *msg_addresses="adres(ów)";
+char *msg_ignored = "opuszczono";
+char *msg_bad     = "z³y(ch)";
+char *msg_in      = "w";
+char *msg_seconds = "sekund";
+
+/* progress and setup error messages */
+char *msg_log_err = "B³±d: Nie mogê otworzyæ pliku logu";
+char *msg_log_use = "U¿ywam pliku logu";
+char *msg_dir_err = "B³±d: Nie mogê zmieniæ katalogu na";
+char *msg_dir_use = "Tworzê wynik w";
+char *msg_cur_dir = "bie¿±cym katalogu";
+char *msg_hostname= "Raport tworzony dla hosta";
+char *msg_ign_hist= "Ignorujê poprzedni± historiê...";
+char *msg_no_hist = "Nie znalaz³em pliku historii...";
+char *msg_get_hist= "Czytam plik historii...";
+char *msg_put_hist= "Zapisujê informacjê historii...";
+char *msg_hist_err= "B³±d: Nie mogê zapisaæ pliku historii";
+char *msg_bad_hist= "B³±d: Pomijam b³êdny zapis historii";
+char *msg_bad_conf= "B³±d: Nie mogê otworzyæ pliku konfiguracyjnego";
+char *msg_bad_key = "Ostrze¿enie: B³êdne s³owo kluczowe";
+char *msg_bad_date= "B³±d: Pomijam rekord (b³êdna data)";
+char *msg_ign_nscp= "Pomijam nag³ówek rekordu Netscepe'a";
+char *msg_bad_rec = "Pomijam b³êdny zapis";
+char *msg_no_vrec = "Nie znalaz³em prawid³owych rekordów!";
+char *msg_gen_rpt = "Generujê raport dla";
+char *msg_gen_sum = "Generujê raport sumaryczny";
+char *msg_get_data= "Czytam dane z poprzedniego uruchomienia...";
+char *msg_put_data= "Zapisujê dane z bie¿±cego uruchomienia...";
+char *msg_no_data = "Nie znalaz³em danych z poprzedniego uruchomienia...";
+char *msg_bad_data= "B³±d: Nie mogê odczytaæ danych z poprzedniego uruchomienia";
+char *msg_data_err= "B³±d: Nie mogê zapisaæ danych z bie¿±cego uruchomienia";
+char *msg_dup_data= "Ostrze¿enie: Prawdopodobnie znalaz³em zdublowane dane";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nie podano pliku buforuj±cego, przerywam dzia³anie...";
+char *msg_dns_nodb= "B³±d: Nie mogê otworzyæ pliku buforuj±cego DNS";
+char *msg_dns_nolk= "B³±d: Nie mogê zablokowaæ pliku buforuj±cego DNS";
+char *msg_dns_usec= "Wykorzystujê plik buforuj±cy DNS";
+char *msg_dns_rslv= "Przeszukujê DNS";
+char *msg_dns_none= "Brak adresów IP do przetworzenia";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nie mogê przydzieliæ pamiêci, najczêstsze lokalizacje anulowane!";
+char *msg_nomem_tr= "Nie mogê przydzieliæ pamiêci, najczêstsze odno¶niki anulowane!";
+char *msg_nomem_tu= "Nie mogê przydzieliæ pamiêci, najczêstsze URLe anulowane!";
+char *msg_nomem_tc= "Nie mogê przydzieliæ pamiêci, najczêstsze kraje anulowane!";
+char *msg_nomem_ta= "Nie mogê przydzieliæ pamiêci, najczê¶ciej u¿ywane przegl±darki anulowane!";
+char *msg_nomem_tsr="Nie mogê przydzieliæ pamiêci, najczê¶ciej szukane s³owa anulowane!";
+char *msg_nomem_ti= "Nie mogê przydzieliæ pamiêci, najczêstsze po³±czenia u¿ytkowników anulowane!";
+char *msg_nomem_dh= "B³±d w trakcie dodawania kolejnego hosta (dzienne), pomijam";
+char *msg_nomem_mh= "B³±d w trakcie dodawania kolejnego hosta (miesiêczne), pomijam";
+char *msg_nomem_u = "B³±d w trakcie dodawania kolejnego URLa, pomijam";
+char *msg_nomem_a = "B³±d w trakcie dodawania kolejnego przegl±darki, pomijam";
+char *msg_nomem_r = "B³±d w trakcie dodawania kolejnego odno¶nika, pomijam";
+char *msg_nomem_sc= "B³±d w trakcie dodawania kolejnego szukanego s³owa, pomijam";
+char *msg_nomem_i = "B³±d w trakcie dodawania kolejnego u¿ytkownika, pomijam";
+
+/* log record errors */
+char *msg_big_rec = "B³±d: Pomijam zbyt du¿y zapis logu";
+char *msg_big_host= "Ostrze¿enie: Obcinam, przekroczona wielko¶æ nazwy hosta";
+char *msg_big_date= "Ostrze¿enie: Obcinam, przekroczona wielko¶æ pola daty";
+char *msg_big_req = "Ostrze¿enie: Obcinam, przekroczona wielko¶æ pola ¿±dania";
+char *msg_big_ref = "Ostrze¿enie: Obcinam, przekroczona wielko¶æ pola odno¶nika";
+char *msg_big_user= "Ostrze¿enie: Obcinam, przekroczona d³ugo¶æ nazwy u¿ytkownika";
+char *msg_big_one = "Ostrze¿enie: Napis przekracza dopuszczaln± wielko¶æ";
+
+/* misc errors */
+char *msg_no_open = "B³±d: Nie mogê otworzyæ pliku";
+
+/* Help display... */
+char *h_usage1 = "U¿ycie";
+char *h_usage2 = "[opcje] [plik logu]";
+char *h_msg[]= {
+         "-h        = wy¶wietla te informacje"             ,
+         "-V        = wy¶wietla informacje o wersji"       ,
+         "-v        = be verbose"                          ,
+         "-d        = wy¶wietla dodatkowe informacje"      ,
+         "-F typ    = typ logu.  typ= (clf | ftp | squid | w3c)",
+         "-f        = zignoruj b³êdy czasu kolejnych wywo³añ",
+         "-i        = pomija plik historii"                ,
+         "-p        = zachowuje stan (przyrostowy)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = wy³±cza komunikaty informacyjne"     ,
+         "-Q        = wy³±cza wszystkie komunikaty"        ,
+         "-Y        = wy³±cza wykres krajów"               ,
+         "-G        = wy³±cza wykres godzinny"             ,
+         "-H        = wy³±cza statystykê godzinn±"         ,
+         "-L        = wy³±cza kolorowe s³upki ledendy"     ,
+         "-l num    = w³±cza num linii w tle wykresów"     ,
+         "-m num    = czas pojedynczej wizyty (seconds)"   ,
+         "-T        = wy¶wietla informacje czasowe"        ,
+         "-c plik   = u¿ywa pliku konfiguracyjnego 'plik'" ,
+         "-n nazwa  = u¿ywana nazwa hosta"                 ,
+         "-o katalog= katalog u¿ywany do zapisu"           ,
+         "-t nazwa  = tytu³ 'nazwa' dla raportu"           ,
+         "-a nazwa  = ukrywa program klienta 'nazwa'"      ,
+         "-r nazwa  = ukrywa odno¶nik 'nazwa'"             ,
+         "-s nazwa  = ukrywa lokalizacjê 'nazwa'"          ,
+         "-u nazwa  = ukrywa URL 'nazwa'"                  ,
+         "-x nazwa  = stosuje pliki o rozszerzeniu 'nazwa'",
+         "-O nazwa  = Omit page 'nazwa'"                   ,
+         "-P nazwa  = strony o rozszerzeniu 'nazwa'"       ,
+         "-I nazwa  = inna nazwa plików index.*: 'nazwa'"  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = wy¶wietla num najczêstszych przegl±darek",
+         "-C num    = wy¶wietla num najczêstszych krajów"  ,
+         "-R num    = wy¶wietla num najczêstszych odno¶ników",
+         "-S num    = wy¶wietla num najczêstszych lokalizacji",
+         "-U num    = wy¶wietla num najczêstszych URLi"    ,
+         "-e num    = wy¶wietla num najczêstszych stron wej¶ciowych" ,
+         "-E num    = wy¶wietla num najczêstszych stron wyj¶ciowych" ,
+         "-g num    = grupuj domeny do poziomu 'num'"      ,
+         "-X        = ukryj pojedyncze lokalizacje"         ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D nazwa  = u¿ywaj pliku buforuj±cego DNS 'nazwa'",
+         "-N num    = liczba procesów DNS (0=wy³±cz)"      ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J nazwa  = Use GeoDB database 'nazwa'"          ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nazwa  = Use GeoIP database 'nazwa'"          ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Prezentowany okres";
+char *msg_hhdr_gt = "Wygenerowano";
+
+
+/* main index strings */
+char *msg_main_us = "Raport sumaryczny";
+/* char *msg_main_per= "Ostatnie 12 miesiêcy"; */
+char *msg_main_per= "Sumarycznie w miesi±cu:";
+char *msg_main_sum= "Sumarycznie w miesi±cu:";
+char *msg_main_da = "¦rednio dziennie";
+char *msg_main_mt = "Ogólnie w miesi±cu: ";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Raport Dzienny - ";
+char *msg_hmth_hu = "Raport Godzinowy - ";
+
+/* table header strings */
+char *msg_h_by    = "uszeregowane wg";
+char *msg_h_avg   = "¦rednio";
+char *msg_h_max   = "Maks.";
+char *msg_h_total = "Wszystkie";
+char *msg_h_totals= "Suma";
+char *msg_h_day   = "Dzieñ";
+char *msg_h_mth   = "Miesi±c";
+char *msg_h_hour  = "Godzina";
+char *msg_h_hits  = "Wywo³ania";
+char *msg_h_pages = "Strony";
+char *msg_h_visits= "Wizyty";
+char *msg_h_files = "Pliki";
+char *msg_h_sites = "Lokalizacje";
+char *msg_h_xfer  = "KB";
+char *msg_h_hname = "Nazwa hosta";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Przegl±darka";
+char *msg_h_ref   = "Odno¶niki";
+char *msg_h_ctry  = "Kraj";
+char *msg_h_search= "Wyszukiwany ci±g znaków";
+char *msg_h_uname = "U¿ytkownik";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statystyki dzienne";
+char *msg_hlnk_hs = "Statystyki godzinne";
+char *msg_hlnk_u  = "URL'e";
+char *msg_hlnk_s  = "Lokalizacje";
+char *msg_hlnk_a  = "Przegl±darki";
+char *msg_hlnk_c  = "Kraje";
+char *msg_hlnk_r  = "Odno¶niki";
+char *msg_hlnk_en = "Wej¶cia";
+char *msg_hlnk_ex = "Wyj¶cia";
+char *msg_hlnk_sr = "Poszukiwane";
+char *msg_hlnk_i  = "U¿ytkownicy";
+
+/* monthly total table */
+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_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";
+char *msg_mtot_uu = "Ca³kowita liczba unikalnych URLi";
+char *msg_mtot_ui = "Ca³kowita liczba unikalnych u¿ytkowników";
+char *msg_mtot_mhd= "Wywo³añ dziennie";
+char *msg_mtot_mhh= "Wywo³añ na godzinê";
+char *msg_mtot_mfd= "Plików dziennie";
+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_rc = "Wywo³ania wed³ug kodu odpowiedzi";
+
+/* daily total table */
+char *msg_dtot_ds = "Dzienne statystyki - ";
+
+/* hourly total table */
+char *msg_htot_hs = "Godzinowe statystyki - ";
+
+/* country pie chart */
+char *msg_ctry_use= "Odwo³ania wg krajów - ";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Pierwsze";
+char *msg_top_of  = "z ogólnej liczby";
+char *msg_top_s   = "lokalizacji";
+char *msg_top_u   = "URLi";
+char *msg_top_r   = "odno¶ników";
+char *msg_top_a   = "przegl±darek";
+char *msg_top_c   = "krajów";
+char *msg_top_en  = "stron wej¶ciowych";
+char *msg_top_ex  = "stron wyj¶ciowych";
+char *msg_top_sr  = "szukanych ci±gów znaków";
+char *msg_top_i   = "u¿ytkowników";
+char *msg_v_sites = "Podgl±d wszystkich lokalizacji";
+char *msg_v_urls  = "Podgl±d wszystkich URL'i";
+char *msg_v_refs  = "Podgl±d wszystkich odno¶ników";
+char *msg_v_agents= "Podgl±d wszystkich przegl±darek";
+char *msg_v_search= "Podgl±d wszystkich ci±gów znaków";
+char *msg_v_users = "Podgl±d wszystkich u¿ytkowników";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Sty", "Lut", "Mar",
+                    "Kwi", "Maj", "Cze",
+                    "Lip", "Sie", "Wrz",
+                    "Pa¼", "Lis", "Gru"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "styczeñ",  "luty",                "marzec",       "kwiecieñ",
+                    "maj",      "czerwiec",     "lipiec",      "sierpieñ",
+                    "wrzesieñ",        "pa¼dziernik",  "listopad",     "grudzieñ"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Niezdefiniowany kod odpowiedzi",             0 },
+         { "Code 100 - Kontynuuj",                       0 },
+         { "Code 101 - Zmieniam protoko³y",              0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Utworzono",                       0 },
+         { "Code 202 - Zaakceptowano",                   0 },
+         { "Code 203 - Niewiarygodna informacja",        0 },
+         { "Code 204 - Brak zawarto¶ci",                 0 },
+         { "Code 205 - Kasujê zawarto¶æ",                0 },
+         { "Code 206 - Czê¶ciowa zawarto¶æ",             0 },
+         { "Code 300 - Wielokrotny wybór",               0 },
+         { "Code 301 - Przeniesiono na sta³e",           0 },
+         { "Code 302 - Przeniesiono tymczasowo",         0 },
+         { "Code 303 - Zobacz inne",                     0 },
+         { "Code 304 - Niezmodyfikowany",                0 },
+         { "Code 305 - U¿yj proxy",                      0 },
+         { "Code 307 - Tymczasowe przekierowanie",       0 },
+         { "Code 400 - B³êdne ¿±danie",                  0 },
+         { "Code 401 - Nieautoryzowany",                 0 },
+         { "Code 402 - ¯±dana zap³ata",                  0 },
+         { "Code 403 - Zakazane",                        0 },
+         { "Code 404 - Nie znaleziono",                  0 },
+         { "Code 405 - Nieuznawana metoda",              0 },
+         { "Code 406 - Nie akceptowane",                 0 },
+         { "Code 407 - Niezbêdna autentykacja przez proxy",   0 },
+         { "Code 408 - Czas zapytania min±³",            0 },
+         { "Code 409 - Konflikt",                        0 },
+         { "Code 410 - Ju¿ niedostêpne",                 0 },
+         { "Code 411 - Wymagana d³ugo¶æ",                0 },
+         { "Code 412 - Warunki niespe³nione",            0 },
+         { "Code 413 - Zapytanie za du¿e",               0 },
+         { "Code 414 - Zapytanie URI za d³ugie",         0 },
+         { "Code 415 - Nieobs³ugiwany typ no¶nika",      0 },
+         { "Code 416 - Zapytanie-Zakres niedostêpny",    0 },
+         { "Code 417 - Warunek niespe³niony",            0 },
+         { "Code 500 - Wewnêtrzny b³±d serwera",         0 },
+         { "Code 501 - Niezaimplementowane",             0 },
+         { "Code 502 - Z³a brama",                       0 },
+         { "Code 503 - Serwis niedostêpny",              0 },
+         { "Code 504 - Up³yn±³ czas bramkowania",        0 },
+         { "Code 505 - Nieobs³ugiwana wersja HTTP",      0 } };
+
+char *msg_title   = "Statystyki serwera dla";
+char *msg_h_other = "Inne";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Nieznany",                         0,0,0 },
+{ IDX_3C('c','o','m'),    "Komercyjna (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Edukacyjna (edu)",                 0,0,0 },
+{ IDX_3C('g','o','v'),    "Rz±dowa USA (gov)",                0,0,0 },
+{ IDX_3C('i','n','t'),    "Miêdzynarodowa (int)",             0,0,0 },
+{ IDX_3C('m','i','l'),    "Wojskowa USA (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Sieæ (net)",                       0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizacja niekomercyjna (org)",  0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Stara Arpanet (arpa)",             0,0,0 },
+{ IDX_4C('n','a','t','o'),"Sieæ NATO",                        0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Zjednoczone Emiraty Arabskie",     0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua i Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antyle Holenderskie",              0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktyka",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentyna",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Amerykañskie",               0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbejd¿an",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bo¶nia i Hercegowina",             0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesz",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bu³garia",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermudy",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei",                           0,0,0 },
+{ IDX_2C('b','o'),        "Boliwia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazylia",                         0,0,0 },
+{ IDX_2C('b','s'),        "Wyspy Bahama",                     0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Wyspa Bouvet",                     0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bia³oru¶",                         0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Wyspy Kokosowe",                   0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Republika ¦rodkowoafrykañska",     0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Szwajcaria",                       0,0,0 },
+{ IDX_2C('c','i'),        "Wybrze¿e Ko¶ci S³oniowej",         0,0,0 },
+{ IDX_2C('c','k'),        "Wyspy Cooka",                      0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Chiny",                            0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Kostaryka",                        0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Wyspy Zielonego Przyl±dka",        0,0,0 },
+{ IDX_2C('c','x'),        "Wyspa Bo¿ego Narodzenia",          0,0,0 },
+{ IDX_2C('c','y'),        "Cypr",                             0,0,0 },
+{ IDX_2C('c','z'),        "Czechy",                           0,0,0 },
+{ IDX_2C('d','e'),        "Niemcy",                           0,0,0 },
+{ IDX_2C('d','j'),        "D¿ibuti",                          0,0,0 },
+{ IDX_2C('d','k'),        "Dania",                            0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikana",                       0,0,0 },
+{ IDX_2C('d','z'),        "Algieria",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ekwador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egipt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Zachodnia",                 0,0,0 },
+{ IDX_2C('e','r'),        "Erytrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Hiszpania",                        0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fid¿i",                            0,0,0 },
+{ IDX_2C('f','k'),        "Falklandy",                        0,0,0 },
+{ IDX_2C('f','m'),        "Mikronezja",                       0,0,0 },
+{ IDX_2C('f','o'),        "Wyspy Owcze",                      0,0,0 },
+{ IDX_2C('f','r'),        "Francja",                          0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Wielka Brytania",                  0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Gruzja",                           0,0,0 },
+{ IDX_2C('g','f'),        "Gujana Francuska",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Grenlandia",                       0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Gwinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Gwadelupa",                        0,0,0 },
+{ IDX_2C('g','q'),        "Gwinea Równikowa",                 0,0,0 },
+{ IDX_2C('g','r'),        "Grecja",                           0,0,0 },
+{ IDX_2C('g','s'),        "Georgia P³d. i Wyspy Sandwicha P³d.", 0,0,0 },
+{ IDX_2C('g','t'),        "Gwatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Gwinea Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Gujana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Wyspy Heard i McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Chorwacja",                        0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Wêgry",                            0,0,0 },
+{ IDX_2C('i','d'),        "Indonezja",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlandia",                         0,0,0 },
+{ IDX_2C('i','l'),        "Izrael",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Indie",                            0,0,0 },
+{ IDX_2C('i','o'),        "Bryt. Teryt. Oceanu Indyjskiego",  0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islandia",                         0,0,0 },
+{ IDX_2C('i','t'),        "W³ochy",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamajka",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japonia",                          0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirgistan",                        0,0,0 },
+{ IDX_2C('k','h'),        "Kambod¿a",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Komory",                           0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts i Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Korea Pó³nocna",                   0,0,0 },
+{ IDX_2C('k','r'),        "Korea Po³udniowa",                 0,0,0 },
+{ IDX_2C('k','w'),        "Kuwejt",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kajmany",                          0,0,0 },
+{ IDX_2C('k','z'),        "Kazachstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Liban",                            0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Lichtenstein",                     0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litwa",                            0,0,0 },
+{ IDX_2C('l','u'),        "Luksemburg",                       0,0,0 },
+{ IDX_2C('l','v'),        "£otwa",                            0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                           0,0,0 },
+{ IDX_2C('m','d'),        "Mo³dawia",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Wyspy Marshalla",                  0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Makao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Mariany Pó³nocne",                 0,0,0 },
+{ IDX_2C('m','q'),        "Martynika",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauretania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Malediwy",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Meksyk",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malezja",                          0,0,0 },
+{ IDX_2C('m','z'),        "Mozambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nowa Kaledonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk",                          0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holandia",                         0,0,0 },
+{ IDX_2C('n','o'),        "Norwegia",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nowa Zelandia",                    0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinezja Francuska",              0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nowa Gwinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipiny",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polska",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre i Miquelon",            0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugalia",                       0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paragwaj",                         0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumunia",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rosja",                            0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudyjska",                 0,0,0 },
+{ IDX_2C('s','b'),        "Wyspy Salomona",                   0,0,0 },
+{ IDX_2C('s','c'),        "Seszele",                          0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Szwecja",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "¦w. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "S³owenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Wyspy Svalbard i Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "S³owacja",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Wyspy ¦w. Tomasza i Ksi±¿êca",     0,0,0 },
+{ IDX_2C('s','u'),        "ZSRR (by³y)",                      0,0,0 },
+{ IDX_2C('s','v'),        "Salwador",                         0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Suazi",                            0,0,0 },
+{ IDX_2C('t','c'),        "Turks i Caicos",                   0,0,0 },
+{ IDX_2C('t','d'),        "Czad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Francuskie Terytoria Po³udniowe",  0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tajlandia",                        0,0,0 },
+{ IDX_2C('t','j'),        "Tad¿ykistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunezja",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Wschodni Timor",                   0,0,0 },
+{ IDX_2C('t','r'),        "Turcja",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trynidad i Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Tajwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Wielka Brytania",                  0,0,0 },
+{ IDX_2C('u','m'),        "Mniejsze Wyspy USA",               0,0,0 },
+{ IDX_2C('u','s'),        "Stany Zjednoczone",                0,0,0 },
+{ IDX_2C('u','y'),        "Urugwaj",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Watykan",                          0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent i Grenadyny",        0,0,0 },
+{ IDX_2C('v','e'),        "Wenezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Brytyjskie Wyspy Dziewicze",       0,0,0 },
+{ IDX_2C('v','i'),        "Wyspy Dziewicze (USA)",            0,0,0 },
+{ IDX_2C('v','n'),        "Wietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wyspy Wallis i Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugos³awia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Republika Po³udniowej Afryki",     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.portuguese b/lang/webalizer_lang.portuguese
new file mode 100644 (file)
index 0000000..3d3d46f
--- /dev/null
@@ -0,0 +1,639 @@
+/*
+   webalizer_lang.portuguese
+
+   Webalizer V2.0x Language Support file for Portuguese.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   12-Feb-1999 Translated to Portuguese by Michele America
+               (micheleamerica@mail.geocities.com)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   08-Mar-2002 Updated by Nuno Loureiro (nuno@eth.pt)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Portuguese";
+char *langcode  = "pt";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "registos";
+char *msg_addresses="enderecos";
+char *msg_ignored = "ignorados";
+char *msg_bad     = "maus";
+char *msg_in      = "em";
+char *msg_seconds = "segundos";
+
+/* progress and setup error messages */
+char *msg_log_err = "Erro: Nao foi possivel abrir ficheiro de registo";
+char *msg_log_use = "A usar registo";
+char *msg_dir_err = "Erro: Nao foi possivel mudar directorio para";
+char *msg_dir_use = "A gerar saida no";
+char *msg_cur_dir = "directorio corrente";
+char *msg_hostname= "Hostname para relatorios e'";
+char *msg_ign_hist= "A ignorar historico anterior...";
+char *msg_no_hist = "Ficheiro de historico nao encontrado...";
+char *msg_get_hist= "A ler ficheiro de historico...";
+char *msg_put_hist= "A guardar informacao no historico...";
+char *msg_hist_err= "Erro: Impossivel escrever no ficheiro de historico";
+char *msg_bad_hist= "Erro: A ignorar registo invalido no ficheiro de historico";
+char *msg_bad_conf= "Erro: Impossivel abrir ficheiro de configuracao";
+char *msg_bad_key = "Aviso: Parametro invalido";
+char *msg_bad_date= "Erro: A ignorar registo (data invalida)";
+char *msg_ign_nscp= "A ignorar registo com cabecalho do Netscape";
+char *msg_bad_rec = "A ignorar registo invalido";
+char *msg_no_vrec = "Nao foram encontrado registo validos!";
+char *msg_gen_rpt = "A gerar relatorio de";
+char *msg_gen_sum = "A gerar relatorio sumario";
+char *msg_get_data= "A ler dados da execucao anterior...";
+char *msg_put_data= "A guardar dados da execucao currente...";
+char *msg_no_data = "Dados da execucao anterior nao encontrados...";
+/*char *msg_bad_data= "Registo de dados invalido";*/
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Erro: Impossivel guardar dados da execucao currente";
+char *msg_dup_data= "Aviso: Encontrados dados possivelmente duplicados";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Impossivel alocar memoria suficiente, Top Sites desligado!";
+char *msg_nomem_tr= "Impossivel alocar memoria suficiente, Top Referrers desligado!";
+char *msg_nomem_tu= "Impossivel alocar memoria suficiente, Top URLs desligado!";
+char *msg_nomem_tc= "Impossivel alocar memoria suficiente, Top Countries desligado!";
+char *msg_nomem_ta= "Impossivel alocar memoria suficiente, Top User Agents desligado!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Erro ao adicionar host (diario), a ignorar";
+char *msg_nomem_mh= "Erro ao adicionar host (mensal), a ignorar";
+char *msg_nomem_u = "Erro ao adicionar URL, a ignorar";
+char *msg_nomem_a = "Erro ao adicionar User Agent, a ignorar";
+char *msg_nomem_r = "Erro ao adicionar Referrer, a ignorar";
+char *msg_nomem_sc= "Error adding Search String node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Erro: A ignorar registo grande de mais";
+char *msg_big_host= "Aviso: A truncar hostname grande de mais";
+char *msg_big_date= "Aviso: A truncar campo de data grande de mais";
+char *msg_big_req = "Aviso: A truncar campo de pedido grande de mais";
+char *msg_big_ref = "Aviso: A truncar campo de referrer grande de mais";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Aviso: Cadeia de caracteres excede tamanho de armazenamento";
+
+/* misc errors */
+char *msg_no_open = "Erro: Impossivel abrir ficheiro";
+
+/* Help display... */
+char *h_usage1 = "Utilizacao";
+char *h_usage2 = "[opcoes] [ficheiro de log]";
+char *h_msg[]= {
+         "-h        = mostra esta mensagem de ajuda"       ,
+         "-V        = mostra info sobre versao"            ,
+         "-v        = be verbose"                          ,
+         "-d        = mostra info adicional para debug"    ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = fold sequence errors"                ,
+         "-i        = ignorar ficheiro de historico"       ,
+         "-p        = preservar estado (incremental)"      ,
+         "-b        = ignorar estado (incremental)"        ,
+         "-q        = suprimir mensagens de informacao"    ,
+         "-Q        = suprimir _TODAS_ as mensagens"       ,
+         "-Y        = supress country graph"               ,
+         "-G        = suprimir grafico por horas"          ,
+         "-H        = suprimir estatisticas por horas"     ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timeout value (seconds)"       ,
+         "-T        = mostra informacao de timing"         ,
+         "-c fich   = usar ficheiro de configuracao 'fich'",
+         "-n nome   = usar hostname 'nome'"                ,
+         "-o dir    = directorio de output a usar"          ,
+         "-t nome   = titulo do relatorio"                 ,
+         "-a nome   = esconder user agent 'nome'"          ,
+         "-r nome   = esconder referrer 'nome'"            ,
+         "-s nome   = esconder site 'nome'"                ,
+         "-u nome   = esconder URL 'nome'"                 ,
+         "-x nome   = Use filename extension 'name'"       ,
+         "-O nome   = Omit page 'name'"                    ,
+         "-P nome   = Page type extension 'name'"          ,
+         "-I nome   = alias para Index 'nome'"             ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Mostrar num top agents"              ,
+         "-C num    = Mostrar num top countries"           ,
+         "-R num    = Mostrar num top referrers"           ,
+         "-S num    = Mostrar num top sites"               ,
+         "-U num    = Mostrar num top URLs"                ,
+         "-e num    = Mostrar num top Entry Pages"         ,
+         "-E num    = Mostrar num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D nome   = Use DNS Cache file 'nome'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J nome   = Use GeoDB database 'nome'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nome   = Use GeoIP database 'nome'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Sumário do Periodo";
+char *msg_hhdr_gt = "Gerado em";
+
+/* main index strings */
+char *msg_main_us = "Sumário de utilização de";
+/* char *msg_main_per= "Últimos 12 Meses"; */
+char *msg_main_per= "Sumário por Mês";
+char *msg_main_sum= "Sumário por Mês";
+char *msg_main_da = "Média Diária";
+char *msg_main_mt = "Totais Mensais";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Uso diário de";
+char *msg_hmth_hu = "Uso por hora de";
+
+/* table header strings */
+char *msg_h_by    = "By";
+char *msg_h_avg   = "Med";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totais";
+char *msg_h_day   = "Dia";
+char *msg_h_mth   = "Mês";
+char *msg_h_hour  = "Hora";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visitas";
+char *msg_h_files = "Ficheiros";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Hostname";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "User Agent";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "Pais";
+char *msg_h_search= "String de Pesquisa";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Estatística Diária";
+char *msg_hlnk_hs = "Estatística por Hora";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Sites";
+char *msg_hlnk_a  = "Agents";
+char *msg_hlnk_c  = "Paises";
+char *msg_hlnk_r  = "Referrers";
+char *msg_hlnk_en = "Entrada";
+char *msg_hlnk_ex = "Saida";
+char *msg_hlnk_sr = "Pesquisa";
+char *msg_hlnk_i  = "Utilizadores";
+
+/* monthly total table */
+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_us = "Total de Sites Únicos";
+char *msg_mtot_ur = "Total de Referrers Únicos";
+char *msg_mtot_ua = "Total de User Agents Únicos";
+char *msg_mtot_uu = "Total de URLs Únicos";
+char *msg_mtot_ui = "Total de Usernames unicos";
+char *msg_mtot_mhd= "Hits por Dia";
+char *msg_mtot_mhh= "Hits por Hora";
+char *msg_mtot_mfd= "Files por Dia";
+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_rc = "Hits por Código de Resposta";
+
+/* daily total table */
+char *msg_dtot_ds = "Estatística Diária de";
+
+/* hourly total table */
+char *msg_htot_hs = "Estatística por Hora de";
+
+/* country pie chart */
+char *msg_ctry_use= "Utilização por País de";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "de";
+char *msg_top_s   = "Sites";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "Referrers";
+char *msg_top_a   = "User Agents";
+char *msg_top_c   = "Paises";
+char *msg_top_en  = "Total Páginas de Entrada";
+char *msg_top_ex  = "Total Páginas de Saída";
+char *msg_top_sr  = "Total Strings de Pesquisa";
+char *msg_top_i   = "Total Usernames";
+char *msg_v_sites = "Ver todos os Sites";
+char *msg_v_urls  = "Ver todos os URLs";
+char *msg_v_refs  = "Ver todos os Referrers";
+char *msg_v_agents= "Ver todos os  User Agents";
+char *msg_v_search= "Ver todas as Strings de Pesquisa";
+char *msg_v_users = "Ver todos os Usernames";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Fev", "Mar",
+                    "Abr", "Mai", "Jun",
+                    "Jul", "Ago", "Set",
+                    "Out", "Nov", "Dez"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Janeiro",  "Fevereiro", "Março",   "Abril",
+                    "Maio",      "Junho",     "Julho",    "Agosto",
+                    "Setembro","Outubro",  "Novembro","Dezembro"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                        0 },
+         { "Code 100 - Continuar",                           0 },
+         { "Code 101 - Mudança de Protocolos",               0 },
+         { "Code 200 - OK",                                  0 },
+         { "Code 201 - Criado",                              0 },
+         { "Code 202 - Aceite",                              0 },
+         { "Code 203 - Informação não Autoritária",          0 },
+         { "Code 204 - Sem Conteúdo",                        0 },
+         { "Code 205 - Reinicializa Conteúdo",               0 },
+         { "Code 206 - Conteúdo Parcial",                    0 },
+         { "Code 300 - Várias Opções",                       0 },
+         { "Code 301 - Mudança Permanente",                  0 },
+         { "Code 302 - Found",                               0 },
+         { "Code 303 - Ver Outro",                           0 },
+         { "Code 304 - Não Modificado",                      0 },
+         { "Code 305 - Use Proxy",                           0 },
+         { "Code 307 - Mudança Temporária",                  0 },
+         { "Code 400 - Pedido Inválido",                     0 },
+         { "Code 401 - Não Autorizado",                      0 },
+         { "Code 402 - Pagamento Necessário",                0 },
+         { "Code 403 - Proibido",                            0 },
+         { "Code 404 - Não Encontrado",                      0 },
+         { "Code 405 - Metodo não Permitido",                0 },
+         { "Code 406 - Não Aceitável",                       0 },
+         { "Code 407 - Necessária Autenticação pelo Proxy",  0 },
+         { "Code 408 - Timeout do Pedido",                   0 },
+         { "Code 409 - Conflito",                            0 },
+         { "Code 410 - Desapareceu",                         0 },
+         { "Code 411 - Necessário Tamanho",                  0 },
+         { "Code 412 - Precondição Falhou",                  0 },
+         { "Code 413 - Entidade de Pedido muito Grande",     0 },
+         { "Code 414 - Entidade de URI muito Granda",        0 },
+         { "Code 415 - Tipo de Media Não Suportado",         0 },
+         { "Code 416 - Requested Range Not Satisfiable",     0 },
+         { "Code 417 - Expectation Failed",                  0 },
+         { "Code 500 - Erro Interno do Servidor",            0 },
+         { "Code 501 - Não Implementado",                    0 },
+         { "Code 502 - Gateway Errado",                      0 },
+         { "Code 503 - Serviço Não Disponivel",              0 },
+         { "Code 504 - Timeout do Gateway",                  0 },
+         { "Code 505 - Versão de HTTP Não Suportada",        0 } };
+
+char *msg_title   = "Estatísticas de Utilização de";
+char *msg_h_other = "Outros";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.portuguese_brazil b/lang/webalizer_lang.portuguese_brazil
new file mode 100644 (file)
index 0000000..2d6a55c
--- /dev/null
@@ -0,0 +1,640 @@
+/*
+   webalizer_lang.portuguese_brazil
+
+   Webalizer V2.0x Language Support file for Portuguese (Brazilian dialect)
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   06-Aug-1999 Translation by Arquimedes M.da Silva
+               (software.developer@mailbr.com.br)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   12-Mar-2000 Huge Correction/Translation by Fabio B. Oliva
+               (fboliva@safenetworks.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Portuguese_Brazil";
+char *langcode  = "pt-br";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "registros";
+char *msg_addresses="endereços";
+char *msg_ignored = "desprezados";
+char *msg_bad     = "ruins";
+char *msg_in      = "em";
+char *msg_seconds = "segundos";
+
+/* progress and setup error messages */
+char *msg_log_err = "Erro: Não foi possível abrir o arquivo";
+char *msg_log_use = "Usando arquivo";
+char *msg_dir_err = "Erro: Não possível alterar o diretório para";
+char *msg_dir_use = "Criando resultado em";
+char *msg_cur_dir = "Diretório corrente";
+char *msg_hostname= "Nome do servidor para os relatórios é";
+char *msg_ign_hist= "Ignorando registro inválido no arquivo...";
+char *msg_no_hist = "Arquivo de histórico não encontrado...";
+char *msg_get_hist= "Lendo arquivo de histórico...";
+char *msg_put_hist= "Salvando histórico...";
+char *msg_hist_err= "Erro: Não foi possível escrever o arquivo de histórico";
+char *msg_bad_hist= "Erro: Desprezando registro de histórico inválido";
+char *msg_bad_conf= "Erro: Não foi possível abrir arquivo de configuração";
+char *msg_bad_key = "Atenção: palavra chave inválida";
+char *msg_bad_date= "Erro: Desprezando registro (Data inválida)";
+char *msg_ign_nscp= "Ignorando registro cabeçalho Netscape";
+char *msg_bad_rec = "Ignorando registro com problema";
+char *msg_no_vrec = "Registros válidos não encontrados!";
+char *msg_gen_rpt = "Gerando relatório para";
+char *msg_gen_sum = "Gerando relatório de sumário";
+char *msg_get_data= "Lendo os dados da execução anterior...";
+char *msg_put_data= "Salvando os dados da execução atual...";
+char *msg_no_data = "Dados da execução anterior não encontrados...";
+/*char *msg_bad_data= "Registro de dados inválido";*/
+char *msg_bad_data= "Erro: Não foi possível recuperar os dados";
+char *msg_data_err= "Erro: Não foi possível salvar os dados da execução atual";
+char *msg_dup_data= "Atenção: Possível duplicação de dados encontrada";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Arquivo Cache não encontrado. Abortando...";
+char *msg_dns_nodb= "Erro: Não foi possível abrir o arquivo cache do DNS";
+char *msg_dns_nolk= "Erro: Não foi possível travar (lock) o arquivo cache do DNS";
+char *msg_dns_usec= "Usando o arquivo cache do DNS";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "Nada para processar";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Não foi possível alocar memória, Lista Endereços desabilitada!"; 
+char *msg_nomem_tr= "Não foi possível alocar memória, Lista Referências desabilitada!";
+char *msg_nomem_tu= "Não foi possível alocar memória, Lista URLs disabilitado!";
+char *msg_nomem_tc= "Não foi possível alocar memória, Lista Países desabilitada!";
+char *msg_nomem_ta= "Não foi possível alocar memória, Lista Clientes desabilitada!";
+char *msg_nomem_tsr="Não foi possível alocar memória,,Lista Strings de busca desabilitada!";
+char *msg_nomem_ti= "Não foi possível alocar memória suficiente, Lista de usuários desabilitada!";
+char *msg_nomem_dh= "Erro ao adicionar nó de servidor (diário), desprezado"; 
+char *msg_nomem_mh= "Erro ao adicionar nó de servidor (mensal), desprezado";
+char *msg_nomem_u = "Erro ao adicionar nó de URL, desprezado";
+char *msg_nomem_a = "Erro ao adicionar nó de programa cliente, desprezado";
+char *msg_nomem_r = "Erro ao adicionar nó de Referência, desprezado";
+char *msg_nomem_sc= "Erro ao adicionar nó de String de busca, desprezado";
+char *msg_nomem_i = "Erro ao acicionar nó de usuário, desprezando...";
+
+/* log record errors */
+char *msg_big_rec = "Erro: Ignorando registro muito longo";
+char *msg_big_host= "Atenção: Truncando nome de servidor muito longo";
+char *msg_big_date= "Atenção: Truncando campo data muito longo";
+char *msg_big_req = "Atenção: Truncando campo de solicitação muito longo";
+char *msg_big_ref = "Atenção: Truncando campo de referência muito longo";
+char *msg_big_user= "Warning: truncando nome de usuário muito longo";
+char *msg_big_one = "Atenção: Texto excede a área de armazenamento disponível";
+
+/* misc errors */
+char *msg_no_open = "Erro: Não foi possível abrir arquivo";
+
+/* Help display... */
+char *h_usage1 = "Forma de utilização";
+char *h_usage2 = "[opções] [arquivo de histórico]";
+char *h_msg[]= {
+         "-h        = imprime esta mensagem de ajuda"                ,
+         "-V        = imprime a versão"                              ,
+         "-v        = be verbose"                                    ,
+         "-d        = imprime informação adicional de depuração"     ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)"    ,
+         "-f        = cruzar sequência de erros"                     ,
+         "-i        = ignorar arquivo de histórico"                  ,
+         "-p        = recuperar processamento anterior (incremento)" ,
+         "-b        = ignorar incremento"                            ,
+         "-q        = suprimir mensagens de informação"              ,
+         "-Q        = suprimir TODAS as mensagens"                   ,
+         "-Y        = suprimir gráfico sobre os Países"              ,
+         "-G        = suprimir gráfico sobre o horário"              ,
+         "-H        = suprimir estatística sobre horário"            ,
+         "-L        = suprimir legendas sobre as cores do gráfico"   ,
+         "-l num    = usar <num> linhas de background no gráfico"    ,
+         "-m num    = Valor de timeout para visita (seconds)"        ,
+         "-T        = imprime informação sobre horário"              ,
+         "-c arq    = usar arquivo de configuração 'arq'"            ,
+         "-n nome   = nome do servidor"                              ,
+         "-o dir    = diretório de saída"                            ,
+         "-t nome   = título do relatório 'nome'"                    ,
+         "-a nome   = ocultar programa cliente 'nome'"               ,
+         "-r nome   = ocultar refêrencoa 'nome'"                     ,
+         "-s nome   = ocultar endereço 'nome'"                       ,
+         "-u nome   = ocultar URL 'nome'"                            ,
+         "-x nome   = Indica extensão para nome de arquivo 'nome'"   ,
+         "-O nome   = Omit page 'nome'"                              ,
+         "-P nome   = Indica extensão para tipo de página  'nome'"   ,
+         "-I nome   = apelido do índice 'nome'"                      ,
+         "-K n      = n months in summary table"                     ,
+         "-k n      = n months in summary graph"                     ,
+         "-A n      = imprime os n primeiros programas clientes"     ,
+         "-C n      = imprime os n primeiros países"                 ,
+         "-R n      = imprime as n primeiras referências"            ,
+         "-S n      = imprime os n primeiros endereços"              ,
+         "-U n      = imprime as n primeiras URLs"                   ,
+         "-e n      = imprime as n primeiras páginas entrada"        ,
+         "-E n      = imprime as n primeiras páginas saída"          ,
+         "-g n      = Grupos de Domínio para n níveis"               ,
+         "-X        = Ocultar sites individuais"                     ,
+         "-z dir    = Use country flags in 'dir'"                    ,
+#ifdef USE_DNS
+         "-D nome   = Usar arquivo cache de DNS 'nome'"              ,
+         "-N num    = Número de processos DNS (0=desabilitado)"      ,
+         "-j        = Enable native GeoIP lookups"                   ,
+         "-J nome   = Use GeoDB database 'nome'"                     ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nome   = Use GeoIP database 'nome'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Resumo do Período";
+char *msg_hhdr_gt = "Gerado em";
+
+/* main index strings */
+char *msg_main_us = "Resumo de utilização para";
+/* char *msg_main_per= "Últimos 12 Meses"; */
+char *msg_main_per= "Resumo Mensal";
+char *msg_main_sum= "Resumo Mensal";
+char *msg_main_da = "Média diária";
+char *msg_main_mt = "Total Mensal";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Utilização diária em";
+char *msg_hmth_hu = "Utilização por hora em";
+
+/* table header strings */
+char *msg_h_by    = "por";
+char *msg_h_avg   = "Média";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totais";
+char *msg_h_day   = "Dia";
+char *msg_h_mth   = "Mês";
+char *msg_h_hour  = "Hora";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Páginas";
+char *msg_h_visits= "Visitas";
+char *msg_h_files = "Arquivos";
+char *msg_h_sites = "Endereços";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Servidores";
+char *msg_h_url   = "URLs";
+char *msg_h_agent = "Programa cliente";
+char *msg_h_ref   = "Referência";
+char *msg_h_ctry  = "País";
+char *msg_h_search= "String de busca";
+char *msg_h_uname = "Nomes de Usuários";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Estatísticas diárias";
+char *msg_hlnk_hs = "Estatísticas por hora";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Endereço";
+char *msg_hlnk_a  = "Clientes";
+char *msg_hlnk_c  = "Países";
+char *msg_hlnk_r  = "Referências";
+char *msg_hlnk_en = "Entrada";
+char *msg_hlnk_ex = "Saída";
+char *msg_hlnk_sr = "Busca";
+char *msg_hlnk_i  = "Usuários";
+
+/* monthly total table */
+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_us = "Total de servidores";
+char *msg_mtot_ur = "Total de refer&ecirc;ncias";
+char *msg_mtot_ua = "Total de programas clientes";
+char *msg_mtot_uu = "Total de URLs";
+char *msg_mtot_ui = "Total de Nomes de Usuários";
+char *msg_mtot_mhd= "Hits por Dia";
+char *msg_mtot_mhh= "Hits por Hora";
+char *msg_mtot_mfd= "Arquivos por Dia";
+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_rc = "Hits por código de resposta";
+
+/* daily total table */
+char *msg_dtot_ds = "Estatísticas diária para";
+
+/* hourly total table */
+char *msg_htot_hs = "Estatísticas por hora para";
+
+/* country pie chart */
+char *msg_ctry_use= "Hits por país para";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Lista";
+char *msg_top_of  = "de";
+char *msg_top_s   = "Total de endereços";
+char *msg_top_u   = "Total de URLs";
+char *msg_top_r   = "Total de referências";
+char *msg_top_a   = "Total de programas clientes";
+char *msg_top_c   = "Total de países";
+char *msg_top_en  = "Total de Páginas de entrada";
+char *msg_top_ex  = "Total de Páginas de saída";
+char *msg_top_sr  = "Total de Strings de busca";
+char *msg_top_i   = "Total de nomes de usuários";
+char *msg_v_sites = "Visualizar todos sites";
+char *msg_v_urls  = "Visualizar todas URLs";
+char *msg_v_refs  = "Visualizar todas Referências";
+char *msg_v_agents= "Visualizar todos Agentes de usuário";
+char *msg_v_search= "Visualizar todas strings de procura";
+char *msg_v_users = "Visualizar todos nomes de usuários";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Fev", "Mar",
+                    "Abr", "Mai", "Jun",
+                    "Jul", "Ago", "Set",
+                    "Out", "Nov", "Dez"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Janeiro",  "Fevereiro", "Março",     "Abril",
+                    "Maio",     "Junho",     "Julho",     "Agosto",
+                    "Setembro", "Outubro",   "Novembro",  "Dezembro"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Código de resposta indefinido",             0 },
+         { "100 - Continua",                            0 },
+         { "101 - Trocando de protocolo",               0 },
+         { "200 - OK",                                  0 },
+         { "201 - Criado",                              0 },
+         { "202 - Aceito",                              0 },
+         { "203 - Informação não autorizada",           0 },
+         { "204 - Não existe conteúdo",                 0 },
+         { "205 - Conteúdo renovado",                   0 },
+         { "206 - Conteúdo parcial",                    0 },
+         { "300 - Múltiplas escolhas",                  0 },
+         { "301 - Movido permanentemente",              0 },
+         { "302 - Encontrado",                          0 },
+         { "303 - Ver outros",                          0 },
+         { "304 - Não modificado",                      0 },
+         { "305 - Utilizar Proxy",                      0 },
+         { "307 - Movido temporariamente",              0 },
+         { "400 - Requisição errada",                   0 },
+         { "401 - Acesso negado",                       0 },
+         { "402 - Requer pagamento",                    0 },
+         { "403 - Proibido",                            0 },
+         { "404 - Não encontrada",                      0 },
+         { "405 - Método não permitido",                0 },
+         { "406 - Não aceitável",                       0 },
+         { "407 - Autenticação de Proxy requerida",     0 },
+         { "408 - Fim do tempo de espera",              0 },
+         { "409 - Conflito",                            0 },
+         { "410 - Abadonado",                           0 },
+         { "411 - Tamanho requerido",                   0 },
+         { "412 - Falta condição prévia",               0 },
+         { "413 - Entidade de requisição muito longa",  0 },
+         { "414 - URI de requisicção muito longa",      0 },
+         { "415 - Meio não suportado",                  0 },
+         { "416 - Limite solicitado não satisfeito",    0 },
+         { "417 - Expectation Failed",                  0 },
+         { "500 - Erro interno no servidor",            0 },
+         { "501 - Não implementado",                    0 },
+         { "502 - Erro no Gateway",                     0 },
+         { "503 - Serviço indisponível",                0 },
+         { "504 - Fim do tempo de espera para Gateway", 0 },
+         { "505 - HTTP Versão não suportada",           0 } };
+
+char *msg_title   = "Estatísticas de utilização para";
+char *msg_h_other = "Outros";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Não Resolvido/Desconhecido",       0,0,0 },
+{ IDX_3C('c','o','m'),    "Comercial (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Educacional (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "EUA - Governo (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "Internacional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "EUA - Militar (mil)",              0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Organização sem fins lucrativos (org)", 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Estilo antigo - Arpanet (arpa)",   0,0,0 },
+{ IDX_4C('n','a','t','o'),"OTAN (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emirados Árabes Unidos",           0,0,0 },
+{ IDX_2C('a','f'),        "Afeganistão",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armênia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Holanda - Antilha",                0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijão",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia e Herzegovina",             0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgica",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolívia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Butão",                            0,0,0 },
+{ IDX_2C('b','v'),        "Ilha Bouvet",                      0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canadá",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "República Central Africana",       0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Suiça",                            0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Costa do Marfim)",  0,0,0 },
+{ IDX_2C('c','k'),        "Ilhas Cook",                       0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camarões",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colômbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cabo Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Ilhas Natal",                      0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "República Tcheca",                 0,0,0 },
+{ IDX_2C('d','e'),        "Alemanha",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Dinamarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "República Dominicana",             0,0,0 },
+{ IDX_2C('d','z'),        "Argélia",                          0,0,0 },
+{ IDX_2C('e','c'),        "Equador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estônia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egito",                            0,0,0 },
+{ IDX_2C('e','h'),        "Sahara do Oeste",                  0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Espanha",                          0,0,0 },
+{ IDX_2C('e','t'),        "Etiópia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlândia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Ilhas Falkland (Malvinas)",        0,0,0 },
+{ IDX_2C('f','m'),        "Micronésia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "França",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabão",                            0,0,0 },
+{ IDX_2C('g','b'),        "Grã Bretanha (Reino Unido)",       0,0,0 },
+{ IDX_2C('g','d'),        "Granada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Geórgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guiana Francesa",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Gana",                             0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guiné",                            0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupe" ,                       0,0,0 },
+{ IDX_2C('g','q'),        "Guiné Equatorial",                 0,0,0 },
+{ IDX_2C('g','r'),        "Grécia",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Geórgia e S. Ilhas Sandwich.",  0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guiana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Ilhas Heard e McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croácia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonésia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Índia",                            0,0,0 },
+{ IDX_2C('i','o'),        "Território Oceânico Anglo-Indiano",0,0,0 },
+{ IDX_2C('i','q'),        "Iraque",                           0,0,0 },
+{ IDX_2C('i','r'),        "Irã",                              0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Itália",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordânia",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japão",                            0,0,0 },
+{ IDX_2C('k','e'),        "Quênia",                           0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Coréia (Norte)",                   0,0,0 },
+{ IDX_2C('k','r'),        "Coréia (Sul)",                     0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Ilhas Cayman",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazaquistão",                      0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Líbano",                           0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Libéria",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituânia",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburgo",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Líbia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marrocos",                         0,0,0 },
+{ IDX_2C('m','c'),        "Mônaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Ilhas Marshall",                   0,0,0 },
+{ IDX_2C('m','k'),        "Macedônia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongólia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Ilhas Mariana do Norte",           0,0,0 },
+{ IDX_2C('m','q'),        "Martiníca",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritânia",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "México",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malasia",                          0,0,0 },
+{ IDX_2C('m','z'),        "Moçambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namíbia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nova Caledônia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Nigéria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigéria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicarágua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holanda",                          0,0,0 },
+{ IDX_2C('n','o'),        "Noruega",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nova Zelândia",                    0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panamá",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinésia Francesa",               0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nova Guiné",                 0,0,0 },
+{ IDX_2C('p','h'),        "Filipinas",                        0,0,0 },
+{ IDX_2C('p','k'),        "Paquistão",                        0,0,0 },
+{ IDX_2C('p','l'),        "Polônia",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre e Miquelon",            0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Pprto Rico",                       0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguai",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunião",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romênia",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Federação Russa",                  0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arábia Saudita",                   0,0,0 },
+{ IDX_2C('s','b'),        "Ilhas Salomão",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudão",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suécia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapura",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Eslovênia",                        0,0,0 },
+{ IDX_2C('s','j'),        "Ilhas Svalbard e Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "Repíblica Eslovaca",               0,0,0 },
+{ IDX_2C('s','l'),        "Serra Leoa",                       0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somália",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "São Tomé e Príncipe",              0,0,0 },
+{ IDX_2C('s','u'),        "URSS (Antiga)",                    0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Ilhas Turcas e Caicos",            0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Territórios Franceses do Sul",     0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailândia",                        0,0,0 },
+{ IDX_2C('t','j'),        "Tajaquistão",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunísia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turquia",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trindade e Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzânia",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucrânia",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Reino Unido",                      0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "Estados Unidos da América",        0,0,0 },
+{ IDX_2C('u','y'),        "Uruguai",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbequistão",                      0,0,0 },
+{ IDX_2C('v','a'),        "Estado/Cidade do Vaticano (Santa Sé)", 0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent e the Grenadines",   0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Ilhas Virgens (Inglesas)",         0,0,0 },
+{ IDX_2C('v','i'),        "Ilhas Virgens (E.U.A.)",           0,0,0 },
+{ IDX_2C('v','n'),        "Vietnã",                           0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Ilhas Wallis e Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Iêmen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Iuguslávia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Africa do Sul",                    0,0,0 },
+{ IDX_2C('z','m'),        "Zâmbia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabue",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.romanian b/lang/webalizer_lang.romanian
new file mode 100644 (file)
index 0000000..db88f4a
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+   webalizer_lang.romanian
+
+   Webalizer V2.0x Language Support file for Romanian.
+   17-May-1999 Translation by Mircea Ilie (mirceax@tep.ro)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   04-Feb-2000 Level 1.3 translation by Iulian Radu (iulian_r@starnets.ro)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   16-Jan-2001 Level 2.0 translation by Mircea Ilie (mirceax@tep.ro)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.french for french).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "in romana";
+char *langcode  = "ro";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "inregistrari";
+char *msg_addresses="adrese";
+char *msg_ignored = "ignorat";
+char *msg_bad     = "gresit";
+char *msg_in      = "in";
+char *msg_seconds = "secunde";
+
+/* progress and setup error messages */
+char *msg_log_err = "Eroare: Nu pot deschide fisierul jurnal";
+char *msg_log_use = "Accesez fisierul jurnal";
+char *msg_dir_err = "Eroare: Nu pot sa ajung in directorul";
+char *msg_dir_use = "Rezultatul este salvat in";
+char *msg_cur_dir = "directorul curent";
+char *msg_hostname= "Hostname-ul pentru rapoarte este";
+char *msg_ign_hist= "Ignor fisierul de istoric precedent...";
+char *msg_no_hist = "Nu pot gasi fisierul de istoric...";
+char *msg_get_hist= "Citesc fisierul de istoric...";
+char *msg_put_hist= "Salvez informatiile in fisierul de istoric...";
+char *msg_hist_err= "Eroare: Nu pot sa scriu in fisierul de istoric";
+char *msg_bad_hist= "Eroare: Ignor inregistrarile invalide din fisierul de istoric";
+char *msg_bad_conf= "Eroare: Nu pot deschide fisierul de configurare";
+char *msg_bad_key = "Avertisment: Cuvint cheie invalid";
+char *msg_bad_date= "Eroare: Sar inregistrarea (date incorecte)";
+char *msg_ign_nscp= "Sar inregistrarea antetului Netscape";
+char *msg_bad_rec = "Sar o inregistrare gresita";
+char *msg_no_vrec = "Nu am gasit nici o inregsitare corecta!";
+char *msg_gen_rpt = "Generez un raport pentru";
+char *msg_gen_sum = "Generez cuprinsul raportului";
+char *msg_get_data= "Citesc datele rulate inainte...";
+char *msg_put_data= "Salvez datele rulate acum...";
+char *msg_no_data = "Datele rulate inainte nu au fost gasite...";
+char *msg_bad_data= "Eroare: Nu pot reface datele rulate";
+char *msg_data_err= "Eroare: Nu pot salva datele rulate acum";
+char *msg_dup_data= "Avertisment: S-ar putea sa fi gasit date duplicate";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nu s-a specificat nici un fisier cache, renunt...";
+char *msg_dns_nodb= "Eroare: Nu pot deschide fisierul cache al DNS";
+char *msg_dns_nolk= "Eroare: Nu pot bloca fisierul cache al DNS";
+char *msg_dns_usec= "Folosesc fisierul cache al DNS";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "Nimic de prelucrat";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nu pot aloca suficienta memorie, dezactivez Top Situri!";
+char *msg_nomem_tr= "Nu pot aloca suficienta memorie, dezactivez Top Pagini referente!";
+char *msg_nomem_tu= "Nu pot aloca suficienta memorie, dezactivez Top URL-uri!";
+char *msg_nomem_tc= "Nu pot aloca suficienta memorie, dezactivez Top Tari!";
+char *msg_nomem_ta= "Nu pot aloca suficienta memorie, dezactivez Top Navigatoare vizitatori!";
+char *msg_nomem_tsr="Nu pot aloca suficienta memorie, dezactivez Top Siruri cautate!";
+char *msg_nomem_ti= "Nu pot aloca suficienta memorie, dezactivez Top Utilizatori!";
+char *msg_nomem_dh= "Eroare adaugare nod host (zilnic), sar";
+char *msg_nomem_mh= "Eroare adaugare nod host (lunar), sar";
+char *msg_nomem_u = "Eroare adaugare nod URL, sar";
+char *msg_nomem_a = "Eroare adaugare nod Navigator client, sar";
+char *msg_nomem_r = "Eroare adaugare nod de Pagina referenta, sar";
+char *msg_nomem_sc= "Eroare adaugare nod Sir de cautare, sar";
+char *msg_nomem_i = "Eroare adaugare nod Utilizatori, sar";
+
+/* log record errors */
+char *msg_big_rec = "Eroare: Sar o inregistrare de jurnal supradimensionata";
+char *msg_big_host= "Avertisment: Trunchiez hostname supradimensionat";
+char *msg_big_date= "Avertisment: Trunchiez cimpul data supradimensionat";
+char *msg_big_req = "Avertisment: Trunchiez cimpul cerere supradimensionat";
+char *msg_big_ref = "Avertisment: Trunchiez cimpul paginii referente supradimensionat";
+char *msg_big_user= "Avertisment: Trunchiez cimpul utilizator supradimensionat";
+char *msg_big_one = "Avertisment: Sirul depaseste dimensiunea spatiului de stocare";
+
+/* misc errors */
+char *msg_no_open = "Eroare: Nu pot deschide fisierul";
+
+/* Help display... */
+char *h_usage1 = "Utilizare";
+char *h_usage2 = "[optiuni] [fisier jurnal]";
+char *h_msg[]= {
+         "-h        = afiseaza acest mesaj de ajutor"          ,
+         "-V        = afiseaza informatii despre versiune"     ,
+         "-v        = be verbose"                               ,
+         "-d        = afiseaza informatii de depanare suplimentare" ,
+         "-F type   = Tip jurnal.  type= (clf | ftp | squid | w3c)" ,
+         "-f        = eroare la secventa de fold"              ,
+         "-i        = ignora fisierul de istoric"              ,
+         "-p        = pastreaza starea (incremental)"          ,
+         "-b        = ignora starea (incremental)"              ,
+         "-q        = elimina mesajele de informare"           ,
+         "-Q        = elimina _TOATE_ mesajele"                ,
+         "-Y        = elimina graficul tarilor"                ,
+         "-G        = elimina graficul orelor"                 ,
+         "-H        = elimina starea pe ore"                   ,
+         "-L        = elimina legenda graficelor color"        ,
+         "-l num    = foloseste linii numerotate pe fundalul graficelor" ,
+         "-m num    = valoarea timeout-ului pentru vizite (secunde)" ,
+         "-T        = afiseaza informatiile despre temporizare" ,
+         "-c file   = foloseste fisierul de configurare 'file'" ,
+         "-n name   = hostname-ul de folosit"                  ,
+         "-o dir    = directorul folosit pentru rezultate"     ,
+         "-t name   = titlul raportului va fi 'name'"          ,
+         "-a name   = ascunde navigatoarele clientilor de tipul 'name'" ,
+         "-r name   = ascunde pagina referenta cu numele 'name'" ,
+         "-s name   = ascunde situl 'name'"                    ,
+         "-u name   = ascunde URL-ul 'name'"                           ,
+         "-x name   = foloseste extensia de nume fisier 'name'" ,
+         "-O name   = Omit page 'name'"                         ,
+         "-P name   = extensia tipului de pagina va fi 'name'"  ,
+         "-I name   = aliasul index-ului va fi 'name'"          ,
+         "-K num    = num months in summary table"              ,
+         "-k num    = num months in summary graph"              ,
+         "-A num    = afiseaza numeric topul navigatoarelor clientilor" ,
+         "-C num    = afiseaza numeric topul tarilor"           ,
+         "-R num    = afiseaza numeric topul referentilor"      ,
+         "-S num    = afiseaza numeric topul siturilor"       ,
+         "-U num    = afiseaza numeric topul URL-urilor"        ,
+         "-e num    = afiseaza numeric topul Paginilor de intrare",
+         "-E num    = afiseaza numeric topul Paginilor de iesire",
+         "-X        = Ascunde siturile individuale"                    ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Foloseste fisierul cache DNS 'name'"           ,
+         "-N num    = Numarul de procese DNS (0=dezactivat)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoIP database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Perioada analizata";
+char *msg_hhdr_gt = "Generat in";
+
+/* main index strings */
+char *msg_main_us = "Sumarul utilizarii lui";
+/* char *msg_main_per= "ultimele 12 luni"; */
+char *msg_main_per= "Sumarul pe luna";
+char *msg_main_sum= "Sumarul pe luna";
+char *msg_main_da = "Media zilnica";
+char *msg_main_mt = "Totaluri lunare";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Utilizarea zilnica pe luna";
+char *msg_hmth_hu = "Utilizarea orara pe luna";
+
+/* table header strings */
+char *msg_h_by    = "dupa";
+char *msg_h_avg   = "Medie";
+char *msg_h_max   = "Maxim";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totaluri";
+char *msg_h_day   = "Zi";
+char *msg_h_mth   = "Luna";
+char *msg_h_hour  = "Ora";
+char *msg_h_hits  = "Accesari";
+char *msg_h_pages = "Pagini";
+char *msg_h_visits= "Vizite";
+char *msg_h_files = "Fisiere";
+char *msg_h_sites = "Situri";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Nume";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Navigator";
+char *msg_h_ref   = "Pagina referenta";
+char *msg_h_ctry  = "Tara";
+char *msg_h_search= "Sir de cautare";
+char *msg_h_uname = "Utilizator";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistici zilnice";
+char *msg_hlnk_hs = "Statistici orare";
+char *msg_hlnk_u  = "URL-uri";
+char *msg_hlnk_s  = "Situri";
+char *msg_hlnk_a  = "Navigator";
+char *msg_hlnk_c  = "Tari";
+char *msg_hlnk_r  = "Pagini referente";
+char *msg_hlnk_en = "Intrari";
+char *msg_hlnk_ex = "Iesiri";
+char *msg_hlnk_sr = "Cautare";
+char *msg_hlnk_i  = "Utilizatori";
+
+/* monthly total table */
+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_us = "Total situri unice";
+char *msg_mtot_ur = "Total pagini referente unice";
+char *msg_mtot_ua = "Total navigatoare";
+char *msg_mtot_uu = "Total URL-uri unice";
+char *msg_mtot_ui = "Total Utilizatori unici";
+char *msg_mtot_mhd= "Vizitari pe zi";
+char *msg_mtot_mhh= "Vizitari pe ora";
+char *msg_mtot_mfd= "Fisiere pe zi";
+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_rc = "Accesari dupa codul de raspuns";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistici zilnice pe luna";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistici orare pe luna";
+
+/* country pie chart */
+char *msg_ctry_use= "Utilizarea dupa tara pe luna";
+
+/* top tables */
+/* Formatted as "Topul xxx din xxx total ceva" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "din";
+char *msg_top_s   = "al Siturilor";
+char *msg_top_u   = "al URL-urilor";
+char *msg_top_r   = "al Paginilor referente";
+char *msg_top_a   = "al Navigatoarelor";
+char *msg_top_c   = "al Tarilor";
+char *msg_top_en  = "total Pagini de intrare";
+char *msg_top_ex  = "total Pagini de iesire";
+char *msg_top_sr  = "total Siruri de cautare";
+char *msg_top_i   = "Total Utilizatori";
+char *msg_v_sites = "Vizualizarea tuturor siturilor";
+char *msg_v_urls  = "Vizualizarea tuturor URL-urilor";
+char *msg_v_refs  = "Vizualizarea tuturor paginilor referente";
+char *msg_v_agents= "Vizualizarea tuturor navigatoarelor";
+char *msg_v_search= "Vizualizarea tuturor cuvintelor cheie";
+char *msg_v_users = "Vizualizarea tuturor utiltizatorilor";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Ian", "Feb", "Mar",
+                    "Apr", "Mai", "Iun",
+                    "Iul", "Aug", "Sep",
+                    "Oct", "Noi", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Ianuarie",  "Februarie", "Martie",   "Aprilie",
+                    "Mai",       "Iunie",     "Iulie",    "August",
+                    "Septembrie","Octombrie", "Noiembrie","Decembrie"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Cod de raspuns nedefinit",                  0 },
+         { "Cod 100 - Continua",                        0 },
+         { "Cod 101 - Schimb de protocol",              0 },
+         { "Cod 200 - OK",                              0 },
+         { "Cod 201 - Creat",                           0 },
+         { "Cod 202 - Aceptat",                         0 },
+         { "Cod 203 - Informatie fara autoritate",      0 },
+         { "Cod 204 - Fara continut",                   0 },
+         { "Cod 205 - Initializare continut",           0 },
+         { "Cod 206 - Continut partial",                0 },
+         { "Cod 300 - Optiuni multiple",                0 },
+         { "Cod 301 - Mutat permanent",                 0 },
+         { "Cod 302 - Gasit",                           0 },
+         { "Cod 303 - Vezi alt",                        0 },
+         { "Cod 304 - Nemodificat",                     0 },
+         { "Cod 305 - Foloseste proxy",                 0 },
+         { "Cod 307 - Mutat temporar",                  0 },
+         { "Cod 400 - Cerere gresita",                  0 },
+         { "Cod 401 - Neautorizat",                     0 },
+         { "Cod 402 - Plata solicitata",                0 },
+         { "Cod 403 - Interzis",                        0 },
+         { "Cod 404 - Lipsa",                           0 },
+         { "Cod 405 - Metoda nepermisa",                0 },
+         { "Cod 406 - Inacceptabil",                    0 },
+         { "Cod 407 - Autentificare prin proxy necesara", 0 },
+         { "Cod 408 - Timeout cerere",                  0 },
+         { "Cod 409 - Conflict",                        0 },
+         { "Cod 410 - Satisfacut",                      0 },
+         { "Cod 411 - Lungime solicitata",              0 },
+         { "Cod 412 - Precondite esuata",               0 },
+         { "Cod 413 - Entitatea ceruta este prea mare", 0 },
+         { "Cod 414 - URI-ul cerut prea lung",          0 },
+         { "Cod 415 - Tip de mediu necunoscut",         0 },
+         { "Cod 416 - Domeniul cererii nerealizabil",   0 },
+         { "Cod 417 - Asteptare esuata",                0 },
+         { "Cod 500 - Eroare interna a serverului",     0 },
+         { "Cod 501 - Neimplementat",                   0 },
+         { "Cod 502 - Gateway gresit",                  0 },
+         { "Cod 503 - Serviciu indisponibil",           0 },
+         { "Cod 504 - Timeout la gateway",              0 },
+         { "Cod 505 - Versiune de HTTP nesuportata",    0 } 
+       };
+
+char *msg_title   = "Statisticile de utilizare ale lui";
+char *msg_h_other = "Altele";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Nerezolvat/Necunoscut",            0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Guvernamental (gov)",           0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Militar (mil)",                 0,0,0 },
+{ IDX_3C('n','e','t'),    "Retea (net)",                      0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet stilul vechi (arpa)",      0,0,0 },
+{ IDX_4C('n','a','t','o'),"Cimp Nato (nato)",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emiratele Arabe Unite",            0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua si Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antilele olandeze",                0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa americana",                  0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaidjan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia si Hertegovina",            0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazilia",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Insula Bouvet",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorusia",                       0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Insulele Cocos (Keeling)",         0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Republica Centrafricana",          0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Elvetia",                          0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Coasta de Fildes)", 0,0,0 },
+{ IDX_2C('c','k'),        "Insulele Cook",                    0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Columbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Insulele Capului Verde",           0,0,0 },
+{ IDX_2C('c','x'),        "Insulele Christmas",               0,0,0 },
+{ IDX_2C('c','y'),        "Cipru",                            0,0,0 },
+{ IDX_2C('c','z'),        "Republica Ceha",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germania",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danemarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Republica Dominicana",             0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egipt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Occidentala",               0,0,0 },
+{ IDX_2C('e','r'),        "Eritreea",                         0,0,0 },
+{ IDX_2C('e','s'),        "Spania",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlanda",                         0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Insulele Falkland (Malvinas)",     0,0,0 },
+{ IDX_2C('f','m'),        "Micronezia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Insulele Faroe",                   0,0,0 },
+{ IDX_2C('f','r'),        "Franta",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Marea Britanie (UK)",              0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guiana Franceza",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Groenlanda",                       0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guineea",                          0,0,0 },
+{ IDX_2C('g','p'),        "Guadelupe",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guineea Ecuatoriala",              0,0,0 },
+{ IDX_2C('g','r'),        "Grecia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Ins. S. Georgia si S. Sandwich",   0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guiana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Insulele Heard si McDonald",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungaria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonezia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "Teritoriul Britanic din Oceanul Indian", 0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islanda",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Iordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirgizstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodgia",                        0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Insulele Comore",                  0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts si Nevis",             0,0,0 },
+{ IDX_2C('k','p'),        "Coreea (de Nord)",                 0,0,0 },
+{ IDX_2C('k','r'),        "Coreea (de Sud)",                  0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Insulele Cayman",                  0,0,0 },
+{ IDX_2C('k','z'),        "Kazahstan",                        0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Liban",                            0,0,0 },
+{ IDX_2C('l','c'),        "Sfinta Lucia",                     0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituania",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Letonia",                          0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroc",                            0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Insulele Marshall",                0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar (Birmania)",               0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Insulele Mariane de Nord",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldive",                          0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexic",                            0,0,0 },
+{ IDX_2C('m','y'),        "Malaezia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambic",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Noua Caledonie",                   0,0,0 },
+{ IDX_2C('n','e'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Insula Norfolk",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Olanda",                           0,0,0 },
+{ IDX_2C('n','o'),        "Norvegia",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Noua Zeelanda",                    0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinezia franceza",               0,0,0 },
+{ IDX_2C('p','g'),        "Papua Noua Guinee",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipine",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polonia",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre si Miquelon",           0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugalia",                       0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rusia",                            0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudita",                   0,0,0 },
+{ IDX_2C('s','b'),        "Insulele Solomon",                 0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suedia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "Sfinta Elena",                     0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Insulele Svalbard si Jan Mayen",   0,0,0 },
+{ IDX_2C('s','k'),        "Republica Slovaca",                0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome si Principe",             0,0,0 },
+{ IDX_2C('s','u'),        "URSS (fosta)",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Insulele Turks si Caicos",         0,0,0 },
+{ IDX_2C('t','d'),        "Ciad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Teritoriile Antarctice Franceze",  0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailanda",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tadjikistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turcia",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad-Tobago",                  0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Regatul Unit",                     0,0,0 },
+{ IDX_2C('u','m'),        "Insulele US Minor Outlying",       0,0,0 },
+{ IDX_2C('u','s'),        "Statele Unite ale Americii",       0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican (Sfintul Scaun)",          0,0,0 },
+{ IDX_2C('v','c'),        "Sifintul Vincent si Grenadine",    0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Insulele Virgine (britance)",      0,0,0 },
+{ IDX_2C('v','i'),        "Insulele Virgine (americane)",     0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Insulele Wallis si Futuna",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Africa de Sud",                    0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.romanian-iso-8859-2 b/lang/webalizer_lang.romanian-iso-8859-2
new file mode 100644 (file)
index 0000000..231ed36
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+   webalizer_lang.romanian-iso-8859-2
+
+   Webalizer V2.0x Language Support file for Romanian (iso-8859-2 charset).
+   17-May-1999 Translation by Mircea Ilie (mirceax@tep.ro)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   04-Feb-2000 Level 1.3 translation by Iulian Radu (iulian_r@starnets.ro)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   16-Jan-2001 Level 2.0 translation by Mircea Ilie (mirceax@tep.ro)
+   25-Sep-2001 ISO-8859-2 version by Mircea Ilie (mirceax@tep.ro)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.french for french).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "în româna";
+char *langcode  = "ro";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "înregistrãri";
+char *msg_addresses="adrese";
+char *msg_ignored = "ignorat";
+char *msg_bad     = "greºit";
+char *msg_in      = "în";
+char *msg_seconds = "secunde";
+
+/* progress and setup error messages */
+char *msg_log_err = "Eroare: Nu pot deschide fiºierul jurnal";
+char *msg_log_use = "Accesez fiºierul jurnal";
+char *msg_dir_err = "Eroare: Nu pot sã ajung în directorul";
+char *msg_dir_use = "Rezultatul este salvat în";
+char *msg_cur_dir = "directorul curent";
+char *msg_hostname= "Hostname-ul pentru rapoarte este";
+char *msg_ign_hist= "Ignor fiºierul de istoric precedent...";
+char *msg_no_hist = "Nu pot gãsi fiºierul de istoric...";
+char *msg_get_hist= "Citesc fiºierul de istoric...";
+char *msg_put_hist= "Salvez informaþiile în fiºierul de istoric...";
+char *msg_hist_err= "Eroare: Nu pot sã scriu în fiºierul de istoric";
+char *msg_bad_hist= "Eroare: Ignor înregistrãrile invalide din fiºierul de istoric";
+char *msg_bad_conf= "Eroare: Nu pot deschide fiºierul de configurare";
+char *msg_bad_key = "Avertisment: Cuvînt cheie invalid";
+char *msg_bad_date= "Eroare: Sar înregistrarea (date incorecte)";
+char *msg_ign_nscp= "Sar înregistrarea antetului Netscape";
+char *msg_bad_rec = "Sar o înregistrare greºitã";
+char *msg_no_vrec = "Nu am gãsit nici o înregistrare corectã!";
+char *msg_gen_rpt = "Generez un raport pentru";
+char *msg_gen_sum = "Generez cuprinsul raportului";
+char *msg_get_data= "Citesc datele rulate înainte...";
+char *msg_put_data= "Salvez datele rulate acum...";
+char *msg_no_data = "Datele rulate înainte nu au fost gãsite...";
+char *msg_bad_data= "Eroare: Nu pot reface datele rulate";
+char *msg_data_err= "Eroare: Nu pot salva datele rulate acum";
+char *msg_dup_data= "Avertisment: S-ar putea sã fi gãsit date duplicate";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Nu s-a specificat nici un fiºier cache, renunþ...";
+char *msg_dns_nodb= "Eroare: Nu pot deschide fiºierul cache al DNS";
+char *msg_dns_nolk= "Eroare: Nu pot bloca fiºierul cache al DNS";
+char *msg_dns_usec= "Folosesc fiºierul cache al DNS";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "Nimic de prelucrat";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nu pot aloca suficientã memorie, dezactivez Top Situri!";
+char *msg_nomem_tr= "Nu pot aloca suficientã memorie, dezactivez Top Pagini referente!";
+char *msg_nomem_tu= "Nu pot aloca suficientã memorie, dezactivez Top URL-uri!";
+char *msg_nomem_tc= "Nu pot aloca suficientã memorie, dezactivez Top Þãri!";
+char *msg_nomem_ta= "Nu pot aloca suficientã memorie, dezactivez Top Navigatoare vizitatori!";
+char *msg_nomem_tsr="Nu pot aloca suficientã memorie, dezactivez Top ªiruri cãutate!";
+char *msg_nomem_ti= "Nu pot aloca suficientã memorie, dezactivez Top Utilizatori!";
+char *msg_nomem_dh= "Eroare adãugare nod host (zilnic), sar";
+char *msg_nomem_mh= "Eroare adãugare nod host (lunar), sar";
+char *msg_nomem_u = "Eroare adãugare nod URL, sar";
+char *msg_nomem_a = "Eroare adãugare nod Navigator client, sar";
+char *msg_nomem_r = "Eroare adãugare nod de Paginã referentã, sar";
+char *msg_nomem_sc= "Eroare adãugare nod ªir de cãutare, sar";
+char *msg_nomem_i = "Eroare adãugare nod Utilizatori, sar";
+
+/* log record errors */
+char *msg_big_rec = "Eroare: Sar o înregistrare de jurnal supradimensionatã";
+char *msg_big_host= "Avertisment: Trunchiez hostname supradimensionat";
+char *msg_big_date= "Avertisment: Trunchiez cîmpul datã supradimensionat";
+char *msg_big_req = "Avertisment: Trunchiez cîmpul cerere supradimensionat";
+char *msg_big_ref = "Avertisment: Trunchiez cîmpul paginii referente supradimensionat";
+char *msg_big_user= "Avertisment: Trunchiez cîmpul utilizator supradimensionat";
+char *msg_big_one = "Avertisment: ªirul depãºeºte dimensiunea spaþiului de stocare";
+
+/* misc errors */
+char *msg_no_open = "Eroare: Nu pot deschide fiºierul";
+
+/* Help display... */
+char *h_usage1 = "Utilizare";
+char *h_usage2 = "[opþiuni] [fiºier jurnal]";
+char *h_msg[]= {
+         "-h        = afiºeazã acest mesaj de ajutor"          ,
+         "-V        = afiºeazã informaþii despre versiune"     ,
+         "-v        = be verbose"                               ,
+         "-d        = afiºeazã informaþii de depanare suplimentare" ,
+         "-F type   = Tip jurnal.  type= (clf | ftp | squid | w3c)" ,
+         "-f        = eroare la secvenþa de fold"              ,
+         "-i        = ignorã fiºierul de istoric"              ,
+         "-p        = pãstreazã starea (incremental)"          ,
+         "-b        = ignorã starea (incremental)"              ,
+         "-q        = eliminã mesajele de informare"           ,
+         "-Q        = eliminã _TOATE_ mesajele"                ,
+         "-Y        = eliminã graficul þãrilor"                ,
+         "-G        = eliminã graficul orelor"                 ,
+         "-H        = eliminã starea pe ore"                   ,
+         "-L        = eliminã legenda graficelor color"        ,
+         "-l num    = foloseºte linii numerotate pe fundalul graficelor" ,
+         "-m num    = valoarea timeout-ului pentru vizite (secunde)" ,
+         "-T        = afiºeazã informaþiile temporale"          ,
+         "-c file   = foloseºte fiºierul de configurare 'file'" ,
+         "-n name   = hostname-ul de folosit"                  ,
+         "-o dir    = directorul folosit pentru rezultate"     ,
+         "-t name   = titlul raportului va fi 'name'"          ,
+         "-a name   = ascunde navigatoarele clienþilor de tipul 'name'" ,
+         "-r name   = ascunde pagina referentã cu numele 'name'" ,
+         "-s name   = ascunde situl 'name'"                    ,
+         "-u name   = ascunde URL-ul 'name'"                           ,
+         "-x name   = foloseºte extensia de nume fiºier 'name'" ,
+         "-O name   = Omit page 'name'"                         ,
+         "-P name   = extensia tipului de paginã va fi 'name'"  ,
+         "-I name   = aliasul index-ului va fi 'name'"          ,
+         "-K num    = num months in summary table"              ,
+         "-k num    = num months in summary graph"              ,
+         "-A num    = afiºeazã numeric topul navigatoarelor clienþilor" ,
+         "-C num    = afiºeazã numeric topul þãrilor"           ,
+         "-R num    = afiºeazã numeric topul referenþilor"      ,
+         "-S num    = afiºeazã numeric topul siturilor"         ,
+         "-U num    = afiºeazã numeric topul URL-urilor"        ,
+         "-e num    = afiºeazã numeric topul Paginilor de intrare",
+         "-E num    = afiºeazã numeric topul Paginilor de iesire",
+         "-X        = Ascunde siturile individuale"             ,
+         "-z dir    = Use country flags in 'dir'"               ,
+#ifdef USE_DNS
+         "-D name   = Foloseºte fiºierul cache DNS 'name'"      ,
+         "-N num    = Numãrul de procese DNS (0=dezactivat)"    ,
+         "-j        = Enable native GeoDB lookups"              ,
+         "-J name   = Use GeoDB database 'name'"                ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                     ,
+         "-W name   = Use GeoIP database 'name'"                ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Perioada analizatã";
+char *msg_hhdr_gt = "Generat în";
+
+/* main index strings */
+char *msg_main_us = "Sumarul utilizarii lui";
+/* char *msg_main_per= "ultimele 12 luni"; */
+char *msg_main_per= "Sumarul pe lunã";
+char *msg_main_sum= "Sumarul pe lunã";
+char *msg_main_da = "Media zilnicã";
+char *msg_main_mt = "Totaluri lunare";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Utilizarea zilnicã pe lunã";
+char *msg_hmth_hu = "Utilizarea orarã pe lunã";
+
+/* table header strings */
+char *msg_h_by    = "dupã";
+char *msg_h_avg   = "Medie";
+char *msg_h_max   = "Maxim";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totaluri";
+char *msg_h_day   = "Zi";
+char *msg_h_mth   = "Lunã";
+char *msg_h_hour  = "Orã";
+char *msg_h_hits  = "Accesãri";
+char *msg_h_pages = "Pagini";
+char *msg_h_visits= "Vizite";
+char *msg_h_files = "Fiºiere";
+char *msg_h_sites = "Situri";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Nume";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Navigator";
+char *msg_h_ref   = "Paginã referentã";
+char *msg_h_ctry  = "Þarã";
+char *msg_h_search= "ªir de cãutare";
+char *msg_h_uname = "Utilizator";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistici zilnice";
+char *msg_hlnk_hs = "Statistici orare";
+char *msg_hlnk_u  = "URL-uri";
+char *msg_hlnk_s  = "Situri";
+char *msg_hlnk_a  = "Navigator";
+char *msg_hlnk_c  = "Þãri";
+char *msg_hlnk_r  = "Pagini referente";
+char *msg_hlnk_en = "Intrãri";
+char *msg_hlnk_ex = "Ieºiri";
+char *msg_hlnk_sr = "Cãutare";
+char *msg_hlnk_i  = "Utilizatori";
+
+/* monthly total table */
+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_us = "Total situri unice";
+char *msg_mtot_ur = "Total pagini referente unice";
+char *msg_mtot_ua = "Total navigatoare";
+char *msg_mtot_uu = "Total URL-uri unice";
+char *msg_mtot_ui = "Total Utilizatori unici";
+char *msg_mtot_mhd= "Vizite pe zi";
+char *msg_mtot_mhh= "Vizite pe orã";
+char *msg_mtot_mfd= "Fiºiere pe zi";
+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_rc = "Accesãri dupã codul de rãspuns";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistici zilnice pe lunã";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistici orare pe lunã";
+
+/* country pie chart */
+char *msg_ctry_use= "Utilizarea dupã þarã pe lunã";
+
+/* top tables */
+/* Formatted as "Topul xxx din xxx total ceva" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "din";
+char *msg_top_s   = "al Siturilor";
+char *msg_top_u   = "al URL-urilor";
+char *msg_top_r   = "al Paginilor referente";
+char *msg_top_a   = "al Navigatoarelor";
+char *msg_top_c   = "al Þãrilor";
+char *msg_top_en  = "total Pagini de intrare";
+char *msg_top_ex  = "total Pagini de ieºire";
+char *msg_top_sr  = "total ªiruri de cãutare";
+char *msg_top_i   = "total Utilizatori";
+char *msg_v_sites = "Afiºarea tuturor siturilor";
+char *msg_v_urls  = "Afiºarea tuturor URL-urilor";
+char *msg_v_refs  = "Afiºarea tuturor paginilor referente";
+char *msg_v_agents= "Afiºarea tuturor navigatoarelor";
+char *msg_v_search= "Afiºarea tuturor cuvintelor cheie";
+char *msg_v_users = "Afiºarea tuturor utiltizatorilor";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Ian", "Feb", "Mar",
+                    "Apr", "Mai", "Iun",
+                    "Iul", "Aug", "Sep",
+                    "Oct", "Noi", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Ianuarie",  "Februarie", "Martie",   "Aprilie",
+                    "Mai",       "Iunie",     "Iulie",    "August",
+                    "Septembrie","Octombrie", "Noiembrie","Decembrie"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Cod de rãspuns nedefinit",                  0 },
+         { "Cod 100 - Continuã",                        0 },
+         { "Cod 101 - Schimb de protocol",              0 },
+         { "Cod 200 - OK",                              0 },
+         { "Cod 201 - Creat",                           0 },
+         { "Cod 202 - Acceptat",                        0 },
+         { "Cod 203 - Informaþie fãrã autoritate",      0 },
+         { "Cod 204 - Fãrã conþinut",                   0 },
+         { "Cod 205 - Iniþializare conþinut",           0 },
+         { "Cod 206 - Conþinut parþial",                0 },
+         { "Cod 300 - Opþiuni multiple",                0 },
+         { "Cod 301 - Mutat permanent",                 0 },
+         { "Cod 302 - Gãsit",                           0 },
+         { "Cod 303 - Vezi alt",                        0 },
+         { "Cod 304 - Nemodificat",                     0 },
+         { "Cod 305 - Foloseºte proxy",                 0 },
+         { "Cod 307 - Mutat temporar",                  0 },
+         { "Cod 400 - Cerere greºitã",                  0 },
+         { "Cod 401 - Neautorizat",                     0 },
+         { "Cod 402 - Platã solicitatã",                0 },
+         { "Cod 403 - Interzis",                        0 },
+         { "Cod 404 - Lipsã",                           0 },
+         { "Cod 405 - Metodã nepermisã",                0 },
+         { "Cod 406 - Inacceptabil",                    0 },
+         { "Cod 407 - Autentificare prin proxy necesarã", 0 },
+         { "Cod 408 - Timeout cerere",                  0 },
+         { "Cod 409 - Conflict",                        0 },
+         { "Cod 410 - Satisfãcut",                      0 },
+         { "Cod 411 - Lungime solicitatã",              0 },
+         { "Cod 412 - Precondiþie eºuatã",              0 },
+         { "Cod 413 - Entitatea cerutã este prea mare", 0 },
+         { "Cod 414 - URI-ul cerut este prea lung",     0 },
+         { "Cod 415 - Tip de mediu necunoscut",         0 },
+         { "Cod 416 - Domeniul cererii nerealizabil",   0 },
+         { "Cod 417 - Aºteptarea a eºuat",              0 },
+         { "Cod 500 - Eroare internã a serverului",     0 },
+         { "Cod 501 - Neimplementat",                   0 },
+         { "Cod 502 - Gateway greºit",                  0 },
+         { "Cod 503 - Serviciu indisponibil",           0 },
+         { "Cod 504 - Timeout la gateway",              0 },
+         { "Cod 505 - Versiune de HTTP neacceptatã",    0 } 
+       };
+
+char *msg_title   = "Statisticile de utilizare ale lui";
+char *msg_h_other = "Altele";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Nerezolvat/Necunoscut",            0,0,0 },
+{ IDX_3C('c','o','m'),    "Comercial (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Guvernamental (gov)",           0,0,0 },
+{ IDX_3C('i','n','t'),    "Internaþional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Militar (mil)",                 0,0,0 },
+{ IDX_3C('n','e','t'),    "Reþea (Network)",                  0,0,0 },
+{ IDX_3C('o','r','g'),    "þie Non-Profit (org)",             0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Arpanet stilul vechi (arpa)",      0,0,0 },
+{ IDX_4C('n','a','t','o'),"NATO",                             0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emiratele Arabe Unite",            0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua ºi Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antilele olandeze",                0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa americanã",                  0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaidjan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia ºi Herþegovina",            0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgia",                           0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazilia",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Insula Bouvet",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorusia",                       0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Insulele Cocos (Keeling)",         0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Republica Centrafricanã",          0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Elveþia",                          0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Coasta de Fildeº)", 0,0,0 },
+{ IDX_2C('c','k'),        "Insulele Cook",                    0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Columbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Insulele Capului Verde",           0,0,0 },
+{ IDX_2C('c','x'),        "Insulele Christmas",               0,0,0 },
+{ IDX_2C('c','y'),        "Cipru",                            0,0,0 },
+{ IDX_2C('c','z'),        "Republica Cehã",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germania",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Danemarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Republica Dominicanã",             0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egipt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Occidentalã",               0,0,0 },
+{ IDX_2C('e','r'),        "Eritreea",                         0,0,0 },
+{ IDX_2C('e','s'),        "Spania",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlanda",                         0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Insulele Falkland (Malvinas)",     0,0,0 },
+{ IDX_2C('f','m'),        "Micronezia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Insulele Faroe",                   0,0,0 },
+{ IDX_2C('f','r'),        "Franþa",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Marea Britanie (UK)",              0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guiana Francezã",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Groenlanda",                       0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guineea",                          0,0,0 },
+{ IDX_2C('g','p'),        "Guadelupe",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guineea Ecuatorialã",              0,0,0 },
+{ IDX_2C('g','r'),        "Grecia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Ins. S. Georgia si S. Sandwich",   0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guiana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Insulele Heard si McDonald",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croaþia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Ungaria",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonezia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "Teritoriul Britanic din Oceanul Indian",0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islanda",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Iordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japonia",                          0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kîrgîzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodgia",                        0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Insulele Comore",                  0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts si Nevis",             0,0,0 },
+{ IDX_2C('k','p'),        "Coreea (de Nord)",                 0,0,0 },
+{ IDX_2C('k','r'),        "Coreea (de Sud)",                  0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Insulele Cayman",                  0,0,0 },
+{ IDX_2C('k','z'),        "Kazahstan",                        0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Liban",                            0,0,0 },
+{ IDX_2C('l','c'),        "Sfînta Lucia",                     0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituania",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Letonia",                          0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Maroc",                            0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Insulele Marshall",                0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar (Birmania)",               0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Insulele Mariane de Nord",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldive",                          0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexic",                            0,0,0 },
+{ IDX_2C('m','y'),        "Malaezia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambic",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Noua Caledonie",                   0,0,0 },
+{ IDX_2C('n','e'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','f'),        "Insula Norfolk",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Olanda",                           0,0,0 },
+{ IDX_2C('n','o'),        "Norvegia",                         0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Noua Zeelandã",                    0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinezia francezã",               0,0,0 },
+{ IDX_2C('p','g'),        "Papua Noua Guinee",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipine",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polonia",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre ºi Miquelon",           0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugalia",                       0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "România",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rusia",                            0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Sauditã",                   0,0,0 },
+{ IDX_2C('s','b'),        "Insulele Solomon",                 0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suedia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "Sfînta Elena",                     0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Insulele Svalbard ºi Jan Mayen",   0,0,0 },
+{ IDX_2C('s','k'),        "Republica Slovacã",                0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome ºi Principe",             0,0,0 },
+{ IDX_2C('s','u'),        "URSS (fostã)",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Insulele Turks si Caicos",         0,0,0 },
+{ IDX_2C('t','d'),        "Ciad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Teritoriile Antarctice Franceze",  0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailanda",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tadjikistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turcia",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad-Tobago",                  0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Regatul Unit al Marii Britanii",   0,0,0 },
+{ IDX_2C('u','m'),        "Insulele US Minor Outlying",       0,0,0 },
+{ IDX_2C('u','s'),        "Statele Unite ale Americii",       0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican (Sfîntul Scaun)",          0,0,0 },
+{ IDX_2C('v','c'),        "Sfîntul Vincent ºi Grenadine",     0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Insulele Virgine britance",        0,0,0 },
+{ IDX_2C('v','i'),        "Insulele Virgine americane",       0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Insulele Wallis ºi Futuna",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Africa de Sud",                    0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.russian b/lang/webalizer_lang.russian
new file mode 100644 (file)
index 0000000..9030171
--- /dev/null
@@ -0,0 +1,646 @@
+/* This file is full of -*- C -*- code, so treat it as such.
+
+   webalizer_lang.russian
+
+   Webalizer V2.0x Language Support file for Russian.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   18-Aug-1998 Translated by Sergey Groznyh <gsm@infosite.ru>
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   10-Mar-2000 New 2.0 strings translated by Andrew A. Vasilyev (andy@demos.su)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+   Note: In order to use the russian character set, the GD graphics
+   library needs to be patched, otherwise you will get garbage.
+   The file gd1.3-patch-koi8-r.gz includes this patch, which you
+   should get and install before compiling the russian version of
+   the Webalizer.  Thanks to Sergey Groznyh for this submission.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Russian";
+char *langcode  = "ru";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "ÚÁÐÉÓÅÊ";
+char *msg_addresses="ÁÄÒÅÓÏ×";
+char *msg_ignored = "ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎÏ";
+char *msg_bad     = "ÎÅ×ÅÒÎÙÈ";
+char *msg_in      = "ÚÁ";
+char *msg_seconds = "ÓÅËÕÎÄ";
+
+/* progress and setup error messages */
+char *msg_log_err = "ïÛÉÂËÁ: ÎÅÌØÚÑ ÏÔËÒÙÔØ ÕÞ£ÔÎÙÊ ÆÁÊÌ";
+char *msg_log_use = "éÓÐÏÌØÚÕÅÔÓÑ ÕÞ£ÔÎÙÊ ÆÁÊÌ";
+char *msg_dir_err = "ïÛÉÂËÁ: ÎÅÌØÚÑ ÓÍÅÎÉÔØ ËÁÔÁÌÏÇ ÎÁ";
+char *msg_dir_use = "òÅÚÕÌØÔÁÔ ÓÏÚÄÁ£ÔÓÑ ×";
+char *msg_cur_dir = "ÔÅËÕÝÅÍ ËÁÔÁÌÏÇÅ";
+char *msg_hostname= "äÌÑ ÏÔÞ£ÔÏ× ÉÓÐÏÌØÚÕÅÔÓÑ ÉÍÑ ÈÏÓÔÁ";
+char *msg_ign_hist= "ðÒÅÄÙÄÕÝÅÅ ÓÏÓÔÏÑÎÉÅ ÉÇÎÏÒÉÒÕÅÔÓÑ...";
+char *msg_no_hist = "æÁÊÌ ÓÏÓÔÏÑÎÉÑ ÎÅ ÎÁÊÄÅÎ...";
+char *msg_get_hist= "þÉÔÁÅÔÓÑ ÆÁÊÌ ÓÏÓÔÏÑÎÉÑ...";
+char *msg_put_hist= "óÏÈÒÁÎÑÅÔÓÑ ÉÎÆÏÒÍÁÃÉÑ Ï ÓÏÓÔÏÑÎÉÉ...";
+char *msg_hist_err= "ïÛÉÂËÁ: ÎÅÌØÚÑ ÚÁÐÉÓÁÔØ ÆÁÊÌ ÓÏÓÔÏÑÎÉÑ";
+char *msg_bad_hist= "ïÛÉÂËÁ: ÉÇÎÏÒÉÒÕÅÔÓÑ ÎÅ×ÅÒÎÁÑ ÚÁÐÉÓØ ÓÏÓÔÏÑÎÉÑ";
+char *msg_bad_conf= "ïÛÉÂËÁ: ÎÅÌØÚÑ ÏÔËÒÙÔØ ÆÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ";
+char *msg_bad_key = "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÅÒÎÏÅ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï";
+char *msg_bad_date= "ïÛÉÂËÁ: ÐÒÏÐÕÓËÁÅÔÓÑ ÚÁÐÉÓØ (ÎÅ×ÅÒÎÁÑ ÄÁÔÁ)";
+char *msg_ign_nscp= "ðÒÏÐÕÓËÁÅÔÓÑ ÚÁÐÉÓØ ÚÁÇÏÌÏ×ËÁ Netscape";
+char *msg_bad_rec = "ðÒÏÐÕÓËÁÅÔÓÑ ÎÅ×ÅÒÎÁÑ ÚÁÐÉÓØ";
+char *msg_no_vrec = "îÅ ÎÁÊÄÅÎÏ ÎÉ ÏÄÎÏÊ ×ÅÒÎÏÊ ÚÁÐÉÓÉ!";
+char *msg_gen_rpt = "çÅÎÅÒÉÒÕÅÔÓÑ ÏÔÞ£Ô ÚÁ";
+char *msg_gen_sum = "çÅÎÅÒÉÒÕÅÔÓÑ ÏÂÝÉÊ ÏÔÞ£Ô";
+
+/* New for 1.1 */ /* Current state data messages */
+char *msg_get_data= "þÉÔÁÀÔÓÑ ÄÁÎÎÙÅ ÐÒÅÄÙÄÕÝÅÇÏ ÚÁÐÕÓËÁ...";
+char *msg_put_data= "óÏÈÒÁÎÑÀÔÓÑ ÄÁÎÎÙÅ ÔÅËÕÝÅÇÏ ÚÁÐÕÓËÁ...";
+char *msg_no_data = "äÁÎÎÙÅ ÐÒÅÄÙÄÕÝÅÇÏ ÚÁÐÕÓËÁ ÎÅ ÎÁÊÄÅÎÙ...";
+char *msg_bad_data= "ïÛÉÂËÁ: ÎÅÌØÚÑ ×ÏÓÓÔÁÎÏ×ÉÔØ ÄÁÎÎÙÅ ÐÒÅÄÙÄÕÝÅÇÏ ÚÁÐÕÓËÁ";
+char *msg_data_err= "ïÛÉÂËÁ: ÎÅÌØÚÑ ÓÏÈÒÁÎÉÔØ ÄÁÎÎÙÅ ÔÅËÕÝÅÇÏ ÚÁÐÕÓËÁ";
+char *msg_dup_data= "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÏÂÎÁÒÕÖÅÎÏ ×ÏÚÍÏÖÎÏÅ ÄÕÂÌÉÒÏ×ÁÎÉÅ ÄÁÎÎÙÈ";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "îÅ ÕËÁÚÁΠËÜÛ-ÆÁÊÌ, ÏÓÔÁÎÏ×...";
+char *msg_dns_nodb= "ïÛÉÂËÁ: ÎÅÌØÚÑ ÏÔËÒÙÔØ ËÜÛ-ÆÁÊÌ DNS";
+char *msg_dns_nolk= "ïÛÉÂËÁ: ÎÅÌØÚÑ ÂÌÏËÉÒÏ×ÁÔØ ËÜÛ-ÆÁÊÌ DNS";
+char *msg_dns_usec= "éÓÐÏÌØÚÕÅÔÓÑ DNS ËÜÛ-ÆÁÊÌ";
+char *msg_dns_rslv= "DNS ÐÏÉÓË";
+char *msg_dns_none= "îÅÞÅÇÏ ÏÂÒÁÂÁÔÙ×ÁÔØ";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÓÁÊÔÏ× ÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_tr= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÓÓÙÌÁÀÝÉÈÓÑ ÓÔÒÁÎÉàÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_tu= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ URL ÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_tc= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÓÔÒÁΠÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_ta= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÂÒÏÕÚÅÒÏ× ÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_tsr="îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÓÔÒÏË ÐÏÉÓËÁ ÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_ti= "îÅÌØÚÑ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÔØ ÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ, ÓÔÁÔÉÓÔÉËÁ ÉͣΠÐÏÌØÚÏ×ÁÔÅÌÅÊ ÏÔËÌÀÞÅÎÁ!";
+char *msg_nomem_dh= "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÈÏÓÔÁ (ÄÎÅ×ÎÏÊ ÏÔÞ£Ô), ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_mh= "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÈÏÓÔÁ (ÍÅÓÑÞÎÙÊ ÏÔÞ£Ô), ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_u = "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ URL, ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_a = "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÂÒÏÕÚÅÒÁ, ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_r = "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÓÓÙÌËÉ, ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_sc= "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÓÔÒÏËÉ ÐÏÉÓËÁ, ÐÒÏÐÕÓËÁÅÔÓÑ";
+char *msg_nomem_i = "ïÛÉÂËÁ ÄÏÂÁ×ÌÅÎÉÑ ÕÚÌÁ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÐÒÏÐÕÓËÁÅÔÓÑ";
+
+/* log record errors */
+char *msg_big_rec = "ïÛÉÂËÁ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ ÕÞ£ÔÎÁÑ ÚÁÐÉÓØ";
+char *msg_big_host= "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÉÍÑ ÈÏÓÔÁ";
+char *msg_big_date= "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÐÏÌÅ ÄÁÔÙ";
+char *msg_big_req = "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÐÏÌÅ ÚÁÐÒÏÓÁ";
+char *msg_big_ref = "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÐÏÌÅ ÓÓÙÌÁÀÝÅÊÓÑ ÓÔÒÁÎÉÃÙ";
+char *msg_big_user= "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÐÕÓËÁÅÔÓÑ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÐÏÌÅ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ";
+char *msg_big_one = "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÓÔÒÏËÁ ÐÒÅ×ÙÓÉÌÁ ÚÁÒÅÚÅÒ×ÉÒÏ×ÁÎÎÙÊ ÏÂߣÍ";
+
+/* misc errors */
+char *msg_no_open = "ïÛÉÂËÁ: ÎÅÌØÚÑ ÏÔËÒÙÔØ ÆÁÊÌ";
+
+/* Help display... */
+char *h_usage1 = "éÓÐÏÌØÚÏ×ÁÎÉÅ";
+char *h_usage2 = "[ÐÁÒÁÍÅÔÒÙ] [ÕÞ£ÔÎÙÊ ÆÁÊÌ]";
+char *h_msg[]= {
+         "-h        = ×ÙÄÁÔØ ÜÔÏ ÉÎÆÏÒÍÁÃÉÏÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"                 ,
+         "-V        = ×ÙÄÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ"                          ,
+         "-v        = be verbose"                                          ,
+         "-d        = ×ÙÄÁ×ÁÔØ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ"       ,
+        "-F ÔÉР   = ×ÉÄ ÉÓÈÏÄÎÏÊ ÓÔÁÔÉÓÔÉËÉ. ÔÉР= (clf | ftp | squid | w3c)",
+         "-f        = fold sequence errors"                                ,
+         "-i        = ÉÇÎÏÒÉÒÏ×ÁÔØ ÆÁÊÌ ÓÏÓÔÏÑÎÉÑ"                         ,
+         "-p        = ÓÏÈÒÁÎÑÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÓÏÓÔÏÑÎÉÉ (ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏ)"  ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = ÎÅ ×ÙÄÁ×ÁÔØ ÉÎÆÏÒÍÁÃÉÏÎÎÙÈ ÓÏÏÂÝÅÎÉÊ"                ,
+         "-Q        = ÎÅ ×ÙÄÁ×ÁÔØ _îéëáëéè_ ÓÏÏÂÝÅÎÉÊ"                     ,
+        "-Y        = ÎÅ ×ÙÄÁ×ÁÔØ ÇÒÁÆÉË ÐÏ ÓÔÒÁÎÁÍ"                       ,
+         "-G        = ÎÅ ×ÙÄÁ×ÁÔØ ÐÏÞÁÓÏ×ÏÊ ÇÒÁÆÉË"                        ,
+         "-H        = ÎÅ ×ÙÄÁ×ÁÔØ ÐÏÞÁÓÏ×ÕÀ ÓÔÁÔÉÓÔÉËÕ"                    ,
+        "-L        = ÎÅ ×ÙÄÁ×ÁÔØ ÏÐÉÓÁÎÉÅ Ã×ÅÔÏ× × ÔÁÂÌÉÃÁÈ"              ,
+        "-l ÞÉÓÌÏ  = ÒÁÚÍÅÒ ÔÅÎÉ × 'ÞÉÓÌÏ' ÌÉÎÉÊ"                         ,
+        "-m ÞÉÓÌÏ  = ÉÎÔÅÒ×ÁÌ ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ 'ÐÏÓÅÝÅÎÉÑ' (seconds)"                 ,
+         "-T        = ×ÙÄÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÚÁÔÒÁÞÅÎÎÏÍ ×ÒÅÍÅÎÉ"             ,
+         "-c ÆÁÊÌ   = ÉÓÐÏÌØÚÏ×ÁÔØ ÆÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ 'ÆÁÊÌ'"               ,
+         "-n ÉÍÑ    = ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ÉÍÅÎÉ ÈÏÓÔÁ"                 ,
+        "-o ËÁÔ.   = ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ×ÙÈÏÄÎÏÇÏ ËÁÔÁÌÏÇÁ"          ,
+         "-t ÉÍÑ    = ÚÁÇÏÌÏ×ÏË ÏÔÞ£ÔÁ 'ÉÍÑ'"                              ,
+         "-a ÉÍÑ    = ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÂÒÏÕÚÅÒ 'ÉÍÑ'"                       ,
+         "-r ÉÍÑ    = ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÓÓÙÌËÕ 'ÉÍÑ'"                        ,
+         "-s ÉÍÑ    = ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ ÈÏÓÔ 'ÉÍÑ'"                          ,
+         "-u ÉÍÑ    = ÎÅ ÏÂÒÁÂÁÔÙ×ÁÔØ URL 'ÉÍÑ'"                           ,
+        "-x ÉÍÑ    = ÉÓÐÏÌØÚÏ×ÁÔØ ÒÁÓÛÉÒÅÎÉÅ 'ÉÍÑ' ÄÌÑ HTML-ÆÁÊÌÏ×"       ,
+         "-O ÉÍÑ    = Omit page 'ÉÍÑ'"                                     ,
+        "-P ÉÍÑ    = ÆÁÊÌÙ Ó ÒÁÓÛÉÒÅÎÉÅÍ 'ÉÍÑ' - ÓÔÒÁÎÉÃÙ ÎÁ ÓÅÒ×ÅÒÅ"     ,
+         "-I ÉÍÑ    = ÉÓÐÏÌØÚÏ×ÁÔØ ËÁË ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ÉÎÄÅËÓÎÙÊ ÆÁÊÌ"      ,
+         "-K num    = num months in summary table"                         ,
+         "-k num    = num months in summary graph"                         ,
+         "-A ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÓÔÁÔÉÓÔÉËÉ ÂÒÏÕÚÅÒÏ×"     ,
+         "-C ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÓÔÁÔÉÓÔÉËÉ ÓÔÒÁÎ"         ,
+         "-R ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÓÔÁÔÉÓÔÉËÉ ÓÓÙÌÁÀÝÉÈÓÑ ÓÔÒÁÎÉÃ",
+         "-S ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÓÔÁÔÉÓÔÉËÉ ÓÁÊÔÏ×"        ,
+         "-U ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÓÔÁÔÉÓÔÉËÉ URL"           ,
+        "-e ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÎÁÞÁÌØÎÙÈ ÓÔÒÁÎÉÃ"        ,
+        "-E ÞÉÓÌÏ  = ïÔÏÂÒÁÖÁÔØ 'ÞÉÓÌÏ' ÚÁÐÉÓÅÊ ÐÏÓÌÅÄÎÉÈ ÓÔÒÁÎÉÃ"        ,
+        "-g ÞÉÓÌÏ  = çÒÕÐÐÉÒÏ×ÁÔØ ÄÏÍÅÎÙ ÕÒÏ×ÎÑ 'ÞÉÓÌÏ'"                  ,
+        "-X        = óËÒÙÔØ ÏÔÄÅÌØÎÙÅ ÓÁÊÔÙ"                              ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+        "-D ÉÍÑ    = éÓÐÏÌØÚÏ×ÁÔØ DNS 'ÉÍÑ' ËÜÛ-ÆÁÊÌ"                     ,
+        "-N ÞÉÓÌÏ  = þÉÓÌÏ DNS ÐÒÏÃÅÓÓÏ× (0=ÏÔËÌÀÞÉÔØ)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J ÉÍÑ    = Use GeoIP database 'ÉÍÑ'"            ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W ÉÍÑ    = Use GeoIP database 'ÉÍÑ'"            ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "ðÅÒÉÏÄ ÓÔÁÔÉÓÔÉËÉ";
+char *msg_hhdr_gt = "äÁÔÁ ÓÏÚÄÁÎÉÑ";
+
+/* main index strings */
+char *msg_main_us = "óÕÍÍÁÒÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÅÒ×ÅÒÁ";
+/* char *msg_main_per= "ÐÏÓÌÅÄÎÉÅ 12 ÍÅÓÑÃÅ×"; */
+char *msg_main_per= "åÖÅÍÅÓÑÞÎÁÑ ÓÔÁÔÉÓÔÉËÁ";
+char *msg_main_sum= "åÖÅÍÅÓÑÞÎÁÑ ÓÔÁÔÉÓÔÉËÁ";
+char *msg_main_da = "÷ ÓÒÅÄÎÅÍ ÚÁ ÄÅÎØ";
+char *msg_main_mt = "÷ÓÅÇÏ ÚÁ ÍÅÓÑÃ";
+
+/* month HTML page strings */
+char *msg_hmth_du = "éÓÐÏÌØÚÏ×ÁÎÉÅ ÐÏ ÄÎÑÍ ÎÁ";
+char *msg_hmth_hu = "éÓÐÏÌØÚÏ×ÁÎÉÅ ÐÏ ÞÁÓÁÍ ÎÁ";
+
+/* table header strings */
+char *msg_h_by    = "ÐÏ";
+char *msg_h_avg   = "÷ ÓÒÅÄÎÅÍ";
+char *msg_h_max   = "Max";
+char *msg_h_total = "÷ÓÅÇÏ";
+char *msg_h_totals= "÷ÓÅÇÏ";
+char *msg_h_day   = "äÅÎØ";
+char *msg_h_mth   = "íÅÓÑÃ";
+char *msg_h_hour  = "þÁÓ";
+char *msg_h_hits  = "ÚÁÐÒÏÓÏ×";
+char *msg_h_pages = "ÓÔÒÁÎÉÃ";
+char *msg_h_visits= "ÐÏÓÅÝÅÎÉÊ";
+char *msg_h_files = "ÆÁÊÌÏ×";
+char *msg_h_sites = "ÓÁÊÔÏ×";
+char *msg_h_xfer  = "ëÂÁÊÔ";
+char *msg_h_hname = "éÍÑ ÈÏÓÔÁ";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "âÒÏÕÚÅÒ";
+char *msg_h_ref   = "óÓÙÌÁÀÝÁÑÓÑ ÓÔÒÁÎÉÃÁ";
+char *msg_h_ctry  = "óÔÒÁÎÁ";
+char *msg_h_search= "óÔÒÏËÁ ÐÏÉÓËÁ";
+char *msg_h_uname = "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ";
+
+/* links along top of page */
+char *msg_hlnk_ds = "óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÍ";
+char *msg_hlnk_hs = "óÔÁÔÉÓÔÉËÁ ÐÏ ÞÁÓÁÍ";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "óÁÊÔÙ";
+char *msg_hlnk_a  = "âÒÏÕÚÅÒÙ";
+char *msg_hlnk_c  = "óÔÒÁÎÙ";
+char *msg_hlnk_r  = "óÓÙÌÁÀÝÉÅÓÑ ÓÔÒÁÎÉÃÙ";
+char *msg_hlnk_en = "îÁÞÁÌØÎÙÅ ÓÔÒÁÎÉÃÙ";
+char *msg_hlnk_ex = "ðÏÓÌÅÄÎÉÅ ÓÔÒÁÎÉÃÙ";
+char *msg_hlnk_sr = "ðÏÉÓË";
+char *msg_hlnk_i  = "ðÏÌØÚÏ×ÁÔÅÌÉ";
+
+/* monthly total table */
+char *msg_mtot_ms = "óÔÁÔÉÓÔÉËÁ ÚÁ ÍÅÓÑàÎÁ";
+char *msg_mtot_th = "÷ÓÅÇÏ ÚÁÐÒÏÓÏ×";
+char *msg_mtot_tf = "÷ÓÅÇÏ ÆÁÊÌÏ×";
+char *msg_mtot_tx = "÷ÓÅÇÏ ËÉÌÏÂÁÊÔ";
+char *msg_mtot_us = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÓÁÊÔÏ×";
+char *msg_mtot_ur = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÓÓÙÌÁÀÝÉÈÓÑ ÓÔÒÁÎÉÃ";
+char *msg_mtot_ua = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÂÒÏÕÚÅÒÏ×";
+char *msg_mtot_uu = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ URL";
+char *msg_mtot_ui = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÉÍ£Î";
+char *msg_mtot_mhd= "ïÂÒÁÝÅÎÉÊ × ÄÅÎØ";
+char *msg_mtot_mhh= "ïÂÒÁÝÅÎÉÊ × ÞÁÓ";
+char *msg_mtot_mfd= "æÁÊÌÏ× × ÄÅÎØ";
+char *msg_mtot_mpd= "óÔÒÁÎÉàנÄÅÎØ";
+char *msg_mtot_msd= "Sites per Day";
+char *msg_mtot_mvd= "ðÏÓÅÝÅÎÉÊ × ÄÅÎØ";
+char *msg_mtot_mkd= "ïÂߣ͠נÄÅÎØ (ëÂÁÊÔ)";
+char *msg_mtot_rc = "úÁÐÒÏÓÙ ÐÏ ËÏÄÁÍ ÏÔ×ÅÔÁ";
+
+/* daily total table */
+char *msg_dtot_ds = "óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÍ ÎÁ";
+
+/* hourly total table */
+char *msg_htot_hs = "óÔÁÔÉÓÔÉËÁ ÐÏ ÞÁÓÁÍ ÎÁ";
+
+/* country pie chart */
+char *msg_ctry_use= "óÔÁÔÉÓÔÉËÁ ÐÏ ÓÔÒÁÎÁÍ ÎÁ";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "ðÅÒ×ÙÅ";
+char *msg_top_of  = "ÉÚ";
+char *msg_top_s   = "ÓÁÊÔÏ×";
+char *msg_top_u   = "URL";
+char *msg_top_r   = "ÓÓÙÌÁÀÝÉÈÓÑ ÓÔÒÁÎÉÃ";
+char *msg_top_a   = "ÂÒÏÕÚÅÒÏ×";
+char *msg_top_c   = "ÓÔÒÁÎ";
+char *msg_top_en  = "ÎÁÞÁÌØÎÙÈ ÓÔÒÁÎÉÃ";
+char *msg_top_ex  = "ÐÏÓÌÅÄÎÉÈ ÓÔÒÁÎÉÃ";
+char *msg_top_sr  = "ÓÔÒÏË ÐÏÉÓËÁ";
+char *msg_top_i   = "ÉͣΠÐÏÌØÚÏ×ÁÔÅÌÅÊ";
+char *msg_v_sites = "ðÏÓÍÏÔÒÅÔØ ×ÓÅ ÓÁÊÔÙ";
+char *msg_v_urls  = "ðÏÓÍÏÔÒÅÔØ ×ÓÅ URL-Ù";
+char *msg_v_refs  = "ðÏÓÍÏÔÒÅÔØ ×ÓÅ ÓÓÙÌÁÀÝÉÅÓÑ ÓÔÒÁÎÉÃÙ";
+char *msg_v_agents= "ðÏÓÍÏÔÒÅÔØ ×ÓÅ ÂÒÏÕÚÅÒÙ";
+char *msg_v_search= "ðÏÓÍÏÔÒÅÔØ ×ÓÅ ÓÔÒÏËÉ ÐÏÉÓËÁ";
+char *msg_v_users = "ðÏÓÍÏÔÒÅÔØ ×ÓÅ ÉÍÅÎÁ ÐÏÌØÚÏ×ÁÔÅÌÅÊ";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "ñÎ×", "æÅ×", "íÁÒ",
+                    "áÐÒ", "íÁÊ", "éÀÎ",
+                    "éÀÌ", "á×Ç", "óÅÎ",
+                    "ïËÔ", "îÏÑ", "äÅË"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "ñÎ×ÁÒØ",   "æÅ×ÒÁÌØ", "íÁÒÔ",   "áÐÒÅÌØ",
+                    "íÁÊ",      "éÀÎØ",    "éÀÌØ",   "á×ÇÕÓÔ",
+                    "óÅÎÔÑÂÒØ", "ïËÔÑÂÒØ", "îÏÑÂÒØ", "äÅËÁÂÒØ"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "îÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÔ×ÅÔÁ",                    0 },
+         { "ëÏÄ 100 - Continue",                        0 },
+         { "ëÏÄ 101 - Switching Protocols",             0 },
+         { "ëÏÄ 200 - OK",                              0 },
+         { "ëÏÄ 201 - Created",                         0 },
+         { "ëÏÄ 202 - Accepted",                        0 },
+         { "ëÏÄ 203 - Non-Authoritative Information",   0 },
+         { "ëÏÄ 204 - No Content",                      0 },
+         { "ëÏÄ 205 - Reset Content",                   0 },
+         { "ëÏÄ 206 - Partial Content",                 0 },
+         { "ëÏÄ 300 - Multiple Choices",                0 },
+         { "ëÏÄ 301 - Moved Permanently",               0 },
+         { "ëÏÄ 302 - Found",                           0 },
+         { "ëÏÄ 303 - See Other",                       0 },
+         { "ëÏÄ 304 - Not Modified",                    0 },
+         { "ëÏÄ 305 - Use Proxy",                       0 },
+         { "ëÏÄ 307 - Moved Temporarily",               0 },
+         { "ëÏÄ 400 - Bad Request",                     0 },
+         { "ëÏÄ 401 - Unauthorized",                    0 },
+         { "ëÏÄ 402 - Payment Required",                0 },
+         { "ëÏÄ 403 - Forbidden",                       0 },
+         { "ëÏÄ 404 - Not Found",                       0 },
+         { "ëÏÄ 405 - Method Not Allowed",              0 },
+         { "ëÏÄ 406 - Not Acceptable",                  0 },
+         { "ëÏÄ 407 - Proxy Authentication Required",   0 },
+         { "ëÏÄ 408 - Request Timeout",                 0 },
+         { "ëÏÄ 409 - Conflict",                        0 },
+         { "ëÏÄ 410 - Gone",                            0 },
+         { "ëÏÄ 411 - Length Required",                 0 },
+         { "ëÏÄ 412 - Precondition Failed",             0 },
+         { "ëÏÄ 413 - Request Entity Too Large",        0 },
+         { "ëÏÄ 414 - Request-URI Too Long",            0 },
+         { "ëÏÄ 415 - Unsupported Media Type",          0 },
+         { "ëÏÄ 416 - Requested Range Not Satisfiable", 0 },
+         { "ëÏÄ 417 - Expectation Failed",              0 },
+         { "ëÏÄ 500 - Internal Server Error",           0 },
+         { "ëÏÄ 501 - Not Implemented",                 0 },
+         { "ëÏÄ 502 - Bad Gateway",                     0 },
+         { "ëÏÄ 503 - Service Unavailable",             0 },
+         { "ëÏÄ 504 - Gateway Timeout",                 0 },
+         { "ëÏÄ 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "óÔÁÔÉÓÔÉËÁ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÅÒ×ÅÒÁ";
+char *msg_h_other = "ðÒÏÞÉÅ";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "îÅÒÁÓÐÏÚÎÁÎÎÙÅ/ÎÅÉÚ×ÅÓÔÎÙÅ",       0,0,0 },
+{ IDX_3C('c','o','m'),    "óûá ËÏÍÍÅÒÞÅÓËÉÅ",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "óûá ÏÂÒÁÚÏ×ÁÔÅÌØÎÙÅ",              0,0,0 },
+{ IDX_3C('g','o','v'),    "óûá ÐÒÁ×ÉÔÅÌØÓÔ×ÅÎÎÙÅ",            0,0,0 },
+{ IDX_3C('i','n','t'),    "éÎÔÅÒÎÁÃÉÏÎÁÌØÎÙÅ (int)",          0,0,0 },
+{ IDX_3C('m','i','l'),    "óûá ×ÏÅÎÎÙÅ",                      0,0,0 },
+{ IDX_3C('n','e','t'),    "óÅÔÅ×ÙÅ ÏÒÇÁÎÉÚÁÃÉÉ",              0,0,0 },
+{ IDX_3C('o','r','g'),    "îÅËÏÍÍÅÒÞÅÓËÉÅ ÏÒÇÁÎÉÚÁÃÉÉ",       0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"óÔÁÒÙÊ Arpanet (arpa)",            0,0,0 },
+{ IDX_4C('n','a','t','o'),"úÏÎÁ îáôï (nato)",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "áÎÄÏÒÒÁ",                          0,0,0 },
+{ IDX_2C('a','e'),        "ïÂßÅÄÉΣÎÎÙÅ áÒÁÂÓËÉÅ üÍÉÒÁÔÙ",    0,0,0 },
+{ IDX_2C('a','f'),        "áÆÇÁÎÉÓÔÁÎ",                       0,0,0 },
+{ IDX_2C('a','g'),        "áÎÔÉÇÕÁ É âÁÒÂÕÄÁ",                0,0,0 },
+{ IDX_2C('a','i'),        "áÎÇÕÉÌÌÁ",                         0,0,0 },
+{ IDX_2C('a','l'),        "áÌÂÁÎÉÑ",                          0,0,0 },
+{ IDX_2C('a','m'),        "áÒÍÅÎÉÑ",                          0,0,0 },
+{ IDX_2C('a','n'),        "îÉÄÅÒÌÁÎÄÓËÉÅ áÎÔÉÌÌÙ",            0,0,0 },
+{ IDX_2C('a','o'),        "áÎÇÏÌÁ",                           0,0,0 },
+{ IDX_2C('a','q'),        "áÎÔÁÒËÔÉËÁ",                       0,0,0 },
+{ IDX_2C('a','r'),        "áÒÇÅÎÔÉÎÁ",                        0,0,0 },
+{ IDX_2C('a','s'),        "áÍÅÒÉËÁÎÓËÏÅ óÁÍÏÁ",               0,0,0 },
+{ IDX_2C('a','t'),        "á×ÓÔÒÉÑ",                          0,0,0 },
+{ IDX_2C('a','u'),        "á×ÓÔÒÁÌÉÑ",                        0,0,0 },
+{ IDX_2C('a','w'),        "áÒÕÂÁ",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "áÚÅÒÂÁÊÄÖÁÎ",                      0,0,0 },
+{ IDX_2C('b','a'),        "âÏÓÎÉÑ É çÅÒÃÅÇÏ×ÉÎÁ",             0,0,0 },
+{ IDX_2C('b','b'),        "âÁÒÂÁÄÏÓ",                         0,0,0 },
+{ IDX_2C('b','d'),        "âÁÎÇÌÁÄÅÛ",                        0,0,0 },
+{ IDX_2C('b','e'),        "âÅÌØÇÉÑ",                          0,0,0 },
+{ IDX_2C('b','f'),        "âÕÒËÉÎÁ æÁÓÏ",                     0,0,0 },
+{ IDX_2C('b','g'),        "âÏÌÇÁÒÉÑ",                         0,0,0 },
+{ IDX_2C('b','h'),        "âÁÈÒÅÊÎ",                          0,0,0 },
+{ IDX_2C('b','i'),        "âÕÒÕÎÄÉ",                          0,0,0 },
+{ IDX_2C('b','j'),        "âÅÎÉÎ",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "âÅÒÍÕÄÓËÉÅ ÏÓÔÒÏ×Á",               0,0,0 },
+{ IDX_2C('b','n'),        "âÒÕÎÅÊ äÁÒÕÓÓÁÌÁÍ",                0,0,0 },
+{ IDX_2C('b','o'),        "âÏÌÉ×ÉÑ",                          0,0,0 },
+{ IDX_2C('b','r'),        "âÒÁÚÉÌÉÑ",                         0,0,0 },
+{ IDX_2C('b','s'),        "âÁÇÁÍÙ",                           0,0,0 },
+{ IDX_2C('b','t'),        "âÕÔÁÎ",                            0,0,0 },
+{ IDX_2C('b','v'),        "ïÓÔÒÏ× âÕ×ÅÔ",                     0,0,0 },
+{ IDX_2C('b','w'),        "âÏÔÓ×ÁÎÁ",                         0,0,0 },
+{ IDX_2C('b','y'),        "âÅÌÁÒÕÓØ",                         0,0,0 },
+{ IDX_2C('b','z'),        "âÅÌÉÚ",                            0,0,0 },
+{ IDX_2C('c','a'),        "ëÁÎÁÄÁ",                           0,0,0 },
+{ IDX_2C('c','c'),        "ëÏËÏÓÏ×ÙÅ ïÓÔÒÏ×Á",                0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "ãÅÎÔÒÁÌØÎÏÁÆÒÉËÁÎÓËÁÑ ÒÅÓÐÕÂÌÉËÁ", 0,0,0 },
+{ IDX_2C('c','g'),        "ëÏÎÇÏ",                            0,0,0 },
+{ IDX_2C('c','h'),        "û×ÅÊÃÁÒÉÑ",                        0,0,0 },
+{ IDX_2C('c','i'),        "ðÏÂÅÒÅÖØÅ é×ÏÒÉ",                  0,0,0 },
+{ IDX_2C('c','k'),        "ïÓÔÒÏ×Á ëÕËÁ",                     0,0,0 },
+{ IDX_2C('c','l'),        "þÉÌÉ",                             0,0,0 },
+{ IDX_2C('c','m'),        "ëÁÍÅÒÕÎ",                          0,0,0 },
+{ IDX_2C('c','n'),        "ëÉÔÁÊ",                            0,0,0 },
+{ IDX_2C('c','o'),        "ëÏÌÕÍÂÉÑ",                         0,0,0 },
+{ IDX_2C('c','r'),        "ëÏÓÔÁ-òÉËÁ",                       0,0,0 },
+{ IDX_2C('c','u'),        "ëÕÂÁ",                             0,0,0 },
+{ IDX_2C('c','v'),        "ëÁÐÅ-÷ÅÒÄÅ",                       0,0,0 },
+{ IDX_2C('c','x'),        "ïÓÔÒÏ× òÏÖÄÅÓÔ×Á",                 0,0,0 },
+{ IDX_2C('c','y'),        "ëÉÐÒ",                             0,0,0 },
+{ IDX_2C('c','z'),        "òÅÓÐÕÂÌÉËÁ þÅÈÉÑ",                 0,0,0 },
+{ IDX_2C('d','e'),        "çÅÒÍÁÎÉÑ",                         0,0,0 },
+{ IDX_2C('d','j'),        "äÖÉÂÕÔÉ",                          0,0,0 },
+{ IDX_2C('d','k'),        "äÁÎÉÑ",                            0,0,0 },
+{ IDX_2C('d','m'),        "äÏÍÉÎÉËÁ",                         0,0,0 },
+{ IDX_2C('d','o'),        "äÏÍÉÎÉËÁÎÓËÁÑ òÅÓÐÕÂÌÉËÁ",         0,0,0 },
+{ IDX_2C('d','z'),        "áÌÇÅÒÉÑ",                          0,0,0 },
+{ IDX_2C('e','c'),        "üË×ÁÄÏÒ",                          0,0,0 },
+{ IDX_2C('e','e'),        "üÓÔÏÎÉÑ",                          0,0,0 },
+{ IDX_2C('e','g'),        "åÇÉÐÅÔ",                           0,0,0 },
+{ IDX_2C('e','h'),        "úÁÐÁÄÎÁÑ óÁÈÁÒÁ",                  0,0,0 },
+{ IDX_2C('e','r'),        "üÒÉÔÒÅÑ",                          0,0,0 },
+{ IDX_2C('e','s'),        "éÓÐÁÎÉÑ",                          0,0,0 },
+{ IDX_2C('e','t'),        "üÆÉÏÐÉÑ",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "æÉÎÌÑÎÄÉÑ",                        0,0,0 },
+{ IDX_2C('f','j'),        "æÉÄÖÉ",                            0,0,0 },
+{ IDX_2C('f','k'),        "æÏÌËÌÅÎÄÓËÉÅ (íÁÌØ×ÉÎÓËÉÅ) Ï-×Á",  0,0,0 },
+{ IDX_2C('f','m'),        "íÉËÒÏÎÅÚÉÑ",                       0,0,0 },
+{ IDX_2C('f','o'),        "æÁÒÅÒÓËÉÅ ïÓÔÒÏ×Á",                0,0,0 },
+{ IDX_2C('f','r'),        "æÒÁÎÃÉÑ",                          0,0,0 },
+{ IDX_2C('g','a'),        "çÁÂÏÎ",                            0,0,0 },
+{ IDX_2C('g','b'),        "÷ÅÌÉËÏÂÒÉÔÁÎÉÑ (UK)",              0,0,0 },
+{ IDX_2C('g','d'),        "çÒÅÎÁÄÁ",                          0,0,0 },
+{ IDX_2C('g','e'),        "çÒÕÚÉÑ",                           0,0,0 },
+{ IDX_2C('g','f'),        "æÒÁÎÃÕÚÓËÁÑ ç×ÉÁÎÁ",               0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "çÁÎÁ",                             0,0,0 },
+{ IDX_2C('g','i'),        "çÉÂÒÁÌÔÁÒ",                        0,0,0 },
+{ IDX_2C('g','l'),        "çÒÅÎÌÁÎÄÉÑ",                       0,0,0 },
+{ IDX_2C('g','m'),        "çÁÍÂÉÑ",                           0,0,0 },
+{ IDX_2C('g','n'),        "ç×ÉÎÅÑ",                           0,0,0 },
+{ IDX_2C('g','p'),        "ç×ÁÄÅÌÕÐÁ",                        0,0,0 },
+{ IDX_2C('g','q'),        "üË×ÁÔÏÒÉÁÌØÎÁÑ ç×ÉÎÅÑ",            0,0,0 },
+{ IDX_2C('g','r'),        "çÒÅÃÉÑ",                           0,0,0 },
+{ IDX_2C('g','s'),        "àÖÎ. çÅÏÒÇÉÑ É àÖÎ. óÁÎÄ×ÉÞÅ×Ù Ï-×Á", 0,0,0 },
+{ IDX_2C('g','t'),        "ç×ÁÔÅÍÁÌÁ",                        0,0,0 },
+{ IDX_2C('g','u'),        "çÕÁÍ",                             0,0,0 },
+{ IDX_2C('g','w'),        "ç×ÉÎÅÑ-âÉÓÁÕ",                     0,0,0 },
+{ IDX_2C('g','y'),        "çÁÊÁÎÁ",                           0,0,0 },
+{ IDX_2C('h','k'),        "çÏÎËÏÎÇ",                          0,0,0 },
+{ IDX_2C('h','m'),        "ïÓÔÒÏ×Á èÅÒÄÁ É íÁËÄÏÎÁÌØÄÁ",      0,0,0 },
+{ IDX_2C('h','n'),        "çÏÎÄÕÒÁÓ",                         0,0,0 },
+{ IDX_2C('h','r'),        "èÏÒ×ÁÔÉÑ",                         0,0,0 },
+{ IDX_2C('h','t'),        "çÁÉÔÉ",                            0,0,0 },
+{ IDX_2C('h','u'),        "÷ÅÎÇÒÉÑ",                          0,0,0 },
+{ IDX_2C('i','d'),        "éÎÄÏÎÅÚÉÑ",                        0,0,0 },
+{ IDX_2C('i','e'),        "éÒÌÁÎÄÉÑ",                         0,0,0 },
+{ IDX_2C('i','l'),        "éÚÒÁÉÌØ",                          0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "éÎÄÉÑ",                            0,0,0 },
+{ IDX_2C('i','o'),        "âÒÉÔÁÎÓËÁÑ ÔÅÒÒ. × éÎÄÉÊÓË. ÏËÅÁÎÅ", 0,0,0 },
+{ IDX_2C('i','q'),        "éÒÁË",                             0,0,0 },
+{ IDX_2C('i','r'),        "éÒÁÎ",                             0,0,0 },
+{ IDX_2C('i','s'),        "éÓÌÁÎÄÉÑ",                         0,0,0 },
+{ IDX_2C('i','t'),        "éÔÁÌÉÑ",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "ñÍÁÊËÁ",                           0,0,0 },
+{ IDX_2C('j','o'),        "éÏÒÄÁÎÉÑ",                         0,0,0 },
+{ IDX_2C('j','p'),        "ñÐÏÎÉÑ",                           0,0,0 },
+{ IDX_2C('k','e'),        "ëÅÎÉÑ",                            0,0,0 },
+{ IDX_2C('k','g'),        "ëÙÒÇÙÚÓÔÁÎ",                       0,0,0 },
+{ IDX_2C('k','h'),        "ëÁÍÂÏÄÖÁ",                         0,0,0 },
+{ IDX_2C('k','i'),        "ëÉÒÉÂÁÔÉ",                         0,0,0 },
+{ IDX_2C('k','m'),        "ëÁÍÏÒÓËÉÅ ÏÓÔÒÏ×Á",                0,0,0 },
+{ IDX_2C('k','n'),        "ïÓÔÒÏ×Á Ó×ÑÔÏÇÏ ëÉÔÓÁ É îÅ×ÉÓÁ",   0,0,0 },
+{ IDX_2C('k','p'),        "óÅ×ÅÒÎÁÑ ëÏÒÅÑ",                   0,0,0 },
+{ IDX_2C('k','r'),        "àÖÎÁÑ ëÏÒÅÑ",                      0,0,0 },
+{ IDX_2C('k','w'),        "ëÕ×ÅÊÔ",                           0,0,0 },
+{ IDX_2C('k','y'),        "ëÁÊÍÁÎÏ×ÙÅ ÏÓÔÒÏ×Á",               0,0,0 },
+{ IDX_2C('k','z'),        "ëÁÚÁÈÓÔÁÎ",                        0,0,0 },
+{ IDX_2C('l','a'),        "ìÁÏÓ",                             0,0,0 },
+{ IDX_2C('l','b'),        "ìÅÂÁÎÏÎ",                          0,0,0 },
+{ IDX_2C('l','c'),        "óÁÎÔÁ ìÀÞÉÑ",                      0,0,0 },
+{ IDX_2C('l','i'),        "ìÉÈÔÅÎÛÔÅÊÎ",                      0,0,0 },
+{ IDX_2C('l','k'),        "ûÒÉ ìÁÎËÁ",                        0,0,0 },
+{ IDX_2C('l','r'),        "ìÉÂÅÒÉÑ",                          0,0,0 },
+{ IDX_2C('l','s'),        "ìÅÓÏÔÏ",                           0,0,0 },
+{ IDX_2C('l','t'),        "ìÉÔÁÎÉÑ",                          0,0,0 },
+{ IDX_2C('l','u'),        "ìÀËÓÅÍÂÕÒÇ",                       0,0,0 },
+{ IDX_2C('l','v'),        "ìÁÔ×ÉÑ",                           0,0,0 },
+{ IDX_2C('l','y'),        "ìÉ×ÉÑ",                            0,0,0 },
+{ IDX_2C('m','a'),        "íÁÒÏËËÏ",                          0,0,0 },
+{ IDX_2C('m','c'),        "íÏÎÁËÏ",                           0,0,0 },
+{ IDX_2C('m','d'),        "íÏÌÄÁ×ÉÑ",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "íÁÄÁÇÁÓËÁÒ",                       0,0,0 },
+{ IDX_2C('m','h'),        "íÁÒÛÁÌÌÏ×Ù ÏÓÔÒÏ×Á",               0,0,0 },
+{ IDX_2C('m','k'),        "íÁËÅÄÏÎÉÑ",                        0,0,0 },
+{ IDX_2C('m','l'),        "íÁÌÉ",                             0,0,0 },
+{ IDX_2C('m','m'),        "íÁÊÁÎÍÁÒ",                         0,0,0 },
+{ IDX_2C('m','n'),        "íÏÎÇÏÌÉÑ",                         0,0,0 },
+{ IDX_2C('m','o'),        "íÁËËÁÕ",                           0,0,0 },
+{ IDX_2C('m','p'),        "óÅ×ÅÒÎÙÅ íÁÒÉÁÎÓËÉÅ ÏÓÔÒÏ×Á",      0,0,0 },
+{ IDX_2C('m','q'),        "íÁÒÔÉÎÉËÁ",                        0,0,0 },
+{ IDX_2C('m','r'),        "íÁ×ÒÉÔÁÎÉÑ",                       0,0,0 },
+{ IDX_2C('m','s'),        "íÏÎÓÅÒÒÁÔ",                        0,0,0 },
+{ IDX_2C('m','t'),        "íÁÌØÔÁ",                           0,0,0 },
+{ IDX_2C('m','u'),        "íÁ×ÒÉÔÁÎÉÑ",                       0,0,0 },
+{ IDX_2C('m','v'),        "íÁÌØÄÉ×ÓËÁÑ ÒÅÓÐÕÂÌÉËÁ",           0,0,0 },
+{ IDX_2C('m','w'),        "íÁÌÁ×É",                           0,0,0 },
+{ IDX_2C('m','x'),        "íÅËÓÉËÁ",                          0,0,0 },
+{ IDX_2C('m','y'),        "íÁÌÁÊÚÉÑ",                         0,0,0 },
+{ IDX_2C('m','z'),        "íÏÚÁÍÂÉË",                         0,0,0 },
+{ IDX_2C('n','a'),        "îÁÍÉÂÉÑ",                          0,0,0 },
+{ IDX_2C('n','c'),        "îÏ×ÁÑ ëÁÌÅÄÏÎÉÑ",                  0,0,0 },
+{ IDX_2C('n','e'),        "îÉÇÅÒ",                            0,0,0 },
+{ IDX_2C('n','f'),        "ïÓÔÒÏ× îÏÒÆÏÌË",                   0,0,0 },
+{ IDX_2C('n','g'),        "îÉÇÅÒÉÑ",                          0,0,0 },
+{ IDX_2C('n','i'),        "îÉËÁÒÁÇÕÁ",                        0,0,0 },
+{ IDX_2C('n','l'),        "îÉÄÅÒÌÁÎÄÙ",                       0,0,0 },
+{ IDX_2C('n','o'),        "îÏÒ×ÅÇÉÑ",                         0,0,0 },
+{ IDX_2C('n','p'),        "îÅÐÁÌ",                            0,0,0 },
+{ IDX_2C('n','r'),        "îÁÕÒÕ",                            0,0,0 },
+{ IDX_2C('n','u'),        "îÉÕÜ",                             0,0,0 },
+{ IDX_2C('n','z'),        "îÏ×ÁÑ úÅÌÁÎÄÉÑ",                   0,0,0 },
+{ IDX_2C('o','m'),        "ïÍÁÎ",                             0,0,0 },
+{ IDX_2C('p','a'),        "ðÁÎÁÍÁ",                           0,0,0 },
+{ IDX_2C('p','e'),        "ðÅÒÕ",                             0,0,0 },
+{ IDX_2C('p','f'),        "æÒÁÎÃÕÚÓËÁÑ ðÏÌÉÎÅÚÉÑ",            0,0,0 },
+{ IDX_2C('p','g'),        "ðÁÐÕÁ îÏ×ÁÑ ç×ÉÎÅÑ",               0,0,0 },
+{ IDX_2C('p','h'),        "æÉÌÉÐÐÉÎÙ",                        0,0,0 },
+{ IDX_2C('p','k'),        "ðÁËÉÓÔÁÎ",                         0,0,0 },
+{ IDX_2C('p','l'),        "ðÏÌØÛÁ",                           0,0,0 },
+{ IDX_2C('p','m'),        "ïÓÔÒÏ× Ó×ÑÔÏÇÏ ðØÅÒÁ É íÉÇÅÌÑ",    0,0,0 },
+{ IDX_2C('p','n'),        "ðÉÔËËÅÒÎ",                         0,0,0 },
+{ IDX_2C('p','r'),        "ðÕÜÒÔÏ òÉËÏ",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "ðÏÒÔÕÇÁÌÉÑ",                       0,0,0 },
+{ IDX_2C('p','w'),        "ðÁÌÁÕ",                            0,0,0 },
+{ IDX_2C('p','y'),        "ðÁÒÁÇ×ÁÊ",                         0,0,0 },
+{ IDX_2C('q','a'),        "ë×ÁÔÁÒ",                           0,0,0 },
+{ IDX_2C('r','e'),        "ïÓÔÒÏ× òÅÀÎØÏÎ",                   0,0,0 },
+{ IDX_2C('r','o'),        "òÕÍÙÎÉÑ",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "òÏÓÓÉÊÓËÁÑ æÅÄÅÒÁÃÉÑ",             0,0,0 },
+{ IDX_2C('r','w'),        "òÕÁÎÁ",                            0,0,0 },
+{ IDX_2C('s','a'),        "óÁÕÄÏ×ÓËÁÑ áÒÁ×ÉÑ",                0,0,0 },
+{ IDX_2C('s','b'),        "óÏÌÏÍÏÎÏ×Ù ÏÓÔÒÏ×Á",               0,0,0 },
+{ IDX_2C('s','c'),        "óÅÊÛÅÌØÓËÉÅ ÏÓÔÒÏ×Á",              0,0,0 },
+{ IDX_2C('s','d'),        "óÕÄÁÎ",                            0,0,0 },
+{ IDX_2C('s','e'),        "û×ÅÃÉÑ",                           0,0,0 },
+{ IDX_2C('s','g'),        "óÉÎÇÁÐÕÒ",                         0,0,0 },
+{ IDX_2C('s','h'),        "ïÓÔÒÏ× Ó×ÑÔÏÊ åÌÅÎÙ",              0,0,0 },
+{ IDX_2C('s','i'),        "óÌÏ×ÅÎÉÑ",                         0,0,0 },
+{ IDX_2C('s','j'),        "ïÓÔÒÏ×Á ó×ÁÌÂÁÒÄ É ñÎ-íÁÊÅÎ",      0,0,0 },
+{ IDX_2C('s','k'),        "òÅÓÐÕÂÌÉËÁ óÌÏ×ÁËÉÑ",              0,0,0 },
+{ IDX_2C('s','l'),        "óØÅÒÒÁ ìÅÏÎÅ",                     0,0,0 },
+{ IDX_2C('s','m'),        "óÁΠíÁÒÉÎÏ",                       0,0,0 },
+{ IDX_2C('s','n'),        "óÅÎÅÇÁÌ",                          0,0,0 },
+{ IDX_2C('s','o'),        "óÏÍÁÌÉ",                           0,0,0 },
+{ IDX_2C('s','r'),        "óÕÒÉÎÁÍ",                          0,0,0 },
+{ IDX_2C('s','t'),        "óÁÏ ôÏÍ É ðÒÉÎÃÉÐÏ×Ù ÏÓÔÒÏ×Á",     0,0,0 },
+{ IDX_2C('s','u'),        "âÙ×ÛÉÊ óóóò (SU)",                 0,0,0 },
+{ IDX_2C('s','v'),        "óÁÌØ×ÁÄÏÒ",                        0,0,0 },
+{ IDX_2C('s','y'),        "óÉÒÉÑ",                            0,0,0 },
+{ IDX_2C('s','z'),        "ó×ÁÚÉÌÁÎÄ",                        0,0,0 },
+{ IDX_2C('t','c'),        "ïÓÔÒÏ×Á ôÀÒËÓ É ëÁÊËÏÓ",           0,0,0 },
+{ IDX_2C('t','d'),        "òÅÓÐÕÂÌÉËÁ þÁÄ",                   0,0,0 },
+{ IDX_2C('t','f'),        "àÖÎÙÅ ÆÒÁÎÃÕÚÓËÉÅ ÔÅÒÒÉÔÏÒÉÉ",     0,0,0 },
+{ IDX_2C('t','g'),        "ôÏÇÏ",                             0,0,0 },
+{ IDX_2C('t','h'),        "ôÁÉÌÁÎÄ",                          0,0,0 },
+{ IDX_2C('t','j'),        "ôÁÄÖÉËÉÓÔÁÎ",                      0,0,0 },
+{ IDX_2C('t','k'),        "ïÓÔÒÏ×Á ôÏËÅÌÁÕ",                  0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "ôÕÒËÍÅÎÉÓÔÁÎ",                     0,0,0 },
+{ IDX_2C('t','n'),        "ôÕÎÉÓ",                            0,0,0 },
+{ IDX_2C('t','o'),        "ïÓÔÒÏ×Á ôÏÎÇÁ",                    0,0,0 },
+{ IDX_2C('t','p'),        "÷ÏÓÔÏÞÎÙÊ ôÉÍÏÒ",                  0,0,0 },
+{ IDX_2C('t','r'),        "ôÕÒÃÉÑ",                           0,0,0 },
+{ IDX_2C('t','t'),        "ôÒÉÎÉÄÁÄ É ôÏÂÁÇÏ",                0,0,0 },
+{ IDX_2C('t','v'),        "ôÕ×ÁÌÁÕ",                          0,0,0 },
+{ IDX_2C('t','w'),        "ôÁÊ×ÁÎØ",                          0,0,0 },
+{ IDX_2C('t','z'),        "ôÁÎÚÁÎÉÑ",                         0,0,0 },
+{ IDX_2C('u','a'),        "õËÒÁÉÎÁ",                          0,0,0 },
+{ IDX_2C('u','g'),        "õÇÁÎÄÁ",                           0,0,0 },
+{ IDX_2C('u','k'),        "ïÂßÅÄÉΣÎÎÏÅ ëÏÒÏÌÅ×ÓÔ×Ï",         0,0,0 },
+{ IDX_2C('u','m'),        "íÁÌÙÅ ×ÎÅÛÎÉÅ ÏÓÔÒÏ×Á (óûá)",      0,0,0 },
+{ IDX_2C('u','s'),        "óÏÅÄÉΣÎÎÙÅ ûÔÁÔÙ",                0,0,0 },
+{ IDX_2C('u','y'),        "õÒÕÇ×ÁÊ",                          0,0,0 },
+{ IDX_2C('u','z'),        "õÚÂÅËÉÓÔÁÎ",                       0,0,0 },
+{ IDX_2C('v','a'),        "÷ÁÔÉËÁÎ",                          0,0,0 },
+{ IDX_2C('v','c'),        "ï-×Á Ó×. ÷ÉÎÓÅÎÔÁ É çÒÅÎÁÄÉÎÙ",    0,0,0 },
+{ IDX_2C('v','e'),        "÷ÅÎÅÓÕÜÌÁ",                        0,0,0 },
+{ IDX_2C('v','g'),        "÷ÉÒÇÉÎÓËÉÅ ÏÓÔÒÏ×Á (âÒÉÔÁÎÉÑ)",    0,0,0 },
+{ IDX_2C('v','i'),        "÷ÉÒÇÉÎÓËÉÅ ÏÓÔÒÏ×Á (óûá)",         0,0,0 },
+{ IDX_2C('v','n'),        "÷ØÅÔÎÁÍ",                          0,0,0 },
+{ IDX_2C('v','u'),        "÷ÁÎÕÁÔÕ",                          0,0,0 },
+{ IDX_2C('w','f'),        "ïÓÔÒÏ×Á ÷ÜÌÌÉÓ É æÕÔÕÎÁ",          0,0,0 },
+{ IDX_2C('w','s'),        "óÁÍÏÁ",                            0,0,0 },
+{ IDX_2C('y','e'),        "êÅÍÅÎ",                            0,0,0 },
+{ IDX_2C('y','t'),        "ïÓÔÒÏ× íÁÊÏÔÔÁ",                   0,0,0 },
+{ IDX_2C('y','u'),        "àÇÏÓÌÁ×ÉÑ",                        0,0,0 },
+{ IDX_2C('z','a'),        "àÖÎÁÑ áÆÒÉËÁ",                     0,0,0 },
+{ IDX_2C('z','m'),        "úÁÍÂÉÑ",                           0,0,0 },
+{ IDX_2C('z','w'),        "úÉÍÂÁÂ×Å",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.serbian b/lang/webalizer_lang.serbian
new file mode 100644 (file)
index 0000000..823d630
--- /dev/null
@@ -0,0 +1,629 @@
+/*
+   webalizer_lang.serbian
+
+   Webalizer V2.0x Language Support file for Serbian.
+   12-Jun-1999 Original translation by Goran Opacic and Sanja Markovic
+   13-Oct-2000 updated for v2.0 by Boris Drajer <bdrajer@inet.co.yu>
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Serbian";
+char *langcode  = "sr";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Period sumiranja";
+char *msg_hhdr_gt = "Generisano";
+
+/* main index strings */
+char *msg_main_us = "Pregled pristupa za";
+/* char *msg_main_per= "Poslednjih 12 meseci"; */
+char *msg_main_per= "Pregled po mesecima";
+char *msg_main_sum= "Pregled po mesecima";
+char *msg_main_da = "Dnevni prosek";
+char *msg_main_mt = "Mesecni zbirovi";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Pristupi po danu za";
+char *msg_hmth_hu = "Pristupi po satu za";
+
+/* table header strings */
+char *msg_h_by    = "po";
+char *msg_h_avg   = "prosek";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Ukupno";
+char *msg_h_totals= "Ukupno za sve";
+char *msg_h_day   = "Dan";
+char *msg_h_mth   = "Mesec";
+char *msg_h_hour  = "Sat";
+char *msg_h_hits  = "Pristupa";
+char *msg_h_pages = "Strana";
+char *msg_h_visits= "Poseta";
+char *msg_h_files = "Fajlova";
+char *msg_h_sites = "Racunara";
+char *msg_h_xfer  = "KB";
+char *msg_h_hname = "Racunar";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Korisnicki program";
+char *msg_h_ref   = "Referer";
+char *msg_h_ctry  = "Zemlja";
+char *msg_h_search= "Tekst pretrazivanja";
+char *msg_h_uname = "Korisnik";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Dnevna statistika";
+char *msg_hlnk_hs = "Statistika po satu";
+char *msg_hlnk_u  = "URL-ovi";
+char *msg_hlnk_s  = "Racunari";
+char *msg_hlnk_a  = "Browseri";
+char *msg_hlnk_c  = "Zemlje";
+char *msg_hlnk_r  = "Referisanja";
+char *msg_hlnk_en = "Ulaz";
+char *msg_hlnk_ex = "Izlaz";
+char *msg_hlnk_sr = "Pretraga";
+char *msg_hlnk_i  = "Korisnici";
+
+/* monthly total table */
+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_us = "Ukupno razlicitih racunara";
+char *msg_mtot_ur = "Ukupno razlicitih referisanja";
+char *msg_mtot_ua = "Ukupno razlicitih browsera";
+char *msg_mtot_uu = "Ukupno razlicitih URL-ova";
+char *msg_mtot_ui = "Ukupno razlicitih korisnickih imena";
+char *msg_mtot_mhd= "Pristupa na dan";
+char *msg_mtot_mhh= "Pristupa na sat";
+char *msg_mtot_mfd= "Fajlova na dan";
+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_rc = "Pristupa po kodu";
+
+/* daily total table */
+char *msg_dtot_ds = "Dnevna statistika za";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistika po satu za";
+
+/* country pie chart */
+char *msg_ctry_use= "Pristup po zemljama za";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Prvih";
+char *msg_top_of  = "od";
+char *msg_top_s   = "racunara";
+char *msg_top_u   = "URL-ova";
+char *msg_top_r   = "referisanja";
+char *msg_top_a   = "korisnickih programa";
+char *msg_top_c   = "zemalja";
+char *msg_top_en  = "ulaznih strana";
+char *msg_top_ex  = "izlaznih strana";
+char *msg_top_sr  = "tekstova pretrazivanja";
+char *msg_top_i   = "korisnickih imena";
+char *msg_v_sites = "Pregled svih racunara";
+char *msg_v_urls  = "Pregled svih URL-ova";
+char *msg_v_refs  = "Pregled svih referisanja";
+char *msg_v_agents= "Pregled svih korisnickih programa";
+char *msg_v_search= "Pregled svih tekstova pretrazivanja";
+char *msg_v_users = "Pregled svih korisnickih imena";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maj", "Jun",
+                    "Jul", "Avg", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januar",  "Februar", "Mart",   "April",
+                    "Maj",      "Jun",     "Jul",    "Avgust",
+                    "Septembar","Oktobar",  "Novembar","Decembar"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Statistika pristupa za";
+char *msg_h_other = "Ostalo";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Nedefinisano/Nepoznato",           0,0,0 },
+{ IDX_3C('c','o','m'),    "Komercijalni (com)",               0,0,0 },
+{ IDX_3C('e','d','u'),    "Obrazovni (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "SAD vlada (gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Internacionalni (int)",            0,0,0 },
+{ IDX_3C('m','i','l'),    "SAD vojni (mil)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "Mrezni domeni (net)",              0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizacije (org)",               0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Stari Arpanet (arpa)",             0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.simplified_chinese b/lang/webalizer_lang.simplified_chinese
new file mode 100644 (file)
index 0000000..1cca907
--- /dev/null
@@ -0,0 +1,630 @@
+/*
+   webalizer_lang.simplified_chinese
+
+   Webalizer V2.0x Language Support file for Simplified Chinese
+                   (used in Mainland China).
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Simplified Chinese";
+char *langcode  = "zh-Hans";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "Ìõ¼Ç¼";
+char *msg_addresses="µØÖ·";
+char *msg_ignored = "Ìõ±»ºöÂÔ";
+char *msg_bad     = "ÌõÎÞЧ";
+char *msg_in      = "¹²ÓÃʱ";
+char *msg_seconds = "Ãë";
+
+/* progress and setup error messages */
+char *msg_log_err = "´íÎó: ²»ÄÜ´ò¿ªÈÕÖ¾Îļþ";
+char *msg_log_use = "ʹÓÃÈÕÖ¾Îļþ";
+char *msg_dir_err = "´íÎó: ²»ÄܸıäĿ¼µ½";
+char *msg_dir_use = "Êä³ö½á¹ûµ½";
+char *msg_cur_dir = "µ±Ç°Ä¿Â¼";
+char *msg_hostname= "²úÉú±¨±íµÄÖ÷»úÃûÊÇ";
+char *msg_ign_hist= "ºöÂÔÒÔÇ°µÄÀúÊ·ÐÅÏ¢...";
+char *msg_no_hist = "ûÓÐÕÒµ½ÀúÊ·ÐÅÏ¢Îļþ...";
+char *msg_get_hist= "ÕýÔÚ¶ÁÈ¡ÀúÊ·ÐÅÏ¢Îļþ...";
+char *msg_put_hist= "ÕýÔÚ±£´æÀúÊ·ÐÅÏ¢Îļþ...";
+char *msg_hist_err= "´íÎó: ²»ÄÜдÈëÀúÊ·ÐÅÏ¢Îļþ";
+char *msg_bad_hist= "´íÎó: ºöÂÔ·Ç·¨ÀúÊ·ÐÅÏ¢¼Ç¼";
+char *msg_bad_conf= "´íÎó: ²»ÄÜ´ò¿ªÅäÖÃÎļþ";
+char *msg_bad_key = "¾¯¸æ: ·Ç·¨¹Ø¼ü´Ê";
+char *msg_bad_date= "´íÎó: Ìø¹ý¼Ç¼(ÈÕÆÚ´íÎó)";
+char *msg_ign_nscp= "Ìø¹ý Netscape Í·¼Ç¼";
+char *msg_bad_rec = "Ìø¹ý´íÎó¼Ç¼";
+char *msg_no_vrec = "ûÓÐÕÒµ½ºÏ·¨¼Ç¼!";
+char *msg_gen_rpt = "ÕýÔÚÉú³É±¨±í ---- Îª ";
+char *msg_gen_sum = "ÕýÔÚÉú³É×ۺϱ¨±í";
+char *msg_get_data= "ÕýÔÚ¶ÁÈ¡ÉÏ´ÎÔËÐеÄÊý¾Ý...";
+char *msg_put_data= "ÕýÔÚ±£´æµ±Ç°ÔËÐеÄÊý¾Ý...";
+char *msg_no_data = "ûÓÐÕÒµ½ÉÏ´ÎÔËÐеÄÊý¾Ý...";
+char *msg_bad_data= "´íÎó: ²»ÄܶÁÈ¡ÉÏ´ÎÔËÐÐÊý¾Ý";
+char *msg_data_err= "´íÎó: ²»Äܱ£´æµ±Ç°ÔËÐÐÊý¾Ý";
+char *msg_dup_data= "¾¯¸æ: ·¢ÏÖ¿ÉÄܵÄÖظ´Êý¾Ý";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "ûÓÐÖ¸Ã÷ DNS »º´æÎļþ, Í˳ö...";
+char *msg_dns_nodb= "´íÎó: ²»ÄÜ´ò¿ª DNS »º´æÎļþ";
+char *msg_dns_nolk= "´íÎó: ²»ÄÜËø¶¨ DNS »º´æÎļþ";
+char *msg_dns_usec= "ÕýÔÚʹÓàDNS »º´æÎļþ";
+char *msg_dns_rslv= "DNS ²éÕÒ";
+char *msg_dns_none= "ûÓпÉÒÔ´¦ÀíµÄ¼Ç¼";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top Sites ±¨¸æÏî!";
+char *msg_nomem_tr= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top Referrers ±¨¸æÏî!";
+char *msg_nomem_tu= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top URLs ±¨¸æÏî!";
+char *msg_nomem_tc= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top Countries ±¨¸æÏî!";
+char *msg_nomem_ta= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top User Agents ±¨¸æÏî!";
+char *msg_nomem_tsr="²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top Search Strings ±¨¸æÏî!";
+char *msg_nomem_ti= "²»ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ, È¡Ïû Top Usernames ±¨¸æÏî!";
+char *msg_nomem_dh= "²»ÄÜÔö¼ÓÖ÷»ú½Úµã(ÿÈÕ), Ìø¹ý";
+char *msg_nomem_mh= "²»ÄÜÔö¼ÓÖ÷»ú½Úµã(ÿÔÂ), Ìø¹ý";
+char *msg_nomem_u = "²»ÄÜÔö¼Ó URL ½Úµã, Ìø¹ý";
+char *msg_nomem_a = "²»ÄÜÔö¼Ó User Agent ½Úµã, Ìø¹ý";
+char *msg_nomem_r = "²»ÄÜÔö¼Ó Referrer ½Úµã, Ìø¹ý";
+char *msg_nomem_sc= "²»ÄÜÔö¼Ó Search String ½Úµã, Ìø¹ý";
+char *msg_nomem_i = "²»ÄÜÔö¼Ó Username ½Úµã, Ìø¹ý";
+
+/* log record errors */
+char *msg_big_rec = "´íÎó: Ìø¹ýÌ«³¤µÄÈÕÖ¾¼Ç¼";
+char *msg_big_host= "¾¯¸æ: ½Ø¶ÏÌ«³¤µÄ hostname Óò";
+char *msg_big_date= "¾¯¸æ: ½Ø¶ÏÌ«³¤µÄ date Óò";
+char *msg_big_req = "¾¯¸æ: ½Ø¶ÏÌ«³¤µÄ request Óò";
+char *msg_big_ref = "¾¯¸æ: ½Ø¶ÏÌ«³¤µÄ referrer Óò";
+char *msg_big_user= "¾¯¸æ: ½Ø¶ÏÌ«³¤µÄ username Óò";
+char *msg_big_one = "¾¯¸æ: Ì«³¤µÄ×Ö·û´®";
+
+/* misc errors */
+char *msg_no_open = "´íÎó: ²»ÄÜ´ò¿ªÎļþ";
+
+/* Help display... */
+char *h_usage1 = "Ó÷¨";
+char *h_usage2 = "[Ñ¡Ïî] [ÈÕÖ¾Îļþ]";
+char *h_msg[]= {
+         "-h        = ÏÔʾ±¾°ïÖúÐÅÏ¢"                      ,
+         "-V        = ÏÔʾ±¾°æ±¾ÐÅÏ¢"                      ,
+         "-v        = be verbose"                          ,
+         "-d        = ÏÔʾ¸½¼ÓµÄµ÷ÊÔÐÅÏ¢"                  ,
+         "-F type   = ÈÕÖ¾ÀàÐÍ.  ÀàÐÍ= (clf | ftp | squid | w3c)",
+         "-f        = ºÏ²¢´ÎÐò´íÎó?(Fold sequence errors)" ,
+         "-i        = ºöÂÔÀúÊ·ÐÅÏ¢Îļþ"                    ,
+         "-p        = ±£³Ö״̬ÐÅÏ¢(ÔöÁ¿·½Ê½)"              ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = ²»ÏÔʾһ°ãÐÅÏ¢"                      ,
+         "-Q        = ²»ÏÔʾ*ËùÓÐ*ÐÅÏ¢"                    ,
+         "-Y        = ²»ÏÔʾ°´¹ú¼Ò·Ö²¼µÄͼ±í"              ,
+         "-G        = ²»ÏÔʾ°´Ð¡Ê±·Ö²¼µÄͼ±í"              ,
+         "-H        = ²»ÏÔʾ°´Ð¡Ê±·Ö²¼µÄͳ¼ÆÐÅÏ¢"          ,
+         "-L        = ²»ÏÔʾÑÕɫͼÀý"                      ,
+         "-l num    = ÔÚͼ±íÉÏʹÓànum Ìõ±³¾°Ïß"           ,
+         "-m num    = É趨·ÃÎʳ¬Ê±Öµ(µ¥Î»: Ãë)"            ,
+         "-T        = ÏÔʾ¶¨Ê±ÐÅÏ¢"                        ,
+         "-c file   = Ö¸¶¨ÅäÖÃÎļþΪ 'file'"               ,
+         "-n name   = Ö¸¶¨Ê¹ÓõÄÖ÷»úÃûΪ 'name'"           ,
+         "-o dir    = Ö¸¶¨Êä³öĿ¼Ϊ 'dir'"                ,
+         "-t name   = Ö¸¶¨±¨±í±êÌâΪ 'name'"               ,
+         "-a name   = Òþ²ØÃû×ÖΪ 'name' µÄÓû§´úÀí"        ,
+         "-r name   = Òþ²ØÃû×ÖΪ 'name' µÄÒýÓÃ"            ,
+         "-s name   = Òþ²ØÃû×ÖΪ 'name' µÄÕ¾µã"            ,
+         "-u name   = Òþ²ØÃû×ÖΪ 'name' µÄ URL"            ,
+         "-x name   = Ö¸¶¨Ê¹ÓõÄÎļþÀ©Õ¹ÃûΪ 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Ö¸¶¨Ê¹ÓõÄÒ³ÃæÀàÐÍÀ©Õ¹ÃûΪ 'name'"   ,
+         "-I name   = Ö¸¶¨Ë÷Òý±ðÃûΪ 'name'"               ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = ÏÔʾ num ¸ö top agents"              ,
+         "-C num    = ÏÔʾ num ¸ö top countries"           ,
+         "-R num    = ÏÔʾ num ¸ö top referrers"           ,
+         "-S num    = ÏÔʾ num ¸ö top sites"               ,
+         "-U num    = ÏÔʾ num ¸ö top URLs"                ,
+         "-e num    = ÏÔʾ num ¸ö top Entry Pages"         ,
+         "-E num    = ÏÔʾ num ¸ö top Exit Pages"          ,
+         "-g num    = °ÑÓò°´ num ¸ö¼¶±ð·Ö×é"               ,
+         "-X        = Òþ²Øµ¥¸öÕ¾µã"                        ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Ê¹ÓàDNS »º´æÎļþ 'name'"            ,
+         "-N num    = Ö¸¶¨ DNS ½âÎöµÄ½ø³ÌÊý(0 = ²»½øÐÐDNS ½âÎö)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "ÕªÒªµÄʱ¼ä¶Î";
+char *msg_hhdr_gt = "²úÉúÓÚ";
+
+/* main index strings */
+char *msg_main_us = "ʹÓÃÕªÒª";
+/* char *msg_main_per= "×î½ü 12 ¸öÔÂ"; */
+char *msg_main_per= "°´ÔÂÕªÒª";
+char *msg_main_sum= "°´ÔÂÕªÒª";
+char *msg_main_da = "ÿÈÕƽ¾ù";
+char *msg_main_mt = "ÿÔÂ×ܼÆ";
+
+/* month HTML page strings */
+char *msg_hmth_du = "ÿÈÕʹÓÃÇé¿ö";
+char *msg_hmth_hu = "ÿСʱʹÓÃÇé¿ö";
+
+/* table header strings */
+char *msg_h_by    = "°´ÕÕ";
+char *msg_h_avg   = "ƽ¾ù";
+char *msg_h_max   = "×î´ó";
+char *msg_h_total = "×ܼÆ";
+char *msg_h_totals= "×ܼÆ";
+char *msg_h_day   = "ÈÕ";
+char *msg_h_mth   = "ÔÂ";
+char *msg_h_hour  = "Сʱ";
+char *msg_h_hits  = "µã»÷";
+char *msg_h_pages = "Ò³Ãæ";
+char *msg_h_visits= "·ÃÎÊ";
+char *msg_h_files = "Îļþ";
+char *msg_h_sites = "Õ¾µã";
+char *msg_h_xfer  = "ǧ×Ö½Ú";
+char *msg_h_hname = "Ö÷»úÃû";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Óû§´úÀí";
+char *msg_h_ref   = "ÒýÓÃ";
+char *msg_h_ctry  = "¹ú¼Ò";
+char *msg_h_search= "ËÑË÷×Ö·û´®";
+char *msg_h_uname = "Óû§Ãû";
+
+/* links along top of page */
+char *msg_hlnk_ds = "ÿÈÕͳ¼Æ";
+char *msg_hlnk_hs = "ÿСʱͳ¼Æ";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Õ¾µã";
+char *msg_hlnk_a  = "´úÀí";
+char *msg_hlnk_c  = "¹ú¼Ò";
+char *msg_hlnk_r  = "ÒýÓÃ";
+char *msg_hlnk_en = "Èë¿Ú";
+char *msg_hlnk_ex = "³ö¿Ú";
+char *msg_hlnk_sr = "ËÑË÷";
+char *msg_hlnk_i  = "Óû§";
+
+/* monthly total table */
+char *msg_mtot_ms = "ÔÂͳ¼ÆÐÅÏ¢";
+char *msg_mtot_th = "×ܵã»÷Êý";
+char *msg_mtot_tf = "×ÜÎļþÊý";
+char *msg_mtot_tx = "×Üǧ×Ö½ÚÊý";
+char *msg_mtot_us = "×ÜÕ¾µãÊý£¨²»°üÀ¨Öظ´Õ¾µã£©";
+char *msg_mtot_ur = "×ÜÒýÓÃÕßÊý£¨²»°üÀ¨Öظ´ÒýÓÃÕߣ©";
+char *msg_mtot_ua = "×ÜÓû§´úÀíÊý£¨²»°üÀ¨Öظ´Óû§´úÀí£©";
+char *msg_mtot_uu = "×Ü URL Êý£¨²»°üÀ¨Öظ´ URL £©";
+char *msg_mtot_ui = "×ÜÓû§ÃûÊý£¨²»°üÀ¨Öظ´Óû§Ãû£©";
+char *msg_mtot_mhd= "ÿÌìµã»÷Êý";
+char *msg_mtot_mhh= "ÿСʱµã»÷Êý";
+char *msg_mtot_mfd= "ÿÌìÎļþÊý";
+char *msg_mtot_mpd= "ÿÌìÒ³ÃæÊý";
+char *msg_mtot_msd= "Sites per Day";
+char *msg_mtot_mvd= "ÿÌì·ÃÎÊÊý";
+char *msg_mtot_mkd= "ÿÌìÁ÷Á¿Êý£¨µ¥Î»£ºÇ§×Ö½Ú£©";
+char *msg_mtot_rc = "°´ÏìÓ¦ÂëµÄµã»÷Êý";
+
+/* daily total table */
+char *msg_dtot_ds = "ÿÈÕͳ¼Æ";
+
+/* hourly total table */
+char *msg_htot_hs = "ÿСʱͳ¼Æ";
+
+/* country pie chart */
+char *msg_ctry_use= "°´¹ú¼ÒʹÓÃÇé¿ö";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "×îÇ°";
+char *msg_top_of  = "----";
+char *msg_top_s   = "×ÜÕ¾µãÊý";
+char *msg_top_u   = "×Ü URL Êý";
+char *msg_top_r   = "×ÜÒýÓÃÕßÊý";
+char *msg_top_a   = "×ÜÓû§´úÀíÊý";
+char *msg_top_c   = "×ܹú¼ÒÊý";
+char *msg_top_en  = "×ܽøÈëÒ³ÃæÊý";
+char *msg_top_ex  = "×ÜÍƳöÒ³ÃæÊý";
+char *msg_top_sr  = "×ÜËÑË÷×Ö·û´®Êý";
+char *msg_top_i   = "×ÜÓû§ÃûÊý";
+char *msg_v_sites = "²ì¿´ËùÓÐÕ¾µã";
+char *msg_v_urls  = "²ì¿´ËùÓРURL";
+char *msg_v_refs  = "²ì¿´ËùÓÐÒýÓÃ";
+char *msg_v_agents= "²ì¿´ËùÓÐÓû§´úÀí";
+char *msg_v_search= "²ì¿´ËùÓÐËÑË÷×Ö·û´®";
+char *msg_v_users = "²ì¿´ËùÓÐÓû§Ãû";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ",
+                    "ËÄÔÂ", "ÎåÔÂ", "ÁùÔÂ",
+                    "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ",
+                    "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"};
+
+/* long month names - can be any length */
+char *l_month[12]={  "Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ",
+                    "ËÄÔÂ", "ÎåÔÂ", "ÁùÔÂ",
+                    "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ",
+                    "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "䶨ÒåµÄÏìÓ¦´úÂë",                               0 },
+         { "ÏìÓ¦´úÂë 100 - ¼ÌÐø",                            0 },
+         { "ÏìÓ¦´úÂë 101 - ¸Ä±äЭÒé",                        0 },
+         { "ÏìÓ¦´úÂë 200 - ³É¹¦",                            0 },
+         { "ÏìÓ¦´úÂë 201 - Òѱ»´´½¨",                        0 },
+         { "ÏìÓ¦´úÂë 202 - Òѱ»½ÓÊÜ",                        0 },
+         { "ÏìÓ¦´úÂë 203 - ·ÇȨÍþÐÅÏ¢",                      0 },
+         { "ÏìÓ¦´úÂë 204 - ÎÞÄÚÈÝ",                          0 },
+         { "ÏìÓ¦´úÂë 205 - ÖØÖÃÄÚÈÝ",                        0 },
+         { "ÏìÓ¦´úÂë 206 - ²¿·ÖÄÚÈÝ",                        0 },
+         { "ÏìÓ¦´úÂë 300 - ¶àÖØÑ¡Ôñ",                        0 },
+         { "ÏìÓ¦´úÂë 301 - Òѱ»ÓÀ¾ÃÐÔתÒÆ",                  0 },
+         { "ÏìÓ¦´úÂë 302 - Òѱ»ÕÒµ½",                        0 },
+         { "ÏìÓ¦´úÂë 303 - ¿´ÆäËü",                          0 },
+         { "ÏìÓ¦´úÂë 304 - Ã»Óб»Ð޸Ĺý",                    0 },
+         { "ÏìÓ¦´úÂë 305 - Ê¹ÓôúÀí",                        0 },
+         { "ÏìÓ¦´úÂë 307 - Òѱ»ÔÝʱÐÔתÒÆ",                  0 },
+         { "ÏìÓ¦´úÂë 400 - ÎÞЧµÄÇëÇó",                      0 },
+         { "ÏìÓ¦´úÂë 401 - Î´±»ÑéÖ¤",                        0 },
+         { "ÏìÓ¦´úÂë 402 - ÐèÒª¸¶·Ñ",                        0 },
+         { "ÏìÓ¦´úÂë 403 - ±»½ûÖ¹",                          0 },
+         { "ÏìÓ¦´úÂë 404 - Ã»ÓÐÕÒµ½",                        0 },
+         { "ÏìÓ¦´úÂë 405 - ²»ÈÝÐíµÄ·½·¨",                    0 },
+         { "ÏìÓ¦´úÂë 406 - ²»¿É½ÓÊÜ",                        0 },
+         { "ÏìÓ¦´úÂë 407 - ÐèÒª´úÀíÑéÖ¤",                    0 },
+         { "ÏìÓ¦´úÂë 408 - ÇëÇó³¬Ê±",                        0 },
+         { "ÏìÓ¦´úÂë 409 - ³åÍ»",                            0 },
+         { "ÏìÓ¦´úÂë 410 - Òѹý",                            0 },
+         { "ÏìÓ¦´úÂë 411 - ÐèÒª³¤¶ÈÐÅÏ¢",                    0 },
+         { "ÏìÓ¦´úÂë 412 - Ç°Ìá²»Âú×ã",                      0 },
+         { "ÏìÓ¦´úÂë 413 - ÇëÇóʵÌåÌ«´ó",                    0 },
+         { "ÏìÓ¦´úÂë 414 - ÇëÇó URI Ì«³¤",                   0 },
+         { "ÏìÓ¦´úÂë 415 - ²»Ö§³ÖµÄÎļþÀàÐÍ",                0 },
+         { "ÏìÓ¦´úÂë 416 - ÇëÇóµÄ·¶Î§ÎÞЧ",                  0 },
+         { "ÏìÓ¦´úÂë 417 - ÆÚÍûÂä¿Õ",                        0 },
+         { "ÏìÓ¦´úÂë 500 - ·þÎñÆ÷ÄÚ²¿´í",                    0 },
+         { "ÏìÓ¦´úÂë 501 - Ã»ÓÐʵÏÖ",                        0 },
+         { "ÏìÓ¦´úÂë 502 - »µµôµÄÍø¹Ø",                      0 },
+         { "ÏìÓ¦´úÂë 503 - ·þÎñ²»¿ÉÓÃ",                      0 },
+         { "ÏìÓ¦´úÂë 504 - Íø¹Ø³¬Ê±",                        0 },
+         { "ÏìÓ¦´úÂë 505 - ²»Ö§³ÖµÄ HTTP °æ±¾",              0 } };
+
+char *msg_title   = "ʹÓÃͳ¼Æ";
+char *msg_h_other = "ÆäËü";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "δ½âÎöµÄ/δ֪µÄ",                  0,0,0 },
+{ IDX_3C('c','o','m'),    ".com",                             0,0,0 },
+{ IDX_3C('e','d','u'),    ".edu",                             0,0,0 },
+{ IDX_3C('g','o','v'),    ".gov",                             0,0,0 },
+{ IDX_3C('i','n','t'),    ".int",                             0,0,0 },
+{ IDX_3C('m','i','l'),    ".mil",                             0,0,0 },
+{ IDX_3C('n','e','t'),    ".net",                             0,0,0 },
+{ IDX_3C('o','r','g'),    ".org",                             0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),".arpa",                            0,0,0 },
+{ IDX_4C('n','a','t','o'),"±±´óÎ÷Ñó¹«Ô¼×éÖ¯",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "°²µÀ¶û",                           0,0,0 },
+{ IDX_2C('a','e'),        "°¢ÁªÇõ",                           0,0,0 },
+{ IDX_2C('a','f'),        "°¢¸»º¹",                           0,0,0 },
+{ IDX_2C('a','g'),        "°²Ìá¹ÏºÍ°Í²¼´ï",                   0,0,0 },
+{ IDX_2C('a','i'),        "°²¹çÀ­",                           0,0,0 },
+{ IDX_2C('a','l'),        "°¢¶û°ÍÄáÑÇ",                       0,0,0 },
+{ IDX_2C('a','m'),        "ÑÇÃÀÄáÑÇ",                         0,0,0 },
+{ IDX_2C('a','n'),        "ºÉÊô°²µÄÁÐ˹",                     0,0,0 },
+{ IDX_2C('a','o'),        "°²¸çÀ­",                           0,0,0 },
+{ IDX_2C('a','q'),        "Äϼ«ÖÞ ",                          0,0,0 },
+{ IDX_2C('a','r'),        "°¢¸ùÍ¢",                           0,0,0 },
+{ IDX_2C('a','s'),        "ÈøĦÑÇ",                           0,0,0 },
+{ IDX_2C('a','t'),        "°ÂµØÀû",                           0,0,0 },
+{ IDX_2C('a','u'),        "°Ä´óÀûÑÇ",                         0,0,0 },
+{ IDX_2C('a','w'),        "°¢Â³°Í",                           0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "°¢Èû°Ý½®",                         0,0,0 },
+{ IDX_2C('b','a'),        "²¨ºÚ",                             0,0,0 },
+{ IDX_2C('b','b'),        "°Í°Í¶à˹",                         0,0,0 },
+{ IDX_2C('b','d'),        "ÃϼÓÀ­",                           0,0,0 },
+{ IDX_2C('b','e'),        "±ÈÀûʱ",                           0,0,0 },
+{ IDX_2C('b','f'),        "²¼ÆäÄÉ·¨Ë÷",                       0,0,0 },
+{ IDX_2C('b','g'),        "±£¼ÓÀûÑÇ",                         0,0,0 },
+{ IDX_2C('b','h'),        "°ÍÁÖ",                             0,0,0 },
+{ IDX_2C('b','i'),        "²¼Â¡µÏ",                           0,0,0 },
+{ IDX_2C('b','j'),        "±´Äþ",                             0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "°ÙĽ´ó",                           0,0,0 },
+{ IDX_2C('b','n'),        "ÎÄÀ³",                             0,0,0 },
+{ IDX_2C('b','o'),        "²£ÀûάÑÇ",                         0,0,0 },
+{ IDX_2C('b','r'),        "°ÍÎ÷",                             0,0,0 },
+{ IDX_2C('b','s'),        "°Í¹þÂí",                           0,0,0 },
+{ IDX_2C('b','t'),        "²»µ¤",                             0,0,0 },
+{ IDX_2C('b','v'),        "²¼Î¬µº",                           0,0,0 },
+{ IDX_2C('b','w'),        "²©´ÄÍßÄÉ",                         0,0,0 },
+{ IDX_2C('b','y'),        "°×¶íÂÞ˹",                         0,0,0 },
+{ IDX_2C('b','z'),        "²®Àû×È",                           0,0,0 },
+{ IDX_2C('c','a'),        "¼ÓÄôó",                           0,0,0 },
+{ IDX_2C('c','c'),        "¿É¿Éµº",                           0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "ÖзÇ",                             0,0,0 },
+{ IDX_2C('c','g'),        "¸Õ¹û",                             0,0,0 },
+{ IDX_2C('c','h'),        "ÈðÊ¿",                             0,0,0 },
+{ IDX_2C('c','i'),        "ÏóÑÀº£°¶",                         0,0,0 },
+{ IDX_2C('c','k'),        "¿â¿ËȺµº",                         0,0,0 },
+{ IDX_2C('c','l'),        "ÖÇÀû",                             0,0,0 },
+{ IDX_2C('c','m'),        "¿¦Âó¡",                           0,0,0 },
+{ IDX_2C('c','n'),        "Öйú",                             0,0,0 },
+{ IDX_2C('c','o'),        "¸çÂ×±ÈÑÇ",                         0,0,0 },
+{ IDX_2C('c','r'),        "¸ç˹´ïÀè¼Ó",                       0,0,0 },
+{ IDX_2C('c','u'),        "¹Å°Í",                             0,0,0 },
+{ IDX_2C('c','v'),        "·ðµÃ½Ç",                           0,0,0 },
+{ IDX_2C('c','x'),        "Ê¥µ®µº",                           0,0,0 },
+{ IDX_2C('c','y'),        "ÈûÆÖ·˹",                         0,0,0 },
+{ IDX_2C('c','z'),        "½Ý¿Ë¹²ºÍ¹ú",                       0,0,0 },
+{ IDX_2C('d','e'),        "µÂ¹ú",                             0,0,0 },
+{ IDX_2C('d','j'),        "¼ª²¼Ìá",                           0,0,0 },
+{ IDX_2C('d','k'),        "µ¤Âó",                             0,0,0 },
+{ IDX_2C('d','m'),        "¶àÃ×Äá¼Ó",                         0,0,0 },
+{ IDX_2C('d','o'),        "¶àÃ×Äá¼Ó¹²ºÍ¹ú",                   0,0,0 },
+{ IDX_2C('d','z'),        "°¢¶û¼°ÀûÑÇ",                       0,0,0 },
+{ IDX_2C('e','c'),        "¶ò¹Ï¶à¶û",                         0,0,0 },
+{ IDX_2C('e','e'),        "°®É³ÄáÑÇ",                         0,0,0 },
+{ IDX_2C('e','g'),        "°£¼°",                             0,0,0 },
+{ IDX_2C('e','h'),        "Î÷Èö¹þÀ­",                         0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Î÷°àÑÀ",                           0,0,0 },
+{ IDX_2C('e','t'),        "°£Èû¶í±ÈÑÇ",                       0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "·ÒÀ¼",                             0,0,0 },
+{ IDX_2C('f','j'),        "ì³¼Ã",                             0,0,0 },
+{ IDX_2C('f','k'),        "¸£¿ËÀ¼Èºµº(Âí¶ûάÄÉ˹Ⱥµº)",       0,0,0 },
+{ IDX_2C('f','m'),        "ÃÜ¿ËÂÞÄáÎ÷ÑÇ",                     0,0,0 },
+{ IDX_2C('f','o'),        "·¨ÂÞȺµº£¨µ¤Âó£©",                 0,0,0 },
+{ IDX_2C('f','r'),        "·¨¹ú",                             0,0,0 },
+{ IDX_2C('g','a'),        "¼ÓÅî",                             0,0,0 },
+{ IDX_2C('g','b'),        "Ó¢¹ú",                             0,0,0 },
+{ IDX_2C('g','d'),        "¸ñÁÖÄÉ´ï",                         0,0,0 },
+{ IDX_2C('g','e'),        "¸ñ³¼ªÑÇ",                         0,0,0 },
+{ IDX_2C('g','f'),        "·¨Êô¹çÑÇÄÇ",                       0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "¼ÓÄÉ",                             0,0,0 },
+{ IDX_2C('g','i'),        "Ö±²¼ÂÞÍÓ",                         0,0,0 },
+{ IDX_2C('g','l'),        "¸ñÁêÀ¼",                           0,0,0 },
+{ IDX_2C('g','m'),        "¸Ô±ÈÑÇ",                           0,0,0 },
+{ IDX_2C('g','n'),        "¼¸ÄÚÑÇ",                           0,0,0 },
+{ IDX_2C('g','p'),        "¹ÏµÂÂÞÆÕ",                         0,0,0 },
+{ IDX_2C('g','q'),        "³àµÀ¼¸ÄÚÑÇ",                       0,0,0 },
+{ IDX_2C('g','r'),        "Ï£À°",                             0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "ΣµØÂíÀ­",                         0,0,0 },
+{ IDX_2C('g','u'),        "¹Øµº",                             0,0,0 },
+{ IDX_2C('g','w'),        "¼¸ÄÚÑDZÈÉÜ",                       0,0,0 },
+{ IDX_2C('g','y'),        "¹çÑÇÄÇ",                           0,0,0 },
+{ IDX_2C('h','k'),        "ÖйúÏã¸Û",                         0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "ºé¶¼À­Ë¹",                         0,0,0 },
+{ IDX_2C('h','r'),        "¿ËÂÞµØÑÇ",                         0,0,0 },
+{ IDX_2C('h','t'),        "º£µØ",                             0,0,0 },
+{ IDX_2C('h','u'),        "ÐÙÑÀÀû",                           0,0,0 },
+{ IDX_2C('i','d'),        "Ó¡¶ÈÄáÎ÷ÑÇ",                       0,0,0 },
+{ IDX_2C('i','e'),        "°®¶ûÀ¼",                           0,0,0 },
+{ IDX_2C('i','l'),        "ÒÔÉ«ÁÐ",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Ó¡¶È",                             0,0,0 },
+{ IDX_2C('i','o'),        "Ó¢Áª°îµÄÓ¡¶ÈÑóÁìÓò",               0,0,0 },
+{ IDX_2C('i','q'),        "ÒÁÀ­¿Ë",                           0,0,0 },
+{ IDX_2C('i','r'),        "ÒÁÀÊ",                             0,0,0 },
+{ IDX_2C('i','s'),        "±ùµº",                             0,0,0 },
+{ IDX_2C('i','t'),        "Òâ´óÀû",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "ÑÀÂò¼Ó",                           0,0,0 },
+{ IDX_2C('j','o'),        "Ô¼µ©",                             0,0,0 },
+{ IDX_2C('j','p'),        "ÈÕ±¾",                             0,0,0 },
+{ IDX_2C('k','e'),        "¿ÏÄáÑÇ",                           0,0,0 },
+{ IDX_2C('k','g'),        "¼ª¶û¼ªË¹Ë¹Ì¹",                     0,0,0 },
+{ IDX_2C('k','h'),        "¼íÆÒÕ¯",                           0,0,0 },
+{ IDX_2C('k','i'),        "»ùÀï°Í˹",                         0,0,0 },
+{ IDX_2C('k','m'),        "¿ÆĦÂÞ",                           0,0,0 },
+{ IDX_2C('k','n'),        "Ê¥»ù´ÄºÍÄáά˹",                   0,0,0 },
+{ IDX_2C('k','p'),        "³¯ÏÊ",                             0,0,0 },
+{ IDX_2C('k','r'),        "º«¹ú",                             0,0,0 },
+{ IDX_2C('k','w'),        "¿ÆÍþÌØ",                           0,0,0 },
+{ IDX_2C('k','y'),        "¿ªÂüȺµº",                         0,0,0 },
+{ IDX_2C('k','z'),        "¹þÈø¿Ë˹̹",                       0,0,0 },
+{ IDX_2C('l','a'),        "ÀÏÎÎ",                             0,0,0 },
+{ IDX_2C('l','b'),        "Àè°ÍÄÛ",                           0,0,0 },
+{ IDX_2C('l','c'),        "ʥ¬Î÷ÑÇ",                         0,0,0 },
+{ IDX_2C('l','i'),        "ÁÐÖ§¶ØÊ¿µÇ",                       0,0,0 },
+{ IDX_2C('l','k'),        "˹ÀïÀ¼¿¨",                         0,0,0 },
+{ IDX_2C('l','r'),        "Àû±ÈÀïÑÇ",                         0,0,0 },
+{ IDX_2C('l','s'),        "À³Ë÷ÍÐ",                           0,0,0 },
+{ IDX_2C('l','t'),        "Á¢ÌÕÍð",                           0,0,0 },
+{ IDX_2C('l','u'),        "¬ɭ±¤",                           0,0,0 },
+{ IDX_2C('l','v'),        "À­ÍÐάÑÇ",                         0,0,0 },
+{ IDX_2C('l','y'),        "Àû±ÈÑÇ",                           0,0,0 },
+{ IDX_2C('m','a'),        "ĦÂå¸ç",                           0,0,0 },
+{ IDX_2C('m','c'),        "ĦÄɸç",                           0,0,0 },
+{ IDX_2C('m','d'),        "Ħ¶û¶àÍß",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Âí´ï¼Ó˹¼Ó",                       0,0,0 },
+{ IDX_2C('m','h'),        "ÂíÉܶûȺµº",                       0,0,0 },
+{ IDX_2C('m','k'),        "ÂíÆä¶Ù",                           0,0,0 },
+{ IDX_2C('m','l'),        "ÂíÀï",                             0,0,0 },
+{ IDX_2C('m','m'),        "Ãåµé",                             0,0,0 },
+{ IDX_2C('m','n'),        "ÃɹÅ",                             0,0,0 },
+{ IDX_2C('m','o'),        "Öйú°ÄÃÅ",                         0,0,0 },
+{ IDX_2C('m','p'),        "±±ÂíÀïÑÇÄÉȺµº£¨ÃÀ£©",             0,0,0 },
+{ IDX_2C('m','q'),        "ÂíÌáÄá¿Ë£¨·¨£©",                   0,0,0 },
+{ IDX_2C('m','r'),        "ëÀïËþÄáÑÇ",                       0,0,0 },
+{ IDX_2C('m','s'),        "ÃÉÌØÈûÀ­ÌØ£¨Ó¢£©",                 0,0,0 },
+{ IDX_2C('m','t'),        "Âí¶ûËû",                           0,0,0 },
+{ IDX_2C('m','u'),        "ëÀïÇó˹",                         0,0,0 },
+{ IDX_2C('m','v'),        "Âí¶û´ú·ò",                         0,0,0 },
+{ IDX_2C('m','w'),        "ÂíÀ­Î¬",                           0,0,0 },
+{ IDX_2C('m','x'),        "Ä«Î÷¸ç",                           0,0,0 },
+{ IDX_2C('m','y'),        "ÂíÀ´Î÷ÑÇ",                         0,0,0 },
+{ IDX_2C('m','z'),        "Īɣ±È¿Ë",                         0,0,0 },
+{ IDX_2C('n','a'),        "ÄÉÃ×±ÈÑÇ",                         0,0,0 },
+{ IDX_2C('n','c'),        "п¦Àï¶àÄáÑÇ",                     0,0,0 },
+{ IDX_2C('n','e'),        "ÄáÈÕ¶û",                           0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "ÄáÈÕÀûÑÇ",                         0,0,0 },
+{ IDX_2C('n','i'),        "Äá¼ÓÀ­¹Ï",                         0,0,0 },
+{ IDX_2C('n','l'),        "ºÉÀ¼",                             0,0,0 },
+{ IDX_2C('n','o'),        "ŲÍþ",                             0,0,0 },
+{ IDX_2C('n','p'),        "Äá²´¶û",                           0,0,0 },
+{ IDX_2C('n','r'),        "è§Â³",                             0,0,0 },
+{ IDX_2C('n','u'),        "Ŧ°£",                             0,0,0 },
+{ IDX_2C('n','z'),        "ÐÂÎ÷À¼",                           0,0,0 },
+{ IDX_2C('o','m'),        "°¢Âü",                             0,0,0 },
+{ IDX_2C('p','a'),        "°ÍÄÃÂí",                           0,0,0 },
+{ IDX_2C('p','e'),        "Ãس",                             0,0,0 },
+{ IDX_2C('p','f'),        "·¨Êô²£ÀïÄáÎ÷ÑÇ",                   0,0,0 },
+{ IDX_2C('p','g'),        "°Í²¼ÑÇм¸ÄÚÑÇ",                   0,0,0 },
+{ IDX_2C('p','h'),        "·ÆÂɱö",                           0,0,0 },
+{ IDX_2C('p','k'),        "°Í»ù˹̹",                         0,0,0 },
+{ IDX_2C('p','l'),        "²¨À¼",                             0,0,0 },
+{ IDX_2C('p','m'),        "ʥƤ°£¶ûºÍÃÜ¿Ë¡£¨·¨£©",           0,0,0 },
+{ IDX_2C('p','n'),        "ƤÌØ¿ª¶÷Ⱥµº",                     0,0,0 },
+{ IDX_2C('p','r'),        "²¨¶àÀè¸÷£¨ÃÀ£©",                   0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "ÆÏÌÑÑÀ",                           0,0,0 },
+{ IDX_2C('p','w'),        "ÅÁÀÍ",                             0,0,0 },
+{ IDX_2C('p','y'),        "°ÍÀ­¹ç",                           0,0,0 },
+{ IDX_2C('q','a'),        "¿¨Ëþ¶û",                           0,0,0 },
+{ IDX_2C('r','e'),        "ÁôÄáÍô£¨·¨£©",                     0,0,0 },
+{ IDX_2C('r','o'),        "ÂÞÂíÄáÑÇ",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "¶íÂÞ˹Áª°î",                       0,0,0 },
+{ IDX_2C('r','w'),        "¬Íú´ï",                           0,0,0 },
+{ IDX_2C('s','a'),        "ɳÌØ°¢À­²®",                       0,0,0 },
+{ IDX_2C('s','b'),        "ËùÂÞÃÅȺµº",                       0,0,0 },
+{ IDX_2C('s','c'),        "ÈûÉà¶û",                           0,0,0 },
+{ IDX_2C('s','d'),        "ËÕµ¤",                             0,0,0 },
+{ IDX_2C('s','e'),        "Èðµä",                             0,0,0 },
+{ IDX_2C('s','g'),        "мÓÆÂ",                           0,0,0 },
+{ IDX_2C('s','h'),        "Ê¥ºÕÀÕÄÇ",                         0,0,0 },
+{ IDX_2C('s','i'),        "˹ÂåÎÄÄáÑÇ",                       0,0,0 },
+{ IDX_2C('s','j'),        "˹Í߶û°ÍÌØȺµº£¨Å²Íþ£©",           0,0,0 },
+{ IDX_2C('s','k'),        "˹Âå·¥¿Ë",                         0,0,0 },
+{ IDX_2C('s','l'),        "ÈûÀ­Àû°º",                         0,0,0 },
+{ IDX_2C('s','m'),        "Ê¥ÂíÁ¦Åµ",                         0,0,0 },
+{ IDX_2C('s','n'),        "ÈûÄÚ¼Ó¶û",                         0,0,0 },
+{ IDX_2C('s','o'),        "Ë÷ÂíÀï",                           0,0,0 },
+{ IDX_2C('s','r'),        "ËÕÀïÄÏ",                           0,0,0 },
+{ IDX_2C('s','t'),        "Ê¥¶àÃÀÓëÆÕÁÖÎ÷±È",                 0,0,0 },
+{ IDX_2C('s','u'),        "Ç°ËÕÁª",                           0,0,0 },
+{ IDX_2C('s','v'),        "Èø¶ûÍ߶à",                         0,0,0 },
+{ IDX_2C('s','y'),        "ÐðÀûÑÇ",                           0,0,0 },
+{ IDX_2C('s','z'),        "˹ÍþÊ¿À¼",                         0,0,0 },
+{ IDX_2C('t','c'),        "ÌØ¿Ë˹ºÍ¿­¿Æ˹Ⱥµº£¨Ó¢£©",         0,0,0 },
+{ IDX_2C('t','d'),        "Õ§µÃ",                             0,0,0 },
+{ IDX_2C('t','f'),        "·¨ÊôÄÏ·½ÁìÍÁ",                     0,0,0 },
+{ IDX_2C('t','g'),        "¶à¸ç",                             0,0,0 },
+{ IDX_2C('t','h'),        "Ì©¹ú",                             0,0,0 },
+{ IDX_2C('t','j'),        "Ëþ¼ª¿Ë˹̹",                       0,0,0 },
+{ IDX_2C('t','k'),        "ÍпËÀÍ",                           0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "ÍÁ¿âÂü˹̹",                       0,0,0 },
+{ IDX_2C('t','n'),        "Í»Äá˹",                           0,0,0 },
+{ IDX_2C('t','o'),        "ÌÀ¼Ó",                             0,0,0 },
+{ IDX_2C('t','p'),        "¶«µÛ",                             0,0,0 },
+{ IDX_2C('t','r'),        "ÍÁ¶ûÆä",                           0,0,0 },
+{ IDX_2C('t','t'),        "ÌØÁ¢Äá´ïºÍ¶à°Í¸ç",                 0,0,0 },
+{ IDX_2C('t','v'),        "ͼÍ߬",                           0,0,0 },
+{ IDX_2C('t','w'),        "Öйų́Íå",                         0,0,0 },
+{ IDX_2C('t','z'),        "̹ɣÄáÑÇ",                         0,0,0 },
+{ IDX_2C('u','a'),        "ÎÚ¿ËÀ¼",                           0,0,0 },
+{ IDX_2C('u','g'),        "Îڸɴï",                           0,0,0 },
+{ IDX_2C('u','k'),        "Ó¢¹ú",                             0,0,0 },
+{ IDX_2C('u','m'),        "ÃÀ¹ú±ßԶСµº",                     0,0,0 },
+{ IDX_2C('u','s'),        "ÃÀ¹ú",                             0,0,0 },
+{ IDX_2C('u','y'),        "ÎÚÀ­¹ç",                           0,0,0 },
+{ IDX_2C('u','z'),        "ÎÚ×ȱð¿Ë˹̹",                     0,0,0 },
+{ IDX_2C('v','a'),        "èóµÙ¸Ô",                           0,0,0 },
+{ IDX_2C('v','c'),        "Ê¥ÎÄÉ­Ìغ͸ñÁÖÄɶ¡Ë¹",             0,0,0 },
+{ IDX_2C('v','e'),        "ίÄÚÈðÀ­",                         0,0,0 },
+{ IDX_2C('v','g'),        "²»Áеߵº(Ó¢)",                     0,0,0 },
+{ IDX_2C('v','i'),        "²»Áеߵº(ÃÀ)",                     0,0,0 },
+{ IDX_2C('v','n'),        "Ô½ÄÏ",                             0,0,0 },
+{ IDX_2C('v','u'),        "ÍßŬ°¢Í¼",                         0,0,0 },
+{ IDX_2C('w','f'),        "ÍßÀû˹ºÍ¸»Í¼ÄÉ£¨·¨£©",             0,0,0 },
+{ IDX_2C('w','s'),        "Î÷ÈøĦÑÇ",                         0,0,0 },
+{ IDX_2C('y','e'),        "Ò²ÃÅ",                             0,0,0 },
+{ IDX_2C('y','t'),        "ÂíÔ¼Ìصº",                         0,0,0 },
+{ IDX_2C('y','u'),        "ÄÏ˹À­·ò",                         0,0,0 },
+{ IDX_2C('z','a'),        "ÄÏ·Ç",                             0,0,0 },
+{ IDX_2C('z','m'),        "ÔÞ±ÈÑÇ",                           0,0,0 },
+{ IDX_2C('z','w'),        "½ò°Í²¼Î¤",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
+
diff --git a/lang/webalizer_lang.slovak b/lang/webalizer_lang.slovak
new file mode 100644 (file)
index 0000000..8b973d2
--- /dev/null
@@ -0,0 +1,638 @@
+/*
+   webalizer_lang.slovak
+
+   Webalizer V2.0x Language Support file for Slovak.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   24-Aug-1998 Translation by Michal Michalac (michal.michalac@ehs.sk)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   25-Jan-2000 Updated translation by Michal Michalac (michal.michalac@ehs.sk)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   31-Jul-2000 Corrections/additions by Lubos Klokner (erkac@vault-tec.sk)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Slovak";
+char *langcode  = "sk";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "zaznamov";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignorovanych";
+char *msg_bad     = "chybnych";
+char *msg_in      = "pocas";
+char *msg_seconds = "sekund";
+
+/* progress and setup error messages */
+char *msg_log_err = "Chyba: Nemozem otvorit log subor";
+char *msg_log_use = "Pouzivam log subor";
+char *msg_dir_err = "Chyba: Nemozem prejst do adresara";
+char *msg_dir_use = "Vytvaram vystup v";
+char *msg_cur_dir = "aktualnom adresari";
+char *msg_hostname= "Meno pocitaca pre zostavy je";
+char *msg_ign_hist= "Ignorujem predchadzajucu historiu...";
+char *msg_no_hist = "Nemozem najst subor historie...";
+char *msg_get_hist= "Citam subor historie...";
+char *msg_put_hist= "Ukladam subor historie...";
+char *msg_hist_err= "Chyba: Nemozem zapisat subor historie";
+char *msg_bad_hist= "Chyba: Ignorujem chybny zaznam v historii";
+char *msg_bad_conf= "Chyba: Nemozem otvorit konfiguracny subor";
+char *msg_bad_key = "Pozor: Neplatne klucove slovo";
+char *msg_bad_date= "Chyba: Preskakujem zaznam (zly datum)";
+char *msg_ign_nscp= "Preskakujem Netscapovsky hlavickovy zaznam";
+char *msg_bad_rec = "Preskakujem zly zaznam";
+char *msg_no_vrec = "Neboli najdene platne zaznamy!";
+char *msg_gen_rpt = "Vytvaram zostavu pre";
+char *msg_gen_sum = "Vytvaram sumarnu zostavu";
+char *msg_get_data= "Citam udaje z minuleho spracovania...";
+char *msg_put_data= "Ukladam udaje aktualneho spracovania...";
+char *msg_no_data = "Nemozem najst udaje z minuleho spracovania...";
+char *msg_bad_data= "Chyba: Nemozem obnovit udaje aktualneho spracovania";
+char *msg_data_err= "Chyba: Nemozem ulozit udaje aktualneho spracovania";
+char *msg_dup_data= "Pozor: Najdene pravdepodobne duplicitne udaje";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Nemozem alokovat dostatok pamate, Naj Miesta su nefunkcne!";
+char *msg_nomem_tr= "Nemozem alokovat dostatok pamate, Naj Odkazovace su nefunkcne!";
+char *msg_nomem_tu= "Nemozem alokovat dostatok pamate, Naj URL-ka su nefunkcne!";
+char *msg_nomem_tc= "Nemozem alokovat dostatok pamate, Naj Krajiny su nefunkcne!";
+char *msg_nomem_ta= "Nemozem alokovat dostatok pamate, Naj Browsre su nefunkcne!";
+char *msg_nomem_tsr="Nemozem alokovat dostatok pamate, Naj Hladane texty su nefunkcne!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Chyba doplnenia bloku pocitaca (denne), preskakujem";
+char *msg_nomem_mh= "Chyba doplnenia bloku pocitaca (mesacne), preskakujem";
+char *msg_nomem_u = "Chyba doplnenia URL bloku, preskakujem";
+char *msg_nomem_a = "Chyba doplnenia bloku Browsra, preskakujem";
+char *msg_nomem_r = "Chyba doplnenia bloku Odkazovaca, preskakujem";
+char *msg_nomem_sc= "Chyba doplnenia bloku Hladanych textov, preskakujem";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Chyba: Preskakujem prilis dlhy log zaznam";
+char *msg_big_host= "Pozor: Orezavam prilis dlhe meno pocitaca";
+char *msg_big_date= "Pozor: Orezavam prilis dlhe pole datumu";
+char *msg_big_req = "Pozor: Orezavam prilis dlhe pole ziadosti";
+char *msg_big_ref = "Pozor: Orezavam prilis dlhe pole odkazovaca";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Pozor: Retazec prekrocil velkost ukladacieho miesta";
+
+/* misc errors */
+char *msg_no_open = "Chyba: Nemozem otvorit subor";
+
+/* Help display... */
+char *h_usage1 = "Pouzitie";
+char *h_usage2 = "[volby] [log subor]";
+char *h_msg[]= {
+         "-h        = vypis tento help"                    ,
+         "-V        = vypis informacie o verzii"           ,
+         "-v        = be verbose"                          ,
+         "-d        = vypis dalsie ladiace informacie"     ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = oprav chyby postupnosti"             ,
+         "-i        = ignoruj subor historie"              ,
+         "-p        = zapamataj stav (inkrementalne)"      ,
+         "-b        = ignoruj stav (inkrementalne)"        ,
+         "-q        = potlac informativne spravy"          ,
+         "-Q        = potlac VSETKY spravy"                ,
+         "-Y        = potlac graf krajin"                  ,
+         "-G        = potlac hodinovy graf"                ,
+         "-H        = potlac hodinove statistiky"          ,
+         "-L        = potlac farebne kodovanu legendu grafu",
+         "-l poc    = kresli poc ciar v pozadi grafu"      ,
+         "-m form   = timeout 1 navstevy (seconds)"        ,
+         "-T        = vypis casove informacie"             ,
+         "-c file   = pouzi konfig. subor 'file'"          ,
+         "-n name   = pouzi meno pocitaca"                 ,
+         "-o adr    = vystupny adresar"                    ,
+         "-t name   = nazov zostavy 'name'"                ,
+         "-a name   = skry browser 'name'"                 ,
+         "-r name   = skry odkazovac 'name'"               ,
+         "-s name   = skry miesto 'name'"                  ,
+         "-u name   = skry URL 'name'"                     ,
+         "-x name   = skry priponu suboru 'name'"          ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = pripona typu stranky 'name'"         ,
+         "-I name   = prezyvka Index(u) 'name'"            ,
+         "-K poc    = poc months in summary table"         ,
+         "-k poc    = poc months in summary graph"         ,
+         "-A poc    = Zobraz poc naj browserov"            ,
+         "-C poc    = Zobraz poc naj krajin"               ,
+         "-R poc    = Zobraz poc naj odkazovacov"          ,
+         "-S poc    = Zobraz poc naj miest"                ,
+         "-U poc    = Zobraz poc naj URL-iek"              ,
+         "-e poc    = Zobraz poc naj vstupnych stran"      ,
+         "-E poc    = Zobraz poc naj vystupnych stran"     ,
+         "-g poc    = Group Domains to 'poc' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Obdobie ¹tatistiky";
+char *msg_hhdr_gt = "Generované";
+
+/* main index strings */
+char *msg_main_us = "©tatistiky vyu¾itia pre";
+/* char *msg_main_per= "Posledných 12 mesiacov"; */
+char *msg_main_per= "Mesaèný sumár";
+char *msg_main_sum= "Mesaèný sumár";
+char *msg_main_da = "Denný priemer";
+char *msg_main_mt = "Mesaèné súèty";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Denné vyu¾itie za";
+char *msg_hmth_hu = "Hodinové vyu¾itie za";
+
+/* table header strings */
+char *msg_h_by    = "podµa";
+char *msg_h_avg   = "priem";
+char *msg_h_max   = "max";
+char *msg_h_total = "celkom";
+char *msg_h_totals= "celkom";
+char *msg_h_day   = "deò";
+char *msg_h_mth   = "mesiac";
+char *msg_h_hour  = "hodina";
+char *msg_h_hits  = "zásahov";
+char *msg_h_pages = "strán";
+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_hname = "poèítaè";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "prehliadaè";
+char *msg_h_ref   = "odkazovaè";
+char *msg_h_ctry  = "krajina";
+char *msg_h_search= "hµadaný text";
+char *msg_h_uname = "u¾ivateµ";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Denné ¹tatistiky";
+char *msg_hlnk_hs = "Hodinové ¹tatistiky";
+char *msg_hlnk_u  = "URL-ky";
+char *msg_hlnk_s  = "Miesta";
+char *msg_hlnk_a  = "Prehliadaèe";
+char *msg_hlnk_c  = "Krajiny";
+char *msg_hlnk_r  = "Odkazovaèe";
+char *msg_hlnk_en = "Vstupy";
+char *msg_hlnk_ex = "Výstupy";
+char *msg_hlnk_sr = "Hµadané";
+char *msg_hlnk_i  = "U¾ivatelia";
+
+/* monthly total table */
+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_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";
+char *msg_mtot_uu = "Celkom jedineèných URL-iek";
+char *msg_mtot_ui = "Celkom jedineèných uzivatelov";
+char *msg_mtot_mhd= "Zásahov za deò";
+char *msg_mtot_mhh= "Zásahov za hodinu";
+char *msg_mtot_mfd= "Súborov za deò";
+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_rc = "Zásahy podµa kódu odpovede";
+
+/* daily total table */
+char *msg_dtot_ds = "Denné ¹tatistiky za";
+
+/* hourly total table */
+char *msg_htot_hs = "Hodinové ¹tatistiky za";
+
+/* country pie chart */
+char *msg_ctry_use= "Vyu¾itie podµa krajiny";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Naj";
+char *msg_top_of  = "z";
+char *msg_top_s   = "miest celkom";
+char *msg_top_u   = "URL-iek celkom";
+char *msg_top_r   = "odkazovaèov celkom";
+char *msg_top_a   = "prehliadaèov celkom";
+char *msg_top_c   = "krajín celkom";
+char *msg_top_en  = "vstupných strán celkom";
+char *msg_top_ex  = "výstupných strán celkom";
+char *msg_top_sr  = "hµadaných textov celkom";
+char *msg_top_i   = "Celkovo u¾ivatelov";
+char *msg_v_sites = "Zobraz v¹etky miesta";
+char *msg_v_urls  = "Zobraz v¹etky Url-ka";
+char *msg_v_refs  = "Zobraz v¹etkych odkazovatelov";
+char *msg_v_agents= "Zobraz v¹etkých klientov";
+char *msg_v_search= "Zobraz v¹etky re»azce vyhladavania";
+char *msg_v_users = "Zobraz v¹etkých u¾ivatelov";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maj", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Január",   "Február",  "Marec",   "Apríl",
+                    "Máj",      "Jún",      "Júl",     "August",
+                    "September","Október",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "©tatistiky vyu¾itia pre";
+char *msg_h_other = "Iné";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "Nezistena/neznama",                0,0,0 },
+{ IDX_3C('c','o','m'),    "Komercna (com)",                   0,0,0 },
+{ IDX_3C('e','d','u'),    "Aakademicka (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US vladna (gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Medzinarodna (int)",               0,0,0 },
+{ IDX_3C('m','i','l'),    "US vojenska (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Siet (net)",                       0,0,0 },
+{ IDX_3C('o','r','g'),    "Neziskova organizacia (org)",      0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Zastaralo Arpanet (arpa)",         0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato (nato)",                      0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andora",                           0,0,0 },
+{ IDX_2C('a','e'),        "Spojene Arabske Emiraty",          0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albansko",                         0,0,0 },
+{ IDX_2C('a','m'),        "Armensko",                         0,0,0 },
+{ IDX_2C('a','n'),        "Holandske Antily",                 0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarktida",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Americka Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Rakusko",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbajdzan",                      0,0,0 },
+{ IDX_2C('b','a'),        "Bosna a Hercegovina",              0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Banglades",                        0,0,0 },
+{ IDX_2C('b','e'),        "Belgicko",                         0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulharsko",                        0,0,0 },
+{ IDX_2C('b','h'),        "Bahrajn",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazilia",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamy",                           0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorusko",                       0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Stredo-africka republika",         0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Svajciarsko",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cookove ostrovy",                  0,0,0 },
+{ IDX_2C('c','l'),        "Cile",                             0,0,0 },
+{ IDX_2C('c','m'),        "Camerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Cina",                             0,0,0 },
+{ IDX_2C('c','o'),        "Kolumbia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Kostarika",                        0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Vianocne ostrovy",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Ceska republika",                  0,0,0 },
+{ IDX_2C('d','e'),        "Nemecko",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Dansko",                           0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominikanska republika",           0,0,0 },
+{ IDX_2C('d','z'),        "Alzirsko",                         0,0,0 },
+{ IDX_2C('e','c'),        "Ekvador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonsko",                         0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Zapadna Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spanielsko",                       0,0,0 },
+{ IDX_2C('e','t'),        "Etiopia",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finsko",                           0,0,0 },
+{ IDX_2C('f','j'),        "Fidzi",                            0,0,0 },
+{ IDX_2C('f','k'),        "Falklandske ostrovy (Malviny)",    0,0,0 },
+{ IDX_2C('f','m'),        "Micronezia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "Francuzsko",                       0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Velka Britania (GB)",              0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Gruzinsko",                        0,0,0 },
+{ IDX_2C('g','f'),        "Francuzska Guajana",               0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Gronsko",                          0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Grecko",                           0,0,0 },
+{ IDX_2C('g','s'),        "Sv. Georgia a Sv. Sandwich ostr.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hongkong",                         0,0,0 },
+{ IDX_2C('h','m'),        "Heard a McDonald ostrovy",         0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Chorvatsko",                       0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Madarsko",                         0,0,0 },
+{ IDX_2C('i','d'),        "Indonezia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irsko",                            0,0,0 },
+{ IDX_2C('i','l'),        "Izrael",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Island",                           0,0,0 },
+{ IDX_2C('i','t'),        "Taliansko",                        0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaika",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japonsko",                         0,0,0 },
+{ IDX_2C('k','e'),        "Kena",                             0,0,0 },
+{ IDX_2C('k','g'),        "Kirgizstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Kambodza",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea (Severna)",                  0,0,0 },
+{ IDX_2C('k','r'),        "Korea (Juzna)",                    0,0,0 },
+{ IDX_2C('k','w'),        "Kuvait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Kajmanske ostrovy",                0,0,0 },
+{ IDX_2C('k','z'),        "Kazachstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Libanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstainsko",                 0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Liotyssko",                        0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Moroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagaskar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marsalove ostrovy",                0,0,0 },
+{ IDX_2C('m','k'),        "Macedonsko",                       0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolsko",                        0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinik",                         0,0,0 },
+{ IDX_2C('m','r'),        "Mauretania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauricius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maledivy",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexiko",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malajzia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nova Kaledonia",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holandsko",                        0,0,0 },
+{ IDX_2C('n','o'),        "Norsko",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Novy Zeland",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Francuzska Polynezia",             0,0,0 },
+{ IDX_2C('p','g'),        "Papua Nova Guinea",                0,0,0 },
+{ IDX_2C('p','h'),        "Filipiny",                         0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polsko",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Portoriko",                        0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugalsko",                      0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguaj",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Rumunsko",                         0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Ruska federacia",                  0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudska Arabia",                   0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Svedsko",                          0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sv. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovinsko",                        0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovenska republika",              0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalsko",                         0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "ZSSR",                             0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Svazijsko",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Cad",                              0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thajsko",                          0,0,0 },
+{ IDX_2C('t','j'),        "Tadzikistan",                      0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmensko",                       0,0,0 },
+{ IDX_2C('t','n'),        "Tunisko",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tongo",                            0,0,0 },
+{ IDX_2C('t','p'),        "Vychodny Tumor",                   0,0,0 },
+{ IDX_2C('t','r'),        "Turecko",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad a Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraina",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Velka Britania (UK)",              0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "USA (US)",                         0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatikan",                          0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Panenske Ostrovy (Britske)",       0,0,0 },
+{ IDX_2C('v','i'),        "Panenske Ostrovy (U.S.)",          0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Jemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Jugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Juhoafricka republika",            0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.slovene b/lang/webalizer_lang.slovene
new file mode 100644 (file)
index 0000000..111c25c
--- /dev/null
@@ -0,0 +1,629 @@
+/*
+   webalizer_lang.slovene
+
+   Webalizer V2.0x Language Support file for Slovene.
+   10-Mar-2000 Created by Anton Setnikar - Turbosist d.o.o., Ljubljana 
+               http://www.turbosist.si (version 2.00-12)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Slovene";
+char *langcode  = "sl";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing Totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Poroèilo za mesec";
+char *msg_hhdr_gt = "Izdelano";
+
+/* main index strings */
+char *msg_main_us = "Povzetek dostopov za";
+/* char *msg_main_per= "Zadnjih 12 mesecev"; */
+char *msg_main_per= "Povzetek po mesecih";
+char *msg_main_sum= "Povzetek po mesecih";
+char *msg_main_da = "Dnevno povpreèje";
+char *msg_main_mt = "Meseèni se\9atevki";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Poroèilo po dnevih za";
+char *msg_hmth_hu = "Poroèilo po urah za";
+
+/* table header strings */
+char *msg_h_by    = "po";
+char *msg_h_avg   = "povpr.";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Skupaj";
+char *msg_h_totals= "Skupaj vsi";
+char *msg_h_day   = "Dan";
+char *msg_h_mth   = "Mesec";
+char *msg_h_hour  = "Ura";
+char *msg_h_hits  = "Zahtevkov";
+char *msg_h_pages = "Strani";
+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_hname = "Gostitelj";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Brskalnik";
+char *msg_h_ref   = "Napotitelj";
+char *msg_h_ctry  = "Dr\9eava";
+char *msg_h_search= "Iskani niz";
+char *msg_h_uname = "Uporabnik";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Dnevna statistika";
+char *msg_hlnk_hs = "Statistika po urah";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Podroèja";
+char *msg_hlnk_a  = "Agents";
+char *msg_hlnk_c  = "Dr\9eave";
+char *msg_hlnk_r  = "Preusmeritev z";
+char *msg_hlnk_en = "Vstop";
+char *msg_hlnk_ex = "Izhod";
+char *msg_hlnk_sr = "Iskanje";
+char *msg_hlnk_i  = "Uporabnikov";
+
+/* monthly Skupaj table */
+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_us = "Skupaj enkr. podroèij";
+char *msg_mtot_ur = "Skupaj enkr. napotiteljev";
+char *msg_mtot_ua = "Skupaj enkr. brskalnikov";
+char *msg_mtot_uu = "Skupaj enkr. URL-jev";
+char *msg_mtot_ui = "Skupaj enkr. uporab.imen";
+char *msg_mtot_mhd= "Zahtevkov dnevno";
+char *msg_mtot_mhh= "Zahtevkov na uro";
+char *msg_mtot_mfd= "Datotek dnevno";
+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_rc = "Zahtevki po odzivnih kodah";
+
+/* daily Skupaj table */
+char *msg_dtot_ds = "Dnevna statistika za";
+
+/* hourly Skupaj table */
+char *msg_htot_hs = "Statistika po urah za";
+
+/* country pie chart */
+char *msg_ctry_use= "Dostopi po dr\9eavah za";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Skupaj something" */
+char *msg_top_top = "Prvih";
+char *msg_top_of  = "od";
+char *msg_top_s   = "(vseh) podroèij";
+char *msg_top_u   = "(vseh) URL naslovov";
+char *msg_top_r   = "(vseh) napotiteljev";
+char *msg_top_a   = "(vseh) brskalnikov";
+char *msg_top_c   = "(vseh) dr\9eav";
+char *msg_top_en  = "(vseh) vstopnih strani";
+char *msg_top_ex  = "(vseh) izhodnih strani";
+char *msg_top_sr  = "(vseh) iskani nizi";
+char *msg_top_i   = "(vseh) uporab.imen";
+char *msg_v_sites = "Pregled vseh podroèij";
+char *msg_v_urls  = "Pregled vseh URL-jev";
+char *msg_v_refs  = "Pregled vseh napotiteljev";
+char *msg_v_agents= "Pregled vseh UA";
+char *msg_v_search= "Pregled vseh iskanih nizov";
+char *msg_v_users = "Pregled vseh uporabnikov";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maj", "Jun",
+                    "Jul", "Avg", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januar",  "Februar", "Marec",   "April",
+                    "Maj",      "Junij",     "Julij",   "Avgust",
+                    "September","Oktober",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "Statistika dostopov za spletni stre\9enik";
+char *msg_h_other = "Ostalo";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Nere\9aeni/Neznani",              0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.spanish b/lang/webalizer_lang.spanish
new file mode 100644 (file)
index 0000000..4704b15
--- /dev/null
@@ -0,0 +1,647 @@
+/*
+   webalizer_lang.spanish
+
+   Webalizer V2.0x Language Support file for Spanish.
+   29-May-1998 Translated by Alfredo Sola (alfredo@intelideas.com)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   29-Jul-1998 Translation for most countries and 1.2 new strings
+               by (alfredo@intelideas.com)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   14-Apr-1999 Fixed missing comma, extra char (brad@mrunix.net)
+   06-Jun-1999 Updated by Alfredo Sola for new strings
+               changed e-mail address (alfredo@intelideas.com)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   11-Agu-1999 Translation for more countries, eliminated HTML character
+               entities in countries names, other changes (jcouto@redsvn.com)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   03-Apr-2002 Fixed "CX" country Luis Gonzalez Miranda (lgm@temuco.ecweb.cl)
+   16-Apr-2002 Added missing translation and corrected mispelling errors
+               by (mi_cuenta@yahoo.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Spanish";
+char *langcode  = "es";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "registros";
+char *msg_addresses="direcciones";
+char *msg_ignored = "ignorados";
+char *msg_bad     = "erróneos";
+char *msg_in      = "en";
+char *msg_seconds = "segundos";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: No puedo abrir histórico";
+char *msg_log_use = "Utilizando histórico";
+char *msg_dir_err = "Error: no se puede cambiar al directorio";
+char *msg_dir_use = "Creando informe en";
+char *msg_cur_dir = "directorio actual";
+char *msg_hostname= "El nombre de máquina en el informe es";
+char *msg_ign_hist= "Ignorando registro anterior...";
+char *msg_no_hist = "No encuentro el archivo histórico...";
+char *msg_get_hist= "Leyendo archivo...";
+char *msg_put_hist= "Guardando información de archivo...";
+char *msg_hist_err= "Error: No puedo abrir el archivo histórico";
+char *msg_bad_hist= "Error: Ignorando un registro inválido en el archivo";
+char *msg_bad_conf= "Error: no puedo abrir el archivo de configuración";
+char *msg_bad_key = "Aviso: palabra clave errónea";
+char *msg_bad_date= "Error: ignorando registro (fecha errónea)";
+char *msg_ign_nscp= "Saltando registro de cabecera Netscape";
+char *msg_bad_rec = "Saltando registro erróneo";
+char *msg_no_vrec = "No encuentro ningún registro válido";
+char *msg_gen_rpt = "Generando informe de";
+char *msg_gen_sum = "Generando informe resumido";
+char *msg_get_data= "Leyendo datos de una ejecucion previa...";
+char *msg_put_data= "Grabando datos de la ejecucion actual...";
+char *msg_no_data = "Datos de ejecucion previa no encontrados...";
+/*char *msg_bad_data= "Registro de datos invalidos";*/
+char *msg_bad_data= "Error: No puedo cargar los datos de la corrida";
+char *msg_data_err= "Error: No puedo grabar los datos de la ejecucion actual";
+char *msg_dup_data= "Aviso: Posibles datos duplicados encontrados";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "No puedo reservar suficiente memoria, quito los principales sitios";
+char *msg_nomem_tr= "No puedo reservar suficiente memoria, quito los principales enlaces";
+char *msg_nomem_tu= "No puedo reservar suficiente memoria, quito los principales URLs";
+char *msg_nomem_tc= "No puedo reservar suficiente memoria, quito los principales países";
+char *msg_nomem_ta= "No puedo reservar suficiente memoria, quito los principales programas cliente";
+char *msg_nomem_tsr="No puedo reservar suficiente memoria, quito las principales cadenas de búsqueda";
+char *msg_nomem_ti= "No puedo reservar suficiente memoria, quito los principales usuarios";
+char *msg_nomem_dh= "Error agregando nodo de servidor (diario), me lo salto";
+char *msg_nomem_mh= "Error agregando nodo de servidor (mensual), me lo salto";
+char *msg_nomem_u = "Error agregando nodo de URL, me lo salto";
+char *msg_nomem_a = "Error agregando nodo de navegador, me lo salto";
+char *msg_nomem_r = "Error agregando nodo de enlace origen, me lo salto";
+char *msg_nomem_sc= "Error agregando nodo de cadenas de búsqueda, me lo salto";
+char *msg_nomem_i = "Error agregando nodo de usuarios, me lo salto";
+
+/* log record errors */
+char *msg_big_rec = "Error: Saltando registro de histórico demasiado grande";
+char *msg_big_host= "Aviso: Cortando nombre de máquina demasiado grande";
+char *msg_big_date= "Aviso: Cortando campo de fecha demasiado grande";
+char *msg_big_req = "Aviso: Cortando campo de petición demasiado grande";
+char *msg_big_ref = "Aviso: Cortando campo de enlace origen demasiado grande";
+char *msg_big_user= "Aviso: Cortando campo de usuario demasiado grande";
+char *msg_big_one = "Aviso: Una cadena sobrepasa el almacenamiento disponible";
+
+/* misc errors */
+char *msg_no_open = "Error: No puedo abrir un archivo";
+
+/* Help display... */
+char *h_usage1 = "Forma de uso";
+char *h_usage2 = "[opciones] [archivo histórico]";
+char *h_msg[]= {
+         "-h        = mostrar este mensaje"                        ,
+         "-V        = ver información de versión"                  ,
+         "-v        = be verbose"                                  ,
+         "-d        = mostrar información adicional para depuración" ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)"  ,
+         "-f        = procesa históricos fuera de secuencia (ver man)",
+         "-i        = ignorar archivo"                             ,
+         "-p        = recordar estado (incremental)"               ,
+         "-b        = ignorar estado (incremental)"                ,
+         "-q        = suprimir mensajes de información"            ,
+         "-Q        = suprimir TODOS los mensajes"                 ,
+         "-Y        = suprimir gráfico de países"                  ,
+         "-G        = suprimir gráfico por horas"                  ,
+         "-H        = suprimir estadísticas por horas"             ,
+         "-L        = suprimir leyendas coloreadas de los gráficos",
+         "-l N      = usar N líneas de fondo en los gráficos"      ,
+         "-m N      = especificar temporizador de visitas (N segundos)",
+         "-T        = mostrar información de tiempo de ejecución"  ,
+         "-c archivo= usar el archivo de configuración 'archivo'"  ,
+         "-n nombre = nombre de la máquina"                        ,
+         "-o dir    = directorio de salida"                        ,
+         "-t nombre = titular el informe 'nombre'"                 ,
+         "-a nombre = esconder el programa cliente 'nombre'"       ,
+         "-r nombre = esconder el enlace origen 'nombre'"          ,
+         "-s nombre = esconder el servidor 'nombre'"               ,
+         "-u nombre = esconder el URL 'nombre'"                    ,
+         "-x nombre = usa extension de archivos 'nombre'"          ,
+         "-O nombre = Omit page 'nombre'"                          ,
+         "-P nombre = usa extension de paginas 'nombre'"           ,
+         "-I nombre = Alias del indice 'nombre'"                   ,
+         "-K n      = n months in summary table"                   ,
+         "-k n      = n months in summary graph"                   ,
+         "-A n      = Mostrar los n primeros navegadores"          ,
+         "-C n      = Mostrar los n primeros paises"               ,
+         "-R n      = Mostrar los n primeros enlaces origen"       ,
+         "-S n      = Mostrar los n primeros clientes"             ,
+         "-U n      = Mostrar los n primeros URLs"                 ,
+         "-e n      = Mostrar las n primeras páginas de entrada"   ,
+         "-E n      = Mostrar las n primeras páginas de salida"    ,
+         "-g n      = Agrupar los Dominios a N niveles"            ,
+         "-X        = Esconde la información de cada página"       ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D nombre = Usar el archivo cache de DNS 'nombre'"       ,
+         "-N n      = Número de procesos DNS (0=deshabilitar)"     ,
+         "-j        = Enable native GeoDB lookups"                 ,
+         "-J nombre = Use GeoDB database 'nombre'"                 ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W nombre = Use GeoIP database 'nombre'"         ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Período resumido";
+char *msg_hhdr_gt = "Generado el";
+
+/* main index strings */
+char *msg_main_us = "Resumen de uso de";
+/* char *msg_main_per= "Últimos 12 meses"; */
+char *msg_main_per= "Resumen por meses";
+char *msg_main_sum= "Resumen por meses";
+char *msg_main_da = "Media diaria";
+char *msg_main_mt = "Totales mensuales";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Uso diario en";
+char *msg_hmth_hu = "Uso por horas en";
+
+/* table header strings */
+char *msg_h_by    = "Por";
+char *msg_h_avg   = "Media";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Total";
+char *msg_h_totals= "Totales";
+char *msg_h_day   = "Día";
+char *msg_h_mth   = "Mes";
+char *msg_h_hour  = "Hora";
+char *msg_h_hits  = "Accesos";
+char *msg_h_pages = "Páginas";
+char *msg_h_visits= "Visitas";
+char *msg_h_files = "Archivos";
+char *msg_h_sites = "Clientes";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Máquina";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Navegador";
+char *msg_h_ref   = "Enlace origen";
+char *msg_h_ctry  = "País";
+char *msg_h_search= "Cadena de Búsqueda";
+char *msg_h_uname = "Usuario";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Estadísticas diarias";
+char *msg_hlnk_hs = "Estadísticas por horas";
+char *msg_hlnk_u  = "URLs";
+char *msg_hlnk_s  = "Clientes";
+char *msg_hlnk_a  = "Navegadores";
+char *msg_hlnk_c  = "Países";
+char *msg_hlnk_r  = "Enlaces origen";
+char *msg_hlnk_en = "Entrada";
+char *msg_hlnk_ex = "Salida";
+char *msg_hlnk_sr = "Búsqueda";
+char *msg_hlnk_i  = "Usuarios";
+
+/* monthly total table */
+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_us = "Total Clientes";
+char *msg_mtot_ur = "Total Enlaces origen";
+char *msg_mtot_ua = "Total Navegadores";
+char *msg_mtot_uu = "Total URLs";
+char *msg_mtot_ui = "Total Usuarios Únicos";
+char *msg_mtot_mhd= "Accesos por Día";
+char *msg_mtot_mhh= "Accesos por Hora";
+char *msg_mtot_mfd= "Archivos por Día";
+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_rc = "Accesos por código de respuesta";
+
+/* daily total table */
+char *msg_dtot_ds = "Estadísticas diarias de";
+
+/* hourly total table */
+char *msg_htot_hs = "Estadísticas por hora de";
+
+/* country pie chart */
+char *msg_ctry_use= "Accesos por país en";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Los";
+char *msg_top_of  = "primeros de un total de";
+char *msg_top_s   = "clientes";
+char *msg_top_u   = "URLs";
+char *msg_top_r   = "enlaces origen";
+char *msg_top_a   = "programas de cliente";
+char *msg_top_c   = "países";
+char *msg_top_en  = "Total de Páginas de Entrada";
+char *msg_top_ex  = "Total de Páginas de Salida";
+char *msg_top_sr  = "Total de Cadenas de Búsqueda";
+char *msg_top_i   = "Total de Usuarios";
+char *msg_v_sites = "Ver todos los Sitios";
+char *msg_v_urls  = "Ver todos los enlaces";
+char *msg_v_refs  = "Ver todos los Referentes";
+char *msg_v_agents= "Ver todos los Navegadores";
+char *msg_v_search= "Ver todas las Palabras de Búsqueda";
+char *msg_v_users = "Ver todos los Usuarios";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+
+char *s_month[12]={ "Ene", "Feb", "Mar",
+                    "Abr", "May", "Jun",
+                    "Jul", "Ago", "Sep",
+                    "Oct", "Nov", "Dic"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Enero",  "Febrero", "Marzo",   "Abril",
+                    "Mayo",      "Junio",     "Julio",    "Agosto",
+                    "Septiembre","Octubre",  "Noviembre","Diciembre"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Código de respuesta indefinido",     0 },
+         { "100 - Continúa",                     0 },
+         { "101 - Cambiando de protocolo",         0 },
+         { "200 - OK",                             0 },
+         { "201 - Creado",                        0 },
+         { "202 - Aceptado",                       0 },
+         { "203 - Información no autorizada",  0 },
+         { "204 - No hay contenido",                     0 },
+         { "205 - Contenido renovado",                  0 },
+         { "206 - Contenido parcial",                0 },
+         { "300 - Varias opciones",               0 },
+         { "301 - Movido permanentemente",              0 },
+         { "302 - Encontrado",              0 },
+         { "303 - Ver otros",                      0 },
+         { "304 - No modificado",                   0 },
+         { "305 - Utilizar proxy",                      0 },
+         { "307 - Movido temporalmente",              0 },
+         { "400 - Petición errónea",                    0 },
+         { "401 - No autorizado",                   0 },
+         { "402 - Se requiere pago",               0 },
+         { "403 - Prohibido",                      0 },
+         { "404 - No se encuentra",                      0 },
+         { "405 - Método no permitido",             0 },
+         { "406 - No aceptable",                 0 },
+         { "407 - Se requiere autentificación de proxy",  0 },
+         { "408 - Fin de tiempo de espera",                0 },
+         { "409 - Conflicto",                       0 },
+         { "410 - Abandonado",                           0 },
+         { "411 - Se requiere longitud",                0 },
+         { "412 - Falla la condición previa",            0 },
+         { "413 - Entidad de petición demasiado grande",       0 },
+         { "414 - URI de petición demasiado larga",           0 },
+         { "415 - Medio no soportado",         0 },
+         { "416 - No se puede satisfacer el rango pedido", 0 },
+         { "417 - Falla lo que se esperaba",              0 },
+         { "500 - Error interno del servidor",          0 },
+         { "501 - No implementado",                0 },
+         { "502 - Puerta de enlace incorrecta",                    0 },
+         { "503 - Servicio no disponible",            0 },
+         { "504 - Fin de tiempo de espera para la puerta de enlace",      0 },
+         { "505 - Versión de HTTP no soportada",     0 } };
+
+char *msg_title   = "Estadísticas de uso para";
+char *msg_h_other = "Otro";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct country_code ctry[] = {
+{ 0,                      "No resuelve/desconocido",          0,0,0 },
+{ IDX_3C('c','o','m'),    "Comercial (com)",                  0,0,0 },
+{ IDX_3C('e','d','u'),    "Educacion (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "Gobierno USA (gov)",               0,0,0 },
+{ IDX_3C('i','n','t'),    "Internacional (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "Ejército USA (mil)",               0,0,0 },
+{ IDX_3C('n','e','t'),    "Red (net)",                        0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizaciones sin fines de lucro (org)", 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"OTAN",                             0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "Emiratos Arabes Unidos",           0,0,0 },
+{ IDX_2C('a','f'),        "Afganistán",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua y Barbuda",                0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Antillas holandesas",              0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antártida",                        0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "Samoa Americana",                  0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaiján",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia Herzegovina",               0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Bélgica",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahraín",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundí",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benín",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brasil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhután",                           0,0,0 },
+{ IDX_2C('b','v'),        "Isla Bouvet",                      0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Bielorusia",                       0,0,0 },
+{ IDX_2C('b','z'),        "Belice",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canadá",                           0,0,0 },
+{ IDX_2C('c','c'),        "Islas Cocos (Keeling)",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "República Centroafricana",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Suiza",                            0,0,0 },
+{ IDX_2C('c','i'),        "Costa de Marfil",                  0,0,0 },
+{ IDX_2C('c','k'),        "Islas Cook",                       0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Camerún",                          0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cabo Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Isla Navidad",                     0,0,0 },
+{ IDX_2C('c','y'),        "Chipre",                           0,0,0 },
+{ IDX_2C('c','z'),        "República Checa",                  0,0,0 },
+{ IDX_2C('d','e'),        "Alemania",                         0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Dinamarca",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "República Dominicana",             0,0,0 },
+{ IDX_2C('d','z'),        "Argelia",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egipto",                           0,0,0 },
+{ IDX_2C('e','h'),        "Sahara Occidental",                0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "España",                           0,0,0 },
+{ IDX_2C('e','t'),        "Etiopía",                          0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandia",                        0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Malvinas",                         0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Islas Faroe",                      0,0,0 },
+{ IDX_2C('f','r'),        "Francia",                          0,0,0 },
+{ IDX_2C('g','a'),        "Gabón",                            0,0,0 },
+{ IDX_2C('g','b'),        "Gran Bretaña (Reino Unido)",       0,0,0 },
+{ IDX_2C('g','d'),        "Granada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Guinea francesa",                  0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Groenlandia",                      0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadalupe",                        0,0,0 },
+{ IDX_2C('g','q'),        "Guinea Ecuatorial",                0,0,0 },
+{ IDX_2C('g','r'),        "Grecia",                           0,0,0 },
+{ IDX_2C('g','s'),        "Islas S. Georgia y S. Sandwich",   0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Islas Heard y McDonald",           0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croacia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haití",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungría",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "Territorios Británicos del Océano Índico", 0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Irán",                             0,0,0 },
+{ IDX_2C('i','s'),        "Islandia",                         0,0,0 },
+{ IDX_2C('i','t'),        "Italia",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordania",                         0,0,0 },
+{ IDX_2C('j','p'),        "Japón",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenia",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstán",                       0,0,0 },
+{ IDX_2C('k','h'),        "Camboya",                          0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts y Nevis",              0,0,0 },
+{ IDX_2C('k','p'),        "Corea del Norte",                  0,0,0 },
+{ IDX_2C('k','r'),        "Corea del Sur",                    0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Islas Caimán",                     0,0,0 },
+{ IDX_2C('k','z'),        "Kazagistán",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Líbano",                           0,0,0 },
+{ IDX_2C('l','c'),        "Santa Lucía",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lituania",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburgo",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libia",                            0,0,0 },
+{ IDX_2C('m','a'),        "Marruecos",                        0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldavia",                         0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Islas Marshall",                   0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macao",                            0,0,0 },
+{ IDX_2C('m','p'),        "Islas Marianas del Norte",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinica",                        0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauricio",                         0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "México",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malasia",                          0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "Nueva Caledonia",                  0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Isla Norfolk",                     0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Holanda",                          0,0,0 },
+{ IDX_2C('n','o'),        "Noruega",                          0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Nueva Zelanda",                    0,0,0 },
+{ IDX_2C('o','m'),        "Omán",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panamá",                           0,0,0 },
+{ IDX_2C('p','e'),        "Perú",                             0,0,0 },
+{ IDX_2C('p','f'),        "Polinesia francesa",               0,0,0 },
+{ IDX_2C('p','g'),        "Papúa Nueva Guinea",               0,0,0 },
+{ IDX_2C('p','h'),        "Filipinas",                        0,0,0 },
+{ IDX_2C('p','k'),        "Pakistán",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polonia",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre y Miquelon",            0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Isla Reunión",                     0,0,0 },
+{ IDX_2C('r','o'),        "Rumania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Federacion Rusa",                  0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Arabia Saudita",                   0,0,0 },
+{ IDX_2C('s','b'),        "Islas Salomón",                    0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudán",                            0,0,0 },
+{ IDX_2C('s','e'),        "Suecia",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "Sta. Elena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Eslovenia",                        0,0,0 },
+{ IDX_2C('s','j'),        "Islas Svalbard y Jan Mayen",       0,0,0 },
+{ IDX_2C('s','k'),        "República Eslovaca",               0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leona",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Santo Tomas y Principe",           0,0,0 },
+{ IDX_2C('s','u'),        "URSS (ant.)",                      0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swazilandia",                      0,0,0 },
+{ IDX_2C('t','c'),        "Islas Turcos y Caicos",            0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "Territorios Franceses del Sur",    0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tailandia",                        0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistán",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistán",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunez",                            0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turquía",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad y Tobago",                0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ucrania",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Reino Unido",                      0,0,0 },
+{ IDX_2C('u','m'),        "Islas Menores Exteriores Norteamericanas", 0,0,0 },
+{ IDX_2C('u','s'),        "Estados Unidos",                   0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistán",                       0,0,0 },
+{ IDX_2C('v','a'),        "Ciudad Estado Vaticano (Sta. Sede)", 0,0,0 },
+{ IDX_2C('v','c'),        "San Vincente y las Granadinas",    0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Islas Virgenes (Británicas)",      0,0,0 },
+{ IDX_2C('v','i'),        "Islas Virgenes (U.S.A)",           0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Islas Wallis y Futuna",            0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "Sudafrica",                        0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0,                      NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.swedish b/lang/webalizer_lang.swedish
new file mode 100644 (file)
index 0000000..fe644f8
--- /dev/null
@@ -0,0 +1,663 @@
+/*
+   webalizer_lang.swedish
+
+   Webalizer V2.0x Language Support file for Swedish.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   03-Oct-1998 Swedish Translation by Daniel Bergstrom (daniel@bergstrom.net)
+   28-Oct-1998 Lots of typos fixed, Daniel Bergstrom (daniel@bergstrom.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   26-Apr-1999 More typos fixed, thanks to "Mika Perälä" <mika@unit.liu.se>
+               (daniel@bergstrom.net)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   14-Oct-1999 Additional translation by David Cross (david.cross@forefront.net)
+   22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   01-Jun-2000 Modified/corrected by Joaquim Homrighausen (joho@webbplatsen.se)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+   14-nov-2008 Modifed for HTML-special chars (bengt@sm7jqb.se)
+
+   Please fix all typos, or drop me a note and i will fix it and submit
+   patches upstream. /daniel
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Swedish";
+char *langcode  = "sv";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "poster";
+char *msg_addresses="adresser";
+char *msg_ignored = "ignorerade";
+char *msg_bad     = "felaktiga";
+char *msg_in      = "i";
+char *msg_seconds = "sekunder";
+
+/* progress and setup error messages */
+char *msg_log_err = "Fel: kan inte öppna loggfilen";
+char *msg_log_use = "Använder loggfil";
+char *msg_dir_err = "Fel: kan inte byta katalog till";
+char *msg_dir_use = "Skapar utdata i";
+char *msg_cur_dir = "aktuell katalog";
+char *msg_hostname= "Datornamn för rapporterna är";
+char *msg_ign_hist= "Ignorerar tidigare historia...";
+char *msg_no_hist = "Hittade inte historiefilen...";
+char *msg_get_hist= "Läser historiefil...";
+char *msg_put_hist= "Sparar historieinformation...";
+char *msg_hist_err= "Fel: kan inte skriva till historefil";
+char *msg_bad_hist= "Fel: Ignorerar felaktig historiepost";
+char *msg_bad_conf= "Fel: Kan inte öppna konfigurationsfilen";
+char *msg_bad_key = "Varning: Ogiltigt nyckelord";
+char *msg_bad_date= "Fel: hoppar över post (felaktigt datum)";
+char *msg_ign_nscp= "Hoppar över Netscape-specifik inledningsrad";
+char *msg_bad_rec = "Hoppar över felaktig post";
+char *msg_no_vrec = "Hittade inga giltiga poster!";
+char *msg_gen_rpt = "Genererar rapport för";
+char *msg_gen_sum = "Genererar översiktsinformation";
+char *msg_get_data= "Läser data om föregående genomgång...";
+char *msg_put_data= "Sparar data om denna genomgång...";
+char *msg_no_data = "Hittade inte data om föregående genomgång...";
+/*char *msg_bad_data= "Felaktig datapost";*/
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Fel: kan inte spara data från denna omgång";
+char *msg_dup_data= "Varning: Hittar data som sannolikt är duplicerad";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Ingen cachefil specificerad...";
+char *msg_dns_nodb= "Fel: Kan inte öppna DNS-cachefilen";
+char *msg_dns_nolk= "Fel: Kan inte låsa DNS-cachefilen";
+char *msg_dns_usec= "Använder DNS-cachefilen";
+char *msg_dns_rslv= "DNS Anrop";
+char *msg_dns_none= "Ingen att bearbeta";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Kan inte allokera minne, stänger av 'Top sites'";
+char *msg_nomem_tr= "Kan inte allokera minne, stänger av 'Top referrers'";
+char *msg_nomem_tu= "Kan inte allokera minne, stänger av 'Top URLs'";
+char *msg_nomem_tc= "Kan inte allokera minne, stänger av 'Top Countries'";
+char *msg_nomem_ta= "Kan inte allokera minne, stänger av 'Top User Agents'";
+char *msg_nomem_tsr="Kan inte allokera minne, stänger av 'Top Search Strings'";
+char *msg_nomem_ti= "Kan inte allokera minne, stänger av 'Top Usernames'";
+char *msg_nomem_dh= "Fel vid tillägg av dator i lista (daglig), hoppar över";
+char *msg_nomem_mh= "Fel vid tillägg av dator i lista (månatlig), hoppar över";
+char *msg_nomem_u = "Fel vid tillägg av URL i lista, hoppar över";
+char *msg_nomem_a = "Fel vid tillägg av klienttyp i lista, hoppar över";
+char *msg_nomem_r = "Fel vid tillägg av hänvisning i lista, hoppar över";
+char *msg_nomem_sc= "Fel vid tillägg av söksträng, hoppar över";
+char *msg_nomem_i = "Fel vid tillägg av användarnamn, hoppar över";
+
+/* log record errors */
+char *msg_big_rec = "Fel: hoppar över för stor post i loggfil";
+char *msg_big_host= "Varning: Anpassar (kapar) för långt datornamn";
+char *msg_big_date= "Varning: Anpassar (kapar) för långt datumfält";
+char *msg_big_req = "Varning: Anpassar (kapar) för långt frågefält";
+char *msg_big_ref = "Varning: Anpassar (kapar) för långt hänvisningsfält";
+char *msg_big_user= "Warning: Anpassar (kapar) för långt användarnamn";
+char *msg_big_one = "Varning: Sträng överskrider storleken på lagringsutrymme";
+
+/* misc errors */
+char *msg_no_open = "Fel: kan inte öppna fil";
+
+/* Help display... */
+char *h_usage1 = "Användning";
+char *h_usage2 = "[flaggor] [loggfil]";
+char *h_msg[]= {
+         "-h         = skriv hjälptext"                        ,
+         "-V         = skriv versionsinformation"              ,
+         "-v         = be verbose"                             ,
+         "-d         = skriv ytterligare debuginformation"     ,
+         "-F typ     = Loggtyp.  typ= (clf | ftp | squid | w3c)",
+         "-f         = hantera sekvensfel"                     ,
+         "-i         = ignorera historiefilen"                 ,
+         "-p         = bevara tillstånd (inkrementell)"        ,
+         "-b         = ignorera tillstånd (inkrementell)"      ,
+         "-q         = visa ej informationsmeddelanden"        ,
+         "-Q         = visa ej någon information"              ,
+         "-Y         = skapa ej graf för länder"               ,
+         "-G         = skapa ej graf för timmar"               ,
+         "-H         = skapa ej statistik för timmar"          ,
+         "-L         = supress color coded graph legends"      ,
+         "-l num     = skapa 'num' referenslinjer för grafer"  ,
+         "-m num     = Visit timeout value (seconds)"          ,
+         "-T         = skriv information om tidsåtgång"        ,
+         "-c fil     = använd konfigurationsfilen 'fil'"       ,
+         "-n namn    = datornamn att använda"                  ,
+         "-o katalog = katalog för utmatning"                  ,
+         "-t namn    = använd 'namn' som titel"                ,
+         "-a namn    = dölj användarklient 'namn'"             ,
+         "-r namn    = dölj hänvisning 'namn'"                 ,
+         "-s namn    = dölj klientursprungsadress 'namn'"      ,
+         "-u namn    = dölj URL 'namn'"                        ,
+         "-x namn    = Använd filnamnsändelse 'namn'"          ,
+         "-O namn    = Omit page 'namn'"                       ,
+         "-P namn    = Page type extension 'namn'"             ,
+         "-I namn    = ha 'namn' som alias till index.html"    ,
+         "-K antal   = 'antal' months in summary table"        ,
+         "-k antal   = 'antal' months in summary graph"        ,
+         "-A antal   = visa 'antal' i listan över klienter"    ,
+         "-C antal   = visa 'antal' i listan över länder"      ,
+         "-R antal   = visa 'antal' i listan över hänvisningar",
+         "-S antal   = visa 'antal' i ursprungsadress-listan"  ,
+         "-U antal   = visa 'antal' i listan över URL-er"      ,
+         "-e antal   = Visa 'antal' i listan över ingångssidor",
+         "-E antal   = Visa 'antal' i listan över utgångssidor",
+         "-g antal   = Group Domains to 'antal' levels"        ,
+         "-X         = Göm individuella platser"               ,
+         "-z dir     = Use country flags in 'dir'"             ,
+#ifdef USE_DNS
+         "-D namn    = Använd DNS-cachfil 'namn'"              ,
+         "-N num     = Antal DNS-processer (0=stäng av)"       ,
+         "-j         = Enable native GeoDB lookups"            ,
+         "-J namn    = Use GeoDB database 'namn'"              ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W namn   = Använd GeoIP databas 'namn'"           ,
+#endif
+         NULL};
+
+#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *))
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+/*    Changed by Bengt Samuelsson <bengt@sm7jqb.se>                    */
+/*     Å = &Aring;     Ä = &Auml;      Ö = &Ouml;                     */
+/*     å = &aring;     ä = &auml;      ö = &ouml;                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Period f&ouml;r summering";
+char *msg_hhdr_gt = "Skapad";
+
+/* main index strings */
+/* For libgd is no HTML letters */
+char *msg_main_us = "Summering för";
+
+/* char *msg_main_per= "Senaste 12 m&aring;naderna"; */
+char *msg_main_per= "Summering m&aring;nad f&ouml;r m&aring;nad";
+char *msg_main_sum= "Summering m&aring;nad f&ouml;r m&aring;nad";
+char *msg_main_da = "Medel &ouml;ver dagen";
+char *msg_main_mt = "M&aring;natliga summor";
+
+/* month HTML page strings */
+/* For libgd is no HTML letters */
+char *msg_hmth_du = "Daglig användning för";
+char *msg_hmth_hu = "Användning timme för timme för";
+
+/* table header strings */
+/* For libgd is no HTML letters */
+char *msg_h_by    = "av";
+char *msg_h_avg   = "Medel";
+char *msg_h_max   = "Max";
+char *msg_h_total = "Summa";
+char *msg_h_totals= "Summor";
+char *msg_h_day   = "Dag";
+//     char *msg_h_mth   = "M&aring;nad";      //      HTML
+char *msg_h_mth   = "Månad";   //      GD
+char *msg_h_hour  = "Timme";
+//     char *msg_h_hits  = "Tr&auml;ffar";     //      HTML
+char *msg_h_hits  = "Träffar"; //      GD
+char *msg_h_pages = "Sidor";
+//     char *msg_h_visits= "Bes&ouml;.";       //      HTML
+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_hname = "V&auml;rdnamn";    //      HTML
+char *msg_h_hname = "Värdnamn";        //      GD
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Klienttyp";
+char *msg_h_ref   = "Referens";
+char *msg_h_ctry  = "Land";
+//     char *msg_h_search= "S&ouml;kstr&auml;ng";      //      HTML
+char *msg_h_search= "Söksträng";       //      GD
+//     char *msg_h_uname = "Anv&auml;ndarnamn";        //      HTML
+char *msg_h_uname = "Användarnamn";    //      GD
+
+/* links along top of page */
+char *msg_hlnk_ds = "Daglig statistik";
+char *msg_hlnk_hs = "Statistik timme f&ouml;r timme";
+char *msg_hlnk_u  = "URLer";
+char *msg_hlnk_s  = "Klientadresser";
+char *msg_hlnk_a  = "Klienttyper";
+char *msg_hlnk_c  = "L&auml;nder";
+char *msg_hlnk_r  = "H&auml;nvisare";
+char *msg_hlnk_en = "Ing&aring;ng";
+char *msg_hlnk_ex = "Utg&aring;ng";
+char *msg_hlnk_sr = "S&ouml;k";
+char *msg_hlnk_i  = "Anv&auml;ndare";
+
+/* monthly total table */
+char *msg_mtot_ms = "M&aring;natlig statistik f&ouml;r";
+char *msg_mtot_th = "Totalt antal tr&auml;ffar";
+char *msg_mtot_tf = "Totalt antal filer";
+char *msg_mtot_tx = "Totalt antal kilobytes";
+char *msg_mtot_us = "Totalt antal unika klientadresser";
+char *msg_mtot_ur = "Totalt antal unika h&auml;nvisningar";
+char *msg_mtot_ua = "Totalt antal unika klienttyper";
+char *msg_mtot_uu = "Totalt antal unika URLer";
+char *msg_mtot_ui = "Totalt antal unika anv&auml;ndarnamn";
+char *msg_mtot_mhd= "Tr&auml;ffar per dag";
+char *msg_mtot_mhh= "Tr&auml;ffar per timme";
+char *msg_mtot_mfd= "Filer per dag";
+char *msg_mtot_mpd= "Sidor per dag";
+char *msg_mtot_msd= "Klientadresser per dag";
+char *msg_mtot_mvd= "Bes&ouml;k per dag";
+char *msg_mtot_mkd= "Kilobytes per dag";
+char *msg_mtot_rc = "Tr&auml;ffar sorterade efter svarskod";
+
+/* daily total table */
+char *msg_dtot_ds = "Daglig statistik f&ouml;r";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistik timme f&ouml;r timme f&ouml;r";
+
+/* country pie chart */
+/* For libgd is no HTML letters */
+char *msg_ctry_use= "Statsistik sorterat efter land för";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Vanligaste";
+char *msg_top_of  = "av totalt";
+char *msg_top_s   = "klientursprung";
+char *msg_top_u   = "URLer";
+char *msg_top_r   = "h&auml;nvisnigar";
+char *msg_top_a   = "klienttyper";
+char *msg_top_c   = "l&auml;nder";
+char *msg_top_en  = "totalt ing&aring;ngssidor";
+char *msg_top_ex  = "totalt utg&aring;ngssidor";
+char *msg_top_sr  = "totalt s&ouml;kstr&auml;ngar";
+char *msg_top_i   = "totalt anv&auml;ndarnamn";
+char *msg_v_sites = "Visa Alla Sidor";
+char *msg_v_urls  = "Visa Alla URLer";
+char *msg_v_refs  = "Visa Alla Referenser";
+char *msg_v_agents= "Visa Alla Anv&auml;ndar Agenter";
+char *msg_v_search= "Visa Alla S&ouml;k Str&auml;ngar";
+char *msg_v_users = "Visa Alla Anv&auml;ndarnamn";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "Maj", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Okt", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Januari",  "Februari", "Mars",   "April",
+                    "Maj",      "Juni",     "Juli",    "Augusti",
+                    "September","Oktober",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Oidentifierad svarskod",                    0 },
+         { "Kod 100 - Forts&auml;tt",                   0 },
+         { "Kod 101 - Byter protokoll",                 0 },
+         { "Kod 200 - OK",                              0 },
+         { "Kod 201 - Skapad",                          0 },
+         { "Kod 202 - Accepterad",                      0 },
+         { "Kod 203 - Icke auktoritativ information",   0 },
+         { "Kod 204 - Inget inneh&aring;ll",            0 },
+         { "Kod 205 - &aring;terst&auml;ll inneh&aring;ll", 0 },
+         { "Kod 206 - Partiellt inneh&aring;ll",        0 },
+         { "Kod 300 - Multipla val",                    0 },
+         { "Kod 301 - Permanent flyttad",               0 },
+         { "Kod 302 - Funnen",                          0 },
+         { "Kod 303 - Se annan",                        0 },
+         { "Kod 304 - Inte &auml;ndrad",                0 },
+         { "Kod 305 - Anv&auml;nd proxy",               0 },
+         { "Kod 307 - Tillf&auml;lligt flyttad",        0 },
+         { "Kod 400 - Felaktig f&ouml;rfr&aring;gan",   0 },
+         { "Kod 401 - Icke auktoriserad",               0 },
+         { "Kod 402 - Betalning kr&auml;vs",            0 },
+         { "Kod 403 - F&ouml;rbjuden",                  0 },
+         { "Kod 404 - Hittades ej",                     0 },
+         { "Kod 405 - Otill&aring;ten metod",           0 },
+         { "Kod 406 - Icke accepterbar",                0 },
+         { "Kod 407 - Verifiering fr&aring;n proxy kr&auml;vs", 0 },
+         { "Kod 408 - F&ouml;rfr&aring;gan gick &ouml;ver tiden", 0 },
+         { "Kod 409 - Konflikt",                        0 },
+         { "Kod 410 - Borta",                           0 },
+         { "Kod 411 - Beh&ouml;ver l&auml;ngd",         0 },
+         { "Kod 412 - Misslyckades med villkor",        0 },
+         { "Kod 413 - F&ouml;rfr&aring;geenhet f&ouml;r stor", 0 },
+         { "Kod 414 - F&ouml;rfr&aring;ge-URI f&ouml;r l&aring;ng", 0 },
+         { "Kod 415 - Ej st&ouml;dd medietyp",         0 },
+         { "Kod 416 - Efterfr&aring;gat intervall ej m&ouml;jligt",0 },
+         { "Kod 417 - Expectation Failed",              0 },
+         { "Kod 500 - Internt serverfel",               0 },
+         { "Kod 501 - Ej implementerad",                0 },
+         { "Kod 502 - Felaktig gateway",                0 },
+         { "Kod 503 - Tj&auml;nsten otillg&auml;nglig", 0 },
+         { "Kod 504 - Gateway gick &ouml;ver tiden",    0 },
+         { "Kod 505 - denna HTTP-version st&ouml;ds icke",0 } 
+};
+
+char *msg_title   = "Statistik &ouml;ver anv&auml;ndning f&ouml;r";
+char *msg_h_other = "Annan";
+
+/* Country codes (previously in ctry.h header file) */
+/* For libgd is no HTML letters */
+struct country_code ctry[] = {
+{ 0,                           "Ej uppslagen/okänd",0,0,0 },
+{ IDX_3C('c','o','m'),         "Kommersiell (com)",0,0,0 },
+{ IDX_3C('e','d','u'),         "Utbildning (edu)",0,0,0 },
+{ IDX_3C('g','o','v'),         "USA, staten (gov)",0,0,0 },
+{ IDX_3C('i','n','t'),         "Interationell (int)",0,0,0 },
+{ IDX_3C('m','i','l'),         "USA, militär (mil)",0,0,0 },
+{ IDX_3C('n','e','t'),         "Nätverk (net)",0,0,0 },
+{ IDX_3C('o','r','g'),         "Ideell organisation (org)",0,0,0 },
+{ IDX_3C('b','i','z'),         "Generic Business (biz)",0,0,0 },
+{ IDX_3C('c','a','t'),         "Catalan Community (cat)",0,0,0 },
+{ IDX_3C('p','r','o'),         "Professional (pro)",0,0,0 },
+{ IDX_3C('t','e','l'),         "Ind. Contact Data (tel)",0,0,0 },
+{ IDX_4C('a','e','r','o'),     "Air Transport Industry (aero)",0,0,0 },
+{ IDX_4C('a','s','i','a'),     "Asia Pacific Community (asia)",0,0,0 },
+{ IDX_4C('c','o','o','p'),     "Cooperative Association (coop)",0,0,0 },
+{ IDX_4C('i','n','f','o'),     "Generic TLD (info)",0,0,0 },
+{ IDX_4C('j','o','b','s'),     "Human Resources (jobs)",0,0,0 },
+{ IDX_4C('m','o','b','i'),     "Generic Mobile TLD (mobi)",0,0,0 },
+{ IDX_4C('n','a','m','e'),     "Individual (name)",0,0,0 },
+{ IDX_4C('a','r','p','a'),     "Address Routing (arpa)",0,0,0 },
+{ IDX_4C('n','a','t','o'),     "Nato (nato)",  0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'),"Museums (museum)",  0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'),"Travel Ind. (travel)",0,0,0 },
+{ IDX_2C('a','c'),             "Ascension Island",0,0,0 },
+{ IDX_2C('a','d'),             "Andorra",0,0,0 },
+{ IDX_2C('a','e'),             "Förenade arabemiraten",0,0,0 },
+{ IDX_2C('a','f'),             "Afganistan",   0,0,0 },
+{ IDX_2C('a','g'),             "Antigua and Barbuda",0,0,0 },
+{ IDX_2C('a','i'),             "Anguilla",0,0,0 },
+{ IDX_2C('a','l'),             "Albanien",0,0,0 },
+{ IDX_2C('a','m'),             "Armenien",0,0,0 },
+{ IDX_2C('a','n'),             "Nederländerna",0,0,0 },
+{ IDX_2C('a','o'),             "Angola",0,0,0 },
+{ IDX_2C('a','q'),             "Antarktis",0,0,0 },
+{ IDX_2C('a','r'),             "Argentina",0,0,0 },
+{ IDX_2C('a','s'),             "Amerikanska Samoa",0,0,0 },
+{ IDX_2C('a','t'),             "Österrike",0,0,0 },
+{ IDX_2C('a','u'),             "Australien",0,0,0 },
+{ IDX_2C('a','w'),             "Aruba",0,0,0 },
+{ IDX_2C('a','x'),             "Aland Islands",0,0,0 },
+{ IDX_2C('a','z'),             "Azerbadjan",0,0,0 },
+{ IDX_2C('b','a'),             "Bosnien Herzegovina",0,0,0 },
+{ IDX_2C('b','b'),             "Barbados",0,0,0 },
+{ IDX_2C('b','d'),             "Bangladesh",0,0,0 },
+{ IDX_2C('b','e'),             "Belgien",0,0,0 },
+{ IDX_2C('b','f'),             "Burkina Faso",0,0,0 },
+{ IDX_2C('b','g'),             "Bulgarien",0,0,0 },
+{ IDX_2C('b','h'),             "Bahrain",0,0,0 },
+{ IDX_2C('b','i'),             "Burundi",0,0,0 },
+{ IDX_2C('b','j'),             "Benin",0,0,0 },
+{ IDX_2C('b','l'),             "Saint Barthelemy",0,0,0 },
+{ IDX_2C('b','m'),             "Bermuda",0,0,0 },
+{ IDX_2C('b','n'),             "Brunei Darussalam",0,0,0 },
+{ IDX_2C('b','o'),             "Bolivia",0,0,0 },
+{ IDX_2C('b','r'),             "Brazilien",0,0,0 },
+{ IDX_2C('b','s'),             "Bahamas",0,0,0 },
+{ IDX_2C('b','t'),             "Bhutan",0,0,0 },
+{ IDX_2C('b','v'),             "Bouvet Island",0,0,0 },
+{ IDX_2C('b','w'),             "Botswana",0,0,0 },
+{ IDX_2C('b','y'),             "Vitryssland",0,0,0 },
+{ IDX_2C('b','z'),             "Belize",0,0,0 },
+{ IDX_2C('c','a'),             "Kanada",0,0,0 },
+{ IDX_2C('c','c'),             "Cocosöarna",0,0,0 },
+{ IDX_2C('c','d'),             "Kongo, Democratic Republic",0,0,0 },
+{ IDX_2C('c','f'),             "Centralafrikanska republiken",0,0,0 },
+{ IDX_2C('c','g'),             "Kongo",0,0,0 },
+{ IDX_2C('c','h'),             "Schweiz",0,0,0 },
+{ IDX_2C('c','i'),             "Elfenbenskusten",0,0,0 },
+{ IDX_2C('c','k'),             "Cook Öarna",0,0,0 },
+{ IDX_2C('c','l'),             "Chile",0,0,0 },
+{ IDX_2C('c','m'),             "Kamerun",0,0,0 },
+{ IDX_2C('c','n'),             "Kina",0,0,0 },
+{ IDX_2C('c','o'),             "Colombia",0,0,0 },
+{ IDX_2C('c','r'),             "Costa Rica",0,0,0 },
+{ IDX_2C('c','u'),             "Kuba",0,0,0 },
+{ IDX_2C('c','v'),             "Cape Verde",0,0,0 },
+{ IDX_2C('c','x'),             "Julön",0,0,0 },
+{ IDX_2C('c','y'),             "Cypern",0,0,0 },
+{ IDX_2C('c','z'),             "Tjeckien",0,0,0 },
+{ IDX_2C('d','e'),             "Tyskland",0,0,0 },
+{ IDX_2C('d','j'),             "Djibouti",0,0,0 },
+{ IDX_2C('d','k'),             "Danmark",0,0,0 },
+{ IDX_2C('d','m'),             "Dominica",0,0,0 },
+{ IDX_2C('d','o'),             "Dominikanska Republiken",0,0,0 },
+{ IDX_2C('d','z'),             "Algeriet",0,0,0 },
+{ IDX_2C('e','c'),             "Ekvador",0,0,0 },
+{ IDX_2C('e','e'),             "Estland",0,0,0 },
+{ IDX_2C('e','g'),             "Egypten",0,0,0 },
+{ IDX_2C('e','h'),             "Västsahara",0,0,0 },
+{ IDX_2C('e','r'),             "Eritrea",0,0,0 },
+{ IDX_2C('e','s'),             "Spanien",0,0,0 },
+{ IDX_2C('e','t'),             "Etiopien",0,0,0 },
+{ IDX_2C('e','u'),             "European Union",0,0,0 },
+{ IDX_2C('f','i'),             "Finland",0,0,0 },
+{ IDX_2C('f','j'),             "Fiji",0,0,0 },
+{ IDX_2C('f','k'),             "Falklandsöarna",0,0,0 },
+{ IDX_2C('f','m'),             "Mikronesien",0,0,0 },
+{ IDX_2C('f','o'),             "Faraoöarna",0,0,0 },
+{ IDX_2C('f','r'),             "Frankrike",0,0,0 },
+{ IDX_2C('g','a'),             "Gabon",0,0,0 },
+{ IDX_2C('g','b'),             "England",0,0,0 },
+{ IDX_2C('g','d'),             "Grenada",0,0,0 },
+{ IDX_2C('g','e'),             "Georgien",0,0,0 },
+{ IDX_2C('g','f'),             "Franska Guiana",0,0,0 },
+{ IDX_2C('g','g'),             "Guernsey",0,0,0 },
+{ IDX_2C('g','h'),             "Ghana",0,0,0 },
+{ IDX_2C('g','i'),             "Gibraltar",0,0,0 },
+{ IDX_2C('g','l'),             "Grönland",0,0,0 },
+{ IDX_2C('g','m'),             "Gambia",0,0,0 },
+{ IDX_2C('g','n'),             "Guinea",0,0,0 },
+{ IDX_2C('g','p'),             "Guadeloupe",0,0,0 },
+{ IDX_2C('g','q'),             "Ekvatorialguinea",0,0,0 },
+{ IDX_2C('g','r'),             "Grekland",0,0,0 },
+{ IDX_2C('g','s'),             "S. Georgia och S. Sandwichöarna",0,0,0 },
+{ IDX_2C('g','t'),             "Guatemala",0,0,0 },
+{ IDX_2C('g','u'),             "Guam",0,0,0 },
+{ IDX_2C('g','w'),             "Guinea-Bissau",0,0,0 },
+{ IDX_2C('g','y'),             "Guyana",0,0,0 },
+{ IDX_2C('h','k'),             "Hong Kong",0,0,0 },
+{ IDX_2C('h','m'),             "Heard- och McDonaldöarna",0,0,0 },
+{ IDX_2C('h','n'),             "Honduras",0,0,0 },
+{ IDX_2C('h','r'),             "Kroatien",0,0,0 },
+{ IDX_2C('h','t'),             "Haiti",0,0,0 },
+{ IDX_2C('h','u'),             "Ungern" ,0,0,0 },
+{ IDX_2C('i','d'),             "Indonesien",0,0,0 },
+{ IDX_2C('i','e'),             "Irland",0,0,0 },
+{ IDX_2C('i','l'),             "Israel",0,0,0 },
+{ IDX_2C('i','m'),             "Isle of Man",0,0,0 },
+{ IDX_2C('i','n'),             "Indien",0,0,0 },
+{ IDX_2C('i','o'),             "Brittiska Indiska Osianien",0,0,0 },
+{ IDX_2C('i','q'),             "Irak",0,0,0 },
+{ IDX_2C('i','r'),             "Iran",0,0,0 },
+{ IDX_2C('i','s'),             "Island",0,0,0 },
+{ IDX_2C('i','t'),             "Italien",0,0,0 },
+{ IDX_2C('j','e'),             "Jersey",0,0,0 },
+{ IDX_2C('j','m'),             "Jamaica",0,0,0 },
+{ IDX_2C('j','o'),             "Jordanien",0,0,0 },
+{ IDX_2C('j','p'),             "Japan",0,0,0 },
+{ IDX_2C('k','e'),             "Kenya",0,0,0 },
+{ IDX_2C('k','g'),             "Kirgistan",0,0,0 },
+{ IDX_2C('k','h'),             "Kambodja",0,0,0 },
+{ IDX_2C('k','i'),             "Kiribati",0,0,0 },
+{ IDX_2C('k','m'),             "Comoros",0,0,0 },
+{ IDX_2C('k','n'),             "Saint Kitts och Nevis",0,0,0 },
+{ IDX_2C('k','p'),             "Nord Korea",0,0,0 },
+{ IDX_2C('k','r'),             "Syd Korea",0,0,0 },
+{ IDX_2C('k','w'),             "Kuwait",0,0,0 },
+{ IDX_2C('k','y'),             "Caymanöarna",0,0,0 },
+{ IDX_2C('k','z'),             "Kazachstan",0,0,0 },
+{ IDX_2C('l','a'),             "Laos",0,0,0 },
+{ IDX_2C('l','b'),             "Libanon",0,0,0 },
+{ IDX_2C('l','c'),             "Saint Lucia",0,0,0 },
+{ IDX_2C('l','i'),             "Liechtenstein",0,0,0 },
+{ IDX_2C('l','k'),             "Sri Lanka",0,0,0 },
+{ IDX_2C('l','r'),             "Liberia",0,0,0 },
+{ IDX_2C('l','s'),             "Lesotho",0,0,0 },
+{ IDX_2C('l','t'),             "Litauen",0,0,0 },
+{ IDX_2C('l','u'),             "Luxembourg",0,0,0 },
+{ IDX_2C('l','v'),             "Lettland",0,0,0 },
+{ IDX_2C('l','y'),             "Libyen",0,0,0 },
+{ IDX_2C('m','a'),             "Marocco",0,0,0 },
+{ IDX_2C('m','c'),             "Monaco",0,0,0 },
+{ IDX_2C('m','d'),             "Moldavien",0,0,0 },
+{ IDX_2C('m','e'),             "Montenegro",0,0,0 },
+{ IDX_2C('m','f'),             "Saint Martin (Franska delen)",0,0,0 },
+{ IDX_2C('m','g'),             "Malagasy",0,0,0 },
+{ IDX_2C('m','h'),             "Marshallöarna",0,0,0 },
+{ IDX_2C('m','k'),             "Makedonien",0,0,0 },
+{ IDX_2C('m','l'),             "Mali",0,0,0 },
+{ IDX_2C('m','m'),             "Myanmar",0,0,0 },
+{ IDX_2C('m','n'),             "Mongoliet",0,0,0 },
+{ IDX_2C('m','o'),             "Macau",0,0,0 },
+{ IDX_2C('m','p'),             "Norra Marianaöarna",0,0,0 },
+{ IDX_2C('m','q'),             "Martinique",0,0,0 },
+{ IDX_2C('m','r'),             "Mauritania",0,0,0 },
+{ IDX_2C('m','s'),             "Montserrat",0,0,0 },
+{ IDX_2C('m','t'),             "Malta",0,0,0 },
+{ IDX_2C('m','u'),             "Mauritius",0,0,0 },
+{ IDX_2C('m','v'),             "Maldiverna",0,0,0 },
+{ IDX_2C('m','w'),             "Malawi",0,0,0 },
+{ IDX_2C('m','x'),             "Mexico",0,0,0 },
+{ IDX_2C('m','y'),             "Malaysia",0,0,0 },
+{ IDX_2C('m','z'),             "Mozambique",0,0,0 },
+{ IDX_2C('n','a'),             "Namibia",0,0,0 },
+{ IDX_2C('n','c'),             "Nya Caledonien",0,0,0 },
+{ IDX_2C('n','e'),             "Niger",0,0,0 },
+{ IDX_2C('n','f'),             "Norfolk Island",0,0,0 },
+{ IDX_2C('n','g'),             "Nigeria",0,0,0 },
+{ IDX_2C('n','i'),             "Nicaragua",0,0,0 },
+{ IDX_2C('n','l'),             "Nederländerna",0,0,0 },
+{ IDX_2C('n','o'),             "Norge",0,0,0 },
+{ IDX_2C('n','p'),             "Nepal",0,0,0 },
+{ IDX_2C('n','r'),             "Nauru",0,0,0 },
+{ IDX_2C('n','u'),             "Niue",0,0,0 },
+{ IDX_2C('n','z'),             "Nya Zeland",0,0,0 },
+{ IDX_2C('o','m'),             "Oman",0,0,0 },
+{ IDX_2C('p','a'),             "Panama",0,0,0 },
+{ IDX_2C('p','e'),             "Peru",0,0,0 },
+{ IDX_2C('p','f'),             "Franska Polynesien",0,0,0 },
+{ IDX_2C('p','g'),             "Papua Nya Guinea",0,0,0 },
+{ IDX_2C('p','h'),             "Filippinerna",0,0,0 },
+{ IDX_2C('p','k'),             "Pakistan",0,0,0 },
+{ IDX_2C('p','l'),             "Polen",0,0,0 },
+{ IDX_2C('p','m'),             "St. Pierre och Miquelon",0,0,0 },
+{ IDX_2C('p','n'),             "Pitcairn",0,0,0 },
+{ IDX_2C('p','r'),             "Puerto Rico",0,0,0 },
+{ IDX_2C('p','s'),             "Palestinian Territory, Occupied",0,0,0 },
+{ IDX_2C('p','t'),             "Portugal",0,0,0 },
+{ IDX_2C('p','w'),             "Palau",0,0,0 },
+{ IDX_2C('p','y'),             "Paraguay",0,0,0 },
+{ IDX_2C('q','a'),             "Qatar",0,0,0 },
+{ IDX_2C('r','e'),             "Reunion",0,0,0 },
+{ IDX_2C('r','o'),             "Rumänien",0,0,0 },
+{ IDX_2C('r','s'),             "Serbien",0,0,0 },
+{ IDX_2C('r','u'),             "Ryssland",0,0,0 },
+{ IDX_2C('r','w'),             "Rwanda",0,0,0 },
+{ IDX_2C('s','a'),             "Saudiarabien",0,0,0 },
+{ IDX_2C('s','b'),             "Solomonöarna",0,0,0 },
+{ IDX_2C('s','c'),             "Seychellerna",0,0,0 },
+{ IDX_2C('s','d'),             "Sudan",0,0,0 },
+{ IDX_2C('s','e'),             "Sverige",0,0,0 },
+{ IDX_2C('s','g'),             "Singapor",0,0,0 },
+{ IDX_2C('s','h'),             "St. Helena",0,0,0 },
+{ IDX_2C('s','i'),             "Slovenien",0,0,0 },
+{ IDX_2C('s','j'),             "Svalbard och Jan Mayen-öarna",0,0,0 },
+{ IDX_2C('s','k'),             "Slovakien",0,0,0 },
+{ IDX_2C('s','l'),             "Sierra Leone",0,0,0 },
+{ IDX_2C('s','m'),             "San Marino",0,0,0 },
+{ IDX_2C('s','n'),             "Senegal",0,0,0 },
+{ IDX_2C('s','o'),             "Somalia",0,0,0 },
+{ IDX_2C('s','r'),             "Surinam",0,0,0 },
+{ IDX_2C('s','t'),             "Sao Tome och Principe",0,0,0 },
+{ IDX_2C('s','u'),             "Sovjet",0,0,0 },
+{ IDX_2C('s','v'),             "El Salvador",0,0,0 },
+{ IDX_2C('s','y'),             "Syrien",0,0,0 },
+{ IDX_2C('s','z'),             "Swaziland",0,0,0 },
+{ IDX_2C('t','c'),             "Turks och Caicosöarna",0,0,0 },
+{ IDX_2C('t','d'),             "Chad",0,0,0 },
+{ IDX_2C('t','f'),             "Södra Franska territorierna",0,0,0 },
+{ IDX_2C('t','g'),             "Togo",0,0,0 },
+{ IDX_2C('t','h'),             "Thailand",0,0,0 },
+{ IDX_2C('t','j'),             "Tajikistan",0,0,0 },
+{ IDX_2C('t','k'),             "Tokelau",0,0,0 },
+{ IDX_2C('t','l'),             "Timor-Leste",0,0,0 },
+{ IDX_2C('t','m'),             "Turkmenistan",0,0,0 },
+{ IDX_2C('t','n'),             "Tunisien",0,0,0 },
+{ IDX_2C('t','o'),             "Tonga",0,0,0 },
+{ IDX_2C('t','p'),             "Östtimor",0,0,0 },
+{ IDX_2C('t','r'),             "Turkiet",0,0,0 },
+{ IDX_2C('t','t'),             "Trinidad och Tobago",0,0,0 },
+{ IDX_2C('t','v'),             "Tuvalu",0,0,0 },
+{ IDX_2C('t','w'),             "Taiwan",0,0,0 },
+{ IDX_2C('t','z'),             "Tanzania",0,0,0 },
+{ IDX_2C('u','a'),             "Ukraina",0,0,0 },
+{ IDX_2C('u','g'),             "Uganda",0,0,0 },
+{ IDX_2C('u','k'),             "Storbritanien",0,0,0 },
+{ IDX_2C('u','m'),             "US Minor Outlying Islands",0,0,0 },
+{ IDX_2C('u','s'),             "USA",0,0,0 },
+{ IDX_2C('u','y'),             "Uruguay",0,0,0 },
+{ IDX_2C('u','z'),             "Uzbekistan",0,0,0 },
+{ IDX_2C('v','a'),             "Vatikanstaten",0,0,0 },
+{ IDX_2C('v','c'),             "Saint Vincent och Grenadinerna",0,0,0 },
+{ IDX_2C('v','e'),             "Venezuela",0,0,0 },
+{ IDX_2C('v','g'),             "Jungfru-öarna (Brittiska)",0,0,0 },
+{ IDX_2C('v','i'),             "Jungfru-öarna (Amerikanska)",0,0,0 },
+{ IDX_2C('v','n'),             "Vietnam",0,0,0 },
+{ IDX_2C('v','u'),             "Vanuatu",0,0,0 },
+{ IDX_2C('w','f'),             "Wallis och Futunaöarna",0,0,0 },
+{ IDX_2C('w','s'),             "Samoa",0,0,0 },
+{ IDX_2C('y','e'),             "Yemen",0,0,0 },
+{ IDX_2C('y','t'),             "Mayotte",0,0,0 },
+{ IDX_2C('y','u'),             "Jugoslavien",0,0,0 },
+{ IDX_2C('z','a'),             "Sydafrika",0,0,0 },
+{ IDX_2C('z','m'),             "Zambia",0,0,0 },
+{ IDX_2C('z','w'),             "Zimbabwe",0,0,0 },
+{ IDX_2C('a','1'),             "Anonymous Proxy",0,0,0 },
+{ IDX_2C('a','2'),             "Satellite Provider",0,0,0 },
+{ IDX_2C('o','1'),             "Other",0,0,0 },
+{ IDX_2C('a','p'),             "Asia/Pacific Region",0,0,0 },
+{ IDX_3C('l','a','n'),         "Local Network (lan)",0,0,0 },
+{ 0,                           NULL,0,0,0 }
+};
diff --git a/lang/webalizer_lang.thai b/lang/webalizer_lang.thai
new file mode 100644 (file)
index 0000000..9d16695
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+   webalizer_lang.thai
+
+   Webalizer V2.0x Language Support file for Thai.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   06-Jun-2002 Thai translation by Mr.Piriya Jannoppakarn (piriya@pantip.com)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Thai";
+char *langcode  = "th";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "ÃÐàºÕ¹";
+char *msg_addresses="áÍ´à´ÃÊ";
+char *msg_ignored = "¡àÇé¹";
+char *msg_bad     = "àÊÕÂ";
+char *msg_in      = "ã¹";
+char *msg_seconds = "ÇÔ¹Ò·Õ";
+
+/* progress and setup error messages */
+char *msg_log_err = "¢éͼԴ¾ÅÒ´: äÁèÊÒÁÒöà»Ô´ä¿Åìä´é";
+char *msg_log_use = "ãªéä¿Åì";
+char *msg_dir_err = "¢éͼԴ¾ÅÒ´: äÁèÊÒÁÒöà»ÅÕè¹ä´àä·ÍÃÕä´é";
+char *msg_dir_use = "ÊÃéÒ§¼ÅÅѾ¸ìã¹";
+char *msg_cur_dir = "ä´àä·ÍÃջѨ¨ØºÑ¹";
+char *msg_hostname= "ÃÒ§ҹÊÓËÃѺâÎÊ";
+char *msg_ign_hist= "äÁèãªè¢éÍÁÙÅ¡è͹˹éÒ...";
+char *msg_no_hist = "äÁ辺¢éÍÁÙÅ¡è͹˹éÒ...";
+char *msg_get_hist= "¡ÓÅѧÍèÒ¹¢éÍÁÙÅ¡è͹˹éÒ...";
+char *msg_put_hist= "¡ÓÅѧºÑ¹·Ö¡¢éÍÁÙÅ¡è͹˹éÒ...";
+char *msg_hist_err= "¢éͼԴ¾ÅÒ´: äÁèÊÒÁÒöºÑ¹·Ö¡¢éÍÁÙÅ¡è͹˹éÒä´é";
+char *msg_bad_hist= "¢éͼԴ¾ÅÒ´: Â¡àÇé¹¢éÍÁÙÅ¡è͹˹éÒ·Õèà¡çºäÁè¶Ù¡µéͧ";
+char *msg_bad_conf= "¢éͼԴ¾ÅÒ´: Unable to open configuration file";
+char *msg_bad_key = "¤Óàµ×͹: ¤ÕÂìàÇÔÃì´äÁè¶Ù¡µéͧ";
+char *msg_bad_date= "¢éͼԴ¾ÅÒ´: ¢éÒÁÃÐàºÕ¹ (Çѹ·ÕèäÁè¶Ù¡µéͧ)";
+char *msg_ign_nscp= "¢éÒÁÃÐàºÕ¹·Õèà¡çº¢éÍÁÙÅÊèǹËÑǢͧ Netscape";
+char *msg_bad_rec = "¢éÒÁÃÐàºÕ¹·ÕèäÁè¶Ù¡µéͧ";
+char *msg_no_vrec = "äÁ辺ÃÐàºÕ¹·Õè¶Ù¡µéͧ!";
+char *msg_gen_rpt = "¡ÓÅѧÊÃéÒ§ÃÒ§ҹÊÓËÃѺ";
+char *msg_gen_sum = "¡ÓÅѧÊÃØ»ÃÒ§ҹÊÓËÃѺ";
+char *msg_get_data= "¡ÓÅѧÍèÒ¹¢éÍÁÙÅ·ÕèàÃÕ¡ãªé¡è͹˹éÒ..";
+char *msg_put_data= "¡ÓÅѧºÑ¹·Ö¡¢éÍÁÙÅ·Õèãªé§Ò¹...";
+char *msg_no_data = "äÁ辺¢éÍÁÙÅ·ÕèàÃÕ¡ãªé¡è͹˹éÒ...";
+char *msg_bad_data= "¢éͼԴ¾ÅÒ´: äÁèÊÒÁÒöàÃÕ¡¤×¹¢éÍÁÙÅ·ÕèàÃÕ¡ãªé¡è͹˹éÒ";
+char *msg_data_err= "¢éͼԴ¾ÅÒ´: äÁèÊÒÁÒöºÑ¹·Ö¡¢éÍÁÙÅ·ÕèàÃÕ¡ãªéÍÂÙèä´é";
+char *msg_dup_data= "¤Óàµ×͹: à¡Ô´¢éÍÁÙÅ«éÓ«é͹";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top Sites ä´é!";
+char *msg_nomem_tr= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top Referrers ä´é!";
+char *msg_nomem_tu= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top URLs ä´é!";
+char *msg_nomem_tc= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top Countries ä´é!";
+char *msg_nomem_ta= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top User Agents ä´é!";
+char *msg_nomem_tsr="˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top Search Strings ä´é!";
+char *msg_nomem_ti= "˹èǤÇÒÁ¨ÓäÁèà¾Õ§¾Í, äÁèÊÒÁÒöÊÃéÒ§ Top Usernames ä´é!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "ÃÒ§ҹªèǧ";
+char *msg_hhdr_gt = "ÊÃéÒ§àÁ×èÍ";
+
+/* main index strings */
+char *msg_main_us = "Usage summary for";
+/* char *msg_main_per= "12 à´×͹·Õè¼èÒ¹ÁÒ"; */
+char *msg_main_per= "ÊÃØ»ÃÒÂà´×͹";
+char *msg_main_sum= "ÊÃØ»ÃÒÂà´×͹";
+char *msg_main_da = "à©ÅÕèµèÍÇѹ";
+char *msg_main_mt = "ÃÇÁ·Ñé§à´×͹";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Daily usage for";
+char *msg_hmth_hu = "Hourly usage for";
+
+/* table header strings */
+char *msg_h_by    = "àÃÕ§µÒÁ";
+char *msg_h_avg   = "à©ÅÕèÂ";
+char *msg_h_max   = "ÊÙ§ÊØ´";
+char *msg_h_total = "ÃÇÁ";
+char *msg_h_totals= "ÃÇÁ·Ñé§ËÁ´";
+char *msg_h_day   = "Çѹ";
+char *msg_h_mth   = "à´×͹";
+char *msg_h_hour  = "ªÑèÇâÁ§";
+char *msg_h_hits  = "Hits";
+char *msg_h_pages = "Pages";
+char *msg_h_visits= "Visits";
+char *msg_h_files = "Files";
+char *msg_h_sites = "Sites";
+char *msg_h_xfer  = "KBytes";
+char *msg_h_hname = "Hostname";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "User Agent";
+char *msg_h_ref   = "Referrer";
+char *msg_h_ctry  = "»ÃÐà·È";
+char *msg_h_search= "Search String";
+char *msg_h_uname = "Username";
+
+/* links along top of page */
+char *msg_hlnk_ds = "ʶԵÔÃÒÂÇѹ";
+char *msg_hlnk_hs = "ʶԵÔÃÒªÑèÇâÁ§";
+char *msg_hlnk_u  = "URL";
+char *msg_hlnk_s  = "Site";
+char *msg_hlnk_a  = "Agent";
+char *msg_hlnk_c  = "»ÃÐà·È";
+char *msg_hlnk_r  = "Referrer";
+char *msg_hlnk_en = "Entry";
+char *msg_hlnk_ex = "Exit";
+char *msg_hlnk_sr = "¤é¹ËÒ";
+char *msg_hlnk_i  = "¼Ùéãªé";
+
+/* monthly total table */
+char *msg_mtot_ms = "ʶԵÔÃÒÂà´×͹ÊÓËÃѺ";
+char *msg_mtot_th = "hit ·Ñé§ËÁ´";
+char *msg_mtot_tf = "ä¿Åì·Ñé§ËÁ´";
+char *msg_mtot_tx = "¡ÔâÅ亵ì·Ñé§ËÁ´";
+char *msg_mtot_us = "unique site ·Ñé§ËÁ´";
+char *msg_mtot_ur = "unique referrer ·Ñé§ËÁ´";
+char *msg_mtot_ua = "unique user agent ·Ñé§ËÁ´";
+char *msg_mtot_uu = "unique URL ·Ñé§ËÁ´";
+char *msg_mtot_ui = "¼Ùéãªé·Ñé§ËÁ´";
+char *msg_mtot_mhd= "hit µèÍÇѹ";
+char *msg_mtot_mhh= "hit µèͪÑèÇâÁ§";
+char *msg_mtot_mfd= "ä¿ÅìµèÍÇѹ";
+char *msg_mtot_mpd= "page µèÍÇѹ";
+char *msg_mtot_msd= "site µèÍÇѹ";
+char *msg_mtot_mvd= "visit µèÍÇѹ";
+char *msg_mtot_mkd= "¡ÔâºäºµìµèÍÇѹ";
+char *msg_mtot_rc = "hit µèÍ response Code";
+
+/* daily total table */
+char *msg_dtot_ds = "ʶԵÔÃÒÂÇѹÊÓËÃѺ";
+
+/* hourly total table */
+char *msg_htot_hs = "ʶԵÔÃÒªÑèÇâÁ§ÊÓËÃѺ";
+
+/* country pie chart */
+char *msg_ctry_use= "Usage by Country for";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "";
+char *msg_top_of  = "Íѹ´Ñºáá¨Ò¡";
+char *msg_top_s   = "Site ·Ñé§ËÁ´";
+char *msg_top_u   = "URL ·Ñé§ËÁ´";
+char *msg_top_r   = "Referrer ·Ñé§ËÁ´";
+char *msg_top_a   = "User Agent ·Ñé§ËÁ´";
+char *msg_top_c   = "»ÃÐà·È·Ñé§ËÁ´";
+char *msg_top_en  = "Entry Page ·Ñé§ËÁ´";
+char *msg_top_ex  = "Exit Page ·Ñé§ËÁ´";
+char *msg_top_sr  = "Search String ·Ñé§ËÁ´";
+char *msg_top_i   = "¼Ùéãªé·Ñé§ËÁ´";
+char *msg_v_sites = "áÊ´§ä«µì (site) ·Ñé§ËÁ´";
+char *msg_v_urls  = "áÊ´§ URL ·Ñé§ËÁ´";
+char *msg_v_refs  = "áÊ´§ Referrer ·Ñé§ËÁ´";
+char *msg_v_agents= "áÊ´§ User Agent ·Ñé§ËÁ´";
+char *msg_v_search= "áÊ´§ Search Strings ·Ñé§ËÁ´";
+char *msg_v_users = "áÊ´§¼Ùéãªé·Ñé§ËÁ´";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Jan", "Feb", "Mar",
+                    "Apr", "May", "Jun",
+                    "Jul", "Aug", "Sep",
+                    "Oct", "Nov", "Dec"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "January",  "February", "March",   "April",
+                    "May",      "June",     "July",    "August",
+                    "September","October",  "November","December"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Undefined response code",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "ʶԵԡÒÃãªé§Ò¹ÊÓËÃѺ";
+char *msg_h_other = "Í×è¹ æ";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Unresolved/Unknown",               0,0,0 },
+{ IDX_3C('c','o','m'),    "Commercial (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "Educational (edu)",                0,0,0 },
+{ IDX_3C('g','o','v'),    "US Government (gov)",              0,0,0 },
+{ IDX_3C('i','n','t'),    "International (int)",              0,0,0 },
+{ IDX_3C('m','i','l'),    "US Military (mil)",                0,0,0 },
+{ IDX_3C('n','e','t'),    "Network (net)",                    0,0,0 },
+{ IDX_3C('o','r','g'),    "Non-Profit (org)",                 0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato field (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andorra",                          0,0,0 },
+{ IDX_2C('a','e'),        "United Arab Emirates",             0,0,0 },
+{ IDX_2C('a','f'),        "Afghanistan",                      0,0,0 },
+{ IDX_2C('a','g'),        "Antigua and Barbuda",              0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albania",                          0,0,0 },
+{ IDX_2C('a','m'),        "Armenia",                          0,0,0 },
+{ IDX_2C('a','n'),        "Netherlands Antilles",             0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antarctica",                       0,0,0 },
+{ IDX_2C('a','r'),        "Argentina",                        0,0,0 },
+{ IDX_2C('a','s'),        "American Samoa",                   0,0,0 },
+{ IDX_2C('a','t'),        "Austria",                          0,0,0 },
+{ IDX_2C('a','u'),        "Australia",                        0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbaijan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosnia and Herzegovina",           0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Bangladesh",                       0,0,0 },
+{ IDX_2C('b','e'),        "Belgium",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaria",                         0,0,0 },
+{ IDX_2C('b','h'),        "Bahrain",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivia",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brazil",                           0,0,0 },
+{ IDX_2C('b','s'),        "Bahamas",                          0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Island",                    0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarus",                          0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Canada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Islands",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Central African Republic",         0,0,0 },
+{ IDX_2C('c','g'),        "Congo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Switzerland",                      0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Coast)",      0,0,0 },
+{ IDX_2C('c','k'),        "Cook Islands",                     0,0,0 },
+{ IDX_2C('c','l'),        "Chile",                            0,0,0 },
+{ IDX_2C('c','m'),        "Cameroon",                         0,0,0 },
+{ IDX_2C('c','n'),        "China",                            0,0,0 },
+{ IDX_2C('c','o'),        "Colombia",                         0,0,0 },
+{ IDX_2C('c','r'),        "Costa Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Cuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Island",                 0,0,0 },
+{ IDX_2C('c','y'),        "Cyprus",                           0,0,0 },
+{ IDX_2C('c','z'),        "Czech Republic",                   0,0,0 },
+{ IDX_2C('d','e'),        "Germany",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibouti",                         0,0,0 },
+{ IDX_2C('d','k'),        "Denmark",                          0,0,0 },
+{ IDX_2C('d','m'),        "Dominica",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominican Republic",               0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ecuador",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonia",                          0,0,0 },
+{ IDX_2C('e','g'),        "Egypt",                            0,0,0 },
+{ IDX_2C('e','h'),        "Western Sahara",                   0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Spain",                            0,0,0 },
+{ IDX_2C('e','t'),        "Ethiopia",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finland",                          0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Falkland Islands (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Islands",                    0,0,0 },
+{ IDX_2C('f','r'),        "France",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Great Britain (UK)",               0,0,0 },
+{ IDX_2C('g','d'),        "Grenada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "French Guiana",                    0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Guinea",                           0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Equatorial Guinea",                0,0,0 },
+{ IDX_2C('g','r'),        "Greece",                           0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Isls.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Islands",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Croatia",                          0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Hungary",                          0,0,0 },
+{ IDX_2C('i','d'),        "Indonesia",                        0,0,0 },
+{ IDX_2C('i','e'),        "Ireland",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israel",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "India",                            0,0,0 },
+{ IDX_2C('i','o'),        "British Indian Ocean Territory",   0,0,0 },
+{ IDX_2C('i','q'),        "Iraq",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Iceland",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italy",                            0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaica",                          0,0,0 },
+{ IDX_2C('j','o'),        "Jordan",                           0,0,0 },
+{ IDX_2C('j','p'),        "Japan",                            0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kyrgyzstan",                       0,0,0 },
+{ IDX_2C('k','h'),        "Cambodia",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Korea, Democratic Republic of",    0,0,0 },
+{ IDX_2C('k','r'),        "Korea, Republic of",               0,0,0 },
+{ IDX_2C('k','w'),        "Kuwait",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhstan",                       0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lebanon",                          0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberia",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Lithuania",                        0,0,0 },
+{ IDX_2C('l','u'),        "Luxembourg",                       0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Morocco",                          0,0,0 },
+{ IDX_2C('m','c'),        "Monaco",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Islands",                 0,0,0 },
+{ IDX_2C('m','k'),        "Macedonia",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolia",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Northern Mariana Islands",         0,0,0 },
+{ IDX_2C('m','q'),        "Martinique",                       0,0,0 },
+{ IDX_2C('m','r'),        "Mauritania",                       0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldives",                         0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Mexico",                           0,0,0 },
+{ IDX_2C('m','y'),        "Malaysia",                         0,0,0 },
+{ IDX_2C('m','z'),        "Mozambique",                       0,0,0 },
+{ IDX_2C('n','a'),        "Namibia",                          0,0,0 },
+{ IDX_2C('n','c'),        "New Caledonia",                    0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Island",                   0,0,0 },
+{ IDX_2C('n','g'),        "Nigeria",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nicaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Netherlands",                      0,0,0 },
+{ IDX_2C('n','o'),        "Norway",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "New Zealand",                      0,0,0 },
+{ IDX_2C('o','m'),        "Oman",                             0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "French Polynesia",                 0,0,0 },
+{ IDX_2C('p','g'),        "Papua New Guinea",                 0,0,0 },
+{ IDX_2C('p','h'),        "Philippines",                      0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Poland",                           0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Puerto Rico",                      0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portugal",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Qatar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romania",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Russian Federation",               0,0,0 },
+{ IDX_2C('r','w'),        "Rwanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Saudi Arabia",                     0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Islands",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Sweden",                           0,0,0 },
+{ IDX_2C('s','g'),        "Singapore",                        0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenia",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard and Jan Mayen Islands",   0,0,0 },
+{ IDX_2C('s','k'),        "Slovakia",                         0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somalia",                          0,0,0 },
+{ IDX_2C('s','r'),        "Suriname",                         0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "Soviet Union",                     0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Syrian Arab Republic",             0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks and Caicos Islands",         0,0,0 },
+{ IDX_2C('t','d'),        "Chad",                             0,0,0 },
+{ IDX_2C('t','f'),        "French Southern Territories",      0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Thailand",                         0,0,0 },
+{ IDX_2C('t','j'),        "Tajikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunisia",                          0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Portuguese Timor",                 0,0,0 },
+{ IDX_2C('t','r'),        "Turkey",                           0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad and Tobago",              0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Taiwan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzania",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukraine",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "United Kingdom",                   0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Islands",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican City State (Holy See)",    0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent and the Grenadines", 0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Islands (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Islands (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Viet Nam",                         0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis and Futuna Islands",        0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavia",                       0,0,0 },
+{ IDX_2C('z','a'),        "South Africa",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabwe",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.turkish b/lang/webalizer_lang.turkish
new file mode 100644 (file)
index 0000000..f6ca47e
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+   webalizer_lang.turkish
+
+   Webalizer V2.0x Language Support file for Turkish.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   20-Aug-2000 Turkish Translation by Evren Yurtesen (yurtesen@ispro.net.tr)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Turkish";
+char *langcode  = "tr";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "kayit";
+char *msg_addresses="addres";
+char *msg_ignored = "islenmedi";
+char *msg_bad     = "kotu";
+char *msg_in      = "";
+char *msg_seconds = "saniyede";
+
+/* progress and setup error messages */
+char *msg_log_err = "Hata: Kutuk dosyasi acilamadi";
+char *msg_log_use = "Kullanilan kutukdosyasi";
+char *msg_dir_err = "Hata: Degistirilemeyen dizin";
+char *msg_dir_use = "Ciktinin yaratildigi yer";
+char *msg_cur_dir = "su anki dizin";
+char *msg_hostname= "Raporlar icin makine adi";
+char *msg_ign_hist= "Bir onceki history dosyasi islenmiyor...";
+char *msg_no_hist = "History dosyasi bulunamadi...";
+char *msg_get_hist= "History dosyasi okunuyor...";
+char *msg_put_hist= "History bilgileri kaydediliyor...";
+char *msg_hist_err= "Hata: History dosyasi yazilamiyor";
+char *msg_bad_hist= "Hata: Gecersiz history kaydi islenmiyor";
+char *msg_bad_conf= "Hata: Konfigurasyon dosyasi acilamiyor";
+char *msg_bad_key = "Dikkat: Gecersiz anahtar kelime";
+char *msg_bad_date= "Hata: Kayit islenmeden geciliyor (kotu tarih)";
+char *msg_ign_nscp= "Netscape baslik kaydi islenmeden geciliyor";
+char *msg_bad_rec = "Kotu kayit islenmeden geciliyor";
+char *msg_no_vrec = "Hicbir gecerli kayit bulunamadi!";
+char *msg_gen_rpt = "Raporu yaratilan site";
+char *msg_gen_sum = "Ozet raporu yaratiliyor";
+char *msg_get_data= "Bir onceki calismanin bilgileri okunuyor...";
+char *msg_put_data= "Su anki calisma bilgileri kaydediliyor...";
+char *msg_no_data = "Bir onceki calismanin bilgileri bulunamadi...";
+char *msg_bad_data= "Hata: Calisma bilgileri tekrar kullanilamiyor";
+char *msg_data_err= "Hata: Su anki calisma bilgileri kaydedilemiyor";
+char *msg_dup_data= "Dikkat: Buyuk ihtimalle cift islenmis bilgi bulundu";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "Onbellek dosyasi belirtilmedi, islem iptal ediliyor...";
+char *msg_dns_nodb= "Hata: DNS onbellekleme dosyasi acilamadi";
+char *msg_dns_nolk= "Hata: DNS onbellekleme dosyasi kilitlenemedi";
+char *msg_dns_usec= "Kullanilan DNS onbellekleme dosyasi";
+char *msg_dns_rslv= "DNS bakimi";
+char *msg_dns_none= "Islem yapilmasi gereken kayit yok";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Yeterli hafiza yok, Top Istemciler kapatildi!";
+char *msg_nomem_tr= "Yeterli hafiza yok, Top Referanslar kapatildi!";
+char *msg_nomem_tu= "Yeterli hafiza yok, Top URL'ler kapatildi!";
+char *msg_nomem_tc= "Yeterli hafiza yok, Top Ulkeler kapatildi!";
+char *msg_nomem_ta= "Yeterli hafiza yok, Top Kullanici Ajanlari kapatildi!";
+char *msg_nomem_tsr="Yeterli hafiza yok, Top Arama Girdileri kapatildi!";
+char *msg_nomem_ti= "Yeterli hafiza yok, Top Kullanici Adlari kapatildi!";
+char *msg_nomem_dh= "Hata makine nodu ekleniyor (gunluk), islenmeden geciliyor";
+char *msg_nomem_mh= "Hata makine nodu ekleniyor (aylik), islenmeden geciliyor";
+char *msg_nomem_u = "Hata URL nodu ekleniyor, islenmeden geciliyor";
+char *msg_nomem_a = "Hata Kullanici Ajani ekleniyor, islenmeden geciliyor";
+char *msg_nomem_r = "Hata Referans nodu ekleniyor, islenmeden geciliyor";
+char *msg_nomem_sc= "Hata Arama Girdileri nodu ekleniyor, islenmeden geciliyor";
+char *msg_nomem_i = "Hata Kullanici Adi nodu ekleniyor, islenmeden geciliyor";
+
+/* log record errors */
+char *msg_big_rec = "Hata: Normalden buyuk kutuk kaydi islenmeden geciliyor";
+char *msg_big_host= "Dikkat: Normalden buyuk makine ismi kucultuluyor";
+char *msg_big_date= "Dikkat: Normalden buyuk tarih bolumu kucultuluyor";
+char *msg_big_req = "Dikkat: Normalden buyuk istek bolumu kucultuluyor";
+char *msg_big_ref = "Dikkat: Normalden buyuk referans bolumu kucultuluyor";
+char *msg_big_user= "Dikkat: Normalden buyuk kullanici adi bolumu kucultuluyor";
+char *msg_big_one = "Dikkat: Girdi saklama boyutunu asiyor";
+
+/* misc errors */
+char *msg_no_open = "Hata: Dosya acilamadi";
+
+/* Help display... */
+char *h_usage1 = "Kullanim";
+char *h_usage2 = "[opsiyonlar] [kutuk dosyasi]";
+char *h_msg[]= {
+         "-h        = bu yardim mesajini yazdir"                         ,
+         "-V        = surum bilgilerini yazdir"                          ,
+         "-v        = be verbose"                                        ,
+         "-d        = ek debug bilgileri yazir"                          ,
+         "-F tip    = kutuk tipi. 'tip'= (clf | ftp | squid | w3c)"      ,
+         "-f        = Siralama hatalarini duzelt"                        ,
+         "-i        = history dosyasina bakma"                           ,
+         "-p        = durumu koru (eklemeli)"                            ,
+         "-b        = ignore state (incremental)"                        ,
+         "-q        = bilgi mesajlarini iptal et"                        ,
+         "-Q        = _BUTUN_ mesajlari iptal et"                        ,
+         "-Y        = ulke grafigini iptal et"                           ,
+         "-G        = saate gore grafigini iptal et"                     ,
+         "-H        = saate gore istatistikleri iptal et"                ,
+         "-L        = renk kodlu grafik aciklamalarini iptal et"         ,
+         "-l sayi   = grafiklerde 'sayi' kadar cizgi kullan"             ,
+         "-m sayi   = ziyaret bitim zamani 'sayi'= (seconds)"            ,
+         "-T        = islem suresi bilgisini yazdir"                     ,
+         "-c dosya  = belirtilen konfigurasyon dosyasini kullan 'dosya'" ,
+         "-n ad     = kullanilacak makine adi 'ad'"                      ,
+         "-o dizin  = kullanilacak cikti dizini 'dizin'"                 ,
+         "-t ad     = rapor basligi 'ad'"                                ,
+         "-a ad     = kullanici ajanini sakla 'ad'"                      ,
+         "-r ad     = referansi sakla 'ad'"                              ,
+         "-s ad     = siteyi sakla 'ad'"                                 ,
+         "-u ad     = URL'yi sakla 'ad'"                                 ,
+         "-x ad     = Dosya uzantisini kullan 'ad'"                      ,
+         "-O ad     = Omit page 'ad'"                                    ,
+         "-P ad     = Sayfa uzantisi 'ad'"                               ,
+         "-I ad     = Indeks ismi 'ad'"                                  ,
+         "-K sayi   = sayi months in summary table"                      ,
+         "-k sayi   = sayi months in summary graph"                      ,
+         "-A sayi   = sayi kadar top ajan goster"                        ,
+         "-C sayi   = sayi kadar top ulke goster"                        ,
+         "-R sayi   = sayi kadar top referans goster"                    ,
+         "-S sayi   = sayi kadar top istemci goster"                     ,
+         "-U sayi   = sayi kadar top URL goster"                         ,
+         "-e sayi   = sayi kadar top giris sayfasi goster"               ,
+         "-E sayi   = sayi kadar top cikis sayfasi goster"               ,
+         "-g sayi   = alan adlarini 'sayi' kadar seviyede grupla"        ,
+         "-X        = tek siteleri gizle"                                ,
+         "-z dir    = Use country flags in 'dir'"                        ,
+#ifdef USE_DNS
+         "-D ad     = 'ad' isimli DNS onbellek dosyasini kullan"         ,
+         "-N sayi   = DNS islemcilerinin sayisi (0=iptal)"               ,
+         "-j        = Enable native GeoDB lookups"                       ,
+         "-J ad     = Use GeoDB database 'ad'"                           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W ad     = Use GeoIP database 'ad'"             ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Ozet Periyodu";
+char *msg_hhdr_gt = "Yaratilma Tarihi";
+
+/* main index strings */
+char *msg_main_us = "Kullanim Ozeti";
+/* char *msg_main_per= "Son 12 Ay"; */
+char *msg_main_per= "Ay'a Gore Ozet";
+char *msg_main_sum= "Ay'a Gore Ozet";
+char *msg_main_da = "Gunluk Averaj";
+char *msg_main_mt = "Aylik Toplamlar";
+
+/* month HTML page strings */
+char *msg_hmth_du = "Gunluk Kullanim:";
+char *msg_hmth_hu = "Saatlik Kullanim:";
+
+/* table header strings */
+char *msg_h_by    = "";
+char *msg_h_avg   = "Averaj";
+char *msg_h_max   = "Maksimum";
+char *msg_h_total = "Toplam";
+char *msg_h_totals= "Toplamlar";
+char *msg_h_day   = "Gun";
+char *msg_h_mth   = "Ay";
+char *msg_h_hour  = "Saat";
+char *msg_h_hits  = "HIT'ler";
+char *msg_h_pages = "Sayfa";
+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_hname = "Makine Adi";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "Kullanici Ajani";
+char *msg_h_ref   = "Referans";
+char *msg_h_ctry  = "Ulke";
+char *msg_h_search= "Arama Girdisi";
+char *msg_h_uname = "Kullanici";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Gunluk Istatistikler";
+char *msg_hlnk_hs = "Saatlik Istatistikler";
+char *msg_hlnk_u  = "URL'ler";
+char *msg_hlnk_s  = "Istemciler";
+char *msg_hlnk_a  = "Ajanlar";
+char *msg_hlnk_c  = "Ulkeler";
+char *msg_hlnk_r  = "Referanslar";
+char *msg_hlnk_en = "Giris";
+char *msg_hlnk_ex = "Cikis";
+char *msg_hlnk_sr = "Arama";
+char *msg_hlnk_i  = "Kullanicilar";
+
+/* monthly total table */
+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_us = "Toplam Ayni Istemciler";
+char *msg_mtot_ur = "Toplam Ayni Referanslar";
+char *msg_mtot_ua = "Toplam Ayni Kullanici Ajanlari";
+char *msg_mtot_uu = "Toplam Ayni URL'ler";
+char *msg_mtot_ui = "Toplam Ayni Kullanici Adlari";
+char *msg_mtot_mhd= "Gunluk HIT";
+char *msg_mtot_mhh= "Saatlik HIT";
+char *msg_mtot_mfd= "Gunluk Dosyalar";
+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_rc = "Cevap Koduna Gore HIT";
+
+/* daily total table */
+char *msg_dtot_ds = "Gunluk Istatistikler:";
+
+/* hourly total table */
+char *msg_htot_hs = "Saatlik Istatistikler:";
+
+/* country pie chart */
+char *msg_ctry_use= "Ulkeye Gore Kullanim:";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "Top";
+char *msg_top_of  = "/";
+char *msg_top_s   = "Toplam Istemciler";
+char *msg_top_u   = "Toplam URL'ler";
+char *msg_top_r   = "Toplam Referanslar";
+char *msg_top_a   = "Toplam Kullanici Ajanlari";
+char *msg_top_c   = "Toplam Ulkeler";
+char *msg_top_en  = "Toplam Giris Sayfalari";
+char *msg_top_ex  = "Toplam Cikis Sayfalari";
+char *msg_top_sr  = "Toplam Arama Girdileri";
+char *msg_top_i   = "Toplam Kullanici Adlari";
+char *msg_v_sites = "Butun Istemcileri Goster";
+char *msg_v_urls  = "Butun URL'leri Goster";
+char *msg_v_refs  = "Butun Referanslar Goster";
+char *msg_v_agents= "Butun Kullanici Ajanlarini Goster";
+char *msg_v_search= "Butun Arama Girdilerini Goster";
+char *msg_v_users = "Butun Kullanici Adlarini Goster";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "Oca", "Sub", "Mar",
+                    "Nis", "May", "Haz",
+                    "Tem", "Agu", "Eyl",
+                    "Eki", "Kas", "Ara"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "Ocak",  "Subat",  "Mart",  "Nisan",
+                    "Mayis",  "Haziran",  "Temmuz",  "Agustos",
+                    "Eylul", "Ekim",  "Kasim", "Aralik"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "Tanimlanmamis cevap kodu",               0 },
+         { "Kod 100 - Devam",                        0 },
+         { "Kod 101 - Protokol Degistirme",          0 },
+         { "Kod 200 - TAMAM",                        0 },
+         { "Kod 201 - Yaratildi",                    0 },
+         { "Kod 202 - Kabul Edildi",                 0 },
+         { "Kod 203 - Otantikasyonu Olmayan Bilgi",  0 },
+         { "Kod 204 - Icerik Yok",                   0 },
+         { "Kod 205 - Icerigi Sifirla",              0 },
+         { "Kod 206 - Bolumsel Icerik",              0 },
+         { "Kod 300 - Bircok Secim",                 0 },
+         { "Kod 301 - Tamamen Tasindi",              0 },
+         { "Kod 302 - Bulundu",                      0 },
+         { "Kod 303 - Digerine Bakiniz",             0 },
+         { "Kod 304 - Degismedi",                    0 },
+         { "Kod 305 - Proxy Kullaniniz",             0 },
+         { "Kod 307 - Gecici Olarak Tasindi",        0 },
+         { "Kod 400 - Kotu Istek",                   0 },
+         { "Kod 401 - Yetkisiz",                     0 },
+         { "Kod 402 - Odeme Gerekli",                0 },
+         { "Kod 403 - Yasak",                        0 },
+         { "Kod 404 - Bulunamadi",                   0 },
+         { "Kod 405 - Metoda Izin Verilmedi",        0 },
+         { "Kod 406 - Kabul Edilemez",               0 },
+         { "Kod 407 - Proxy Otantikasyonu Gerekli",  0 },
+         { "Kod 408 - Istek Zaman Asimi",            0 },
+         { "Kod 409 - Cakisma",                      0 },
+         { "Kod 410 - Gitti",                        0 },
+         { "Kod 411 - Uzunluk Gerekli",              0 },
+         { "Kod 412 - On Kosul Basarisiz",           0 },
+         { "Kod 413 - Istek Varligi Cok Buyuk",      0 },
+         { "Kod 414 - Istek-URI'si Cok Uzun",        0 },
+         { "Kod 415 - Desteklenmeyen Orta Tipi",     0 },
+         { "Kod 416 - Istenen Uzaklik Karsilanamaz", 0 },
+         { "Kod 417 - Beklenti Basarisiz",           0 },
+         { "Kod 500 - Ic Sunucu Hatasi",             0 },
+         { "Kod 501 - Tamamlanmadi",                 0 },
+         { "Kod 502 - Kotu Gecit",                   0 },
+         { "Kod 503 - Servis Kapali",                0 },
+         { "Kod 504 - Gecit Zaman Asimi",            0 },
+         { "Kod 505 - HTTP Surumu Desteklenmiyor",   0 } };
+
+char *msg_title   = "Kullanim Istatistikleri:";
+char *msg_h_other = "Diger";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "Cozumlenemeyen/Bilinemeyen",       0,0,0 },
+{ IDX_3C('c','o','m'),    "Ticari (com)",                     0,0,0 },
+{ IDX_3C('e','d','u'),    "Egitimsel (edu)",                  0,0,0 },
+{ IDX_3C('g','o','v'),    "US Devlet (gov)",                  0,0,0 },
+{ IDX_3C('i','n','t'),    "Uluslarasi (int)",                 0,0,0 },
+{ IDX_3C('m','i','l'),    "US Askeri (mil)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "Ag (net)",                         0,0,0 },
+{ IDX_3C('o','r','g'),    "Organizasyon (org)",               0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Eski stil Arpanet (arpa)",         0,0,0 },
+{ IDX_4C('n','a','t','o'),"Nato alani (nato)",                0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "Andora",                           0,0,0 },
+{ IDX_2C('a','e'),        "Birlesmis Arab Emirlikleri",       0,0,0 },
+{ IDX_2C('a','f'),        "Afganistan",                       0,0,0 },
+{ IDX_2C('a','g'),        "Antigua ve Barbuda",               0,0,0 },
+{ IDX_2C('a','i'),        "Anguilla",                         0,0,0 },
+{ IDX_2C('a','l'),        "Albanya",                          0,0,0 },
+{ IDX_2C('a','m'),        "Ermenistan",                       0,0,0 },
+{ IDX_2C('a','n'),        "Hollanda Antil Adalari",           0,0,0 },
+{ IDX_2C('a','o'),        "Angola",                           0,0,0 },
+{ IDX_2C('a','q'),        "Antartik",                         0,0,0 },
+{ IDX_2C('a','r'),        "Arjantin",                         0,0,0 },
+{ IDX_2C('a','s'),        "Amerikan Samoa Adalari",           0,0,0 },
+{ IDX_2C('a','t'),        "Avusturya",                        0,0,0 },
+{ IDX_2C('a','u'),        "Avusturalya",                      0,0,0 },
+{ IDX_2C('a','w'),        "Aruba",                            0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "Azerbeycan",                       0,0,0 },
+{ IDX_2C('b','a'),        "Bosna ve Herzegova",               0,0,0 },
+{ IDX_2C('b','b'),        "Barbados",                         0,0,0 },
+{ IDX_2C('b','d'),        "Banglades",                        0,0,0 },
+{ IDX_2C('b','e'),        "Belcika",                          0,0,0 },
+{ IDX_2C('b','f'),        "Burkina Faso",                     0,0,0 },
+{ IDX_2C('b','g'),        "Bulgaristan",                      0,0,0 },
+{ IDX_2C('b','h'),        "Bahreyn",                          0,0,0 },
+{ IDX_2C('b','i'),        "Burundi",                          0,0,0 },
+{ IDX_2C('b','j'),        "Benin",                            0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "Bermuda",                          0,0,0 },
+{ IDX_2C('b','n'),        "Brunei Darussalam",                0,0,0 },
+{ IDX_2C('b','o'),        "Bolivya",                          0,0,0 },
+{ IDX_2C('b','r'),        "Brezilya",                         0,0,0 },
+{ IDX_2C('b','s'),        "Bahamalar",                        0,0,0 },
+{ IDX_2C('b','t'),        "Bhutan",                           0,0,0 },
+{ IDX_2C('b','v'),        "Bouvet Adasi",                     0,0,0 },
+{ IDX_2C('b','w'),        "Botswana",                         0,0,0 },
+{ IDX_2C('b','y'),        "Belarusya",                        0,0,0 },
+{ IDX_2C('b','z'),        "Belize",                           0,0,0 },
+{ IDX_2C('c','a'),        "Kanada",                           0,0,0 },
+{ IDX_2C('c','c'),        "Cocos (Keeling) Adalari",          0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "Orta Afrika Cumhuriyeti",          0,0,0 },
+{ IDX_2C('c','g'),        "Kongo",                            0,0,0 },
+{ IDX_2C('c','h'),        "Isvicre",                          0,0,0 },
+{ IDX_2C('c','i'),        "Cote D'Ivoire (Ivory Sahili)",     0,0,0 },
+{ IDX_2C('c','k'),        "Cook Adalari",                     0,0,0 },
+{ IDX_2C('c','l'),        "Sile",                             0,0,0 },
+{ IDX_2C('c','m'),        "Kamerun",                          0,0,0 },
+{ IDX_2C('c','n'),        "Cin",                              0,0,0 },
+{ IDX_2C('c','o'),        "Kolombiya",                        0,0,0 },
+{ IDX_2C('c','r'),        "Kosta Rica",                       0,0,0 },
+{ IDX_2C('c','u'),        "Kuba",                             0,0,0 },
+{ IDX_2C('c','v'),        "Cape Verde",                       0,0,0 },
+{ IDX_2C('c','x'),        "Christmas Adalari",                0,0,0 },
+{ IDX_2C('c','y'),        "Kibris",                           0,0,0 },
+{ IDX_2C('c','z'),        "Cek Cumhuriyeti",                  0,0,0 },
+{ IDX_2C('d','e'),        "Almanya",                          0,0,0 },
+{ IDX_2C('d','j'),        "Djibuti",                          0,0,0 },
+{ IDX_2C('d','k'),        "Danimarka",                        0,0,0 },
+{ IDX_2C('d','m'),        "Dominika",                         0,0,0 },
+{ IDX_2C('d','o'),        "Dominik Cumhuriyeti",              0,0,0 },
+{ IDX_2C('d','z'),        "Algeria",                          0,0,0 },
+{ IDX_2C('e','c'),        "Ekvator",                          0,0,0 },
+{ IDX_2C('e','e'),        "Estonya",                          0,0,0 },
+{ IDX_2C('e','g'),        "Misir",                            0,0,0 },
+{ IDX_2C('e','h'),        "Bati Sahara",                      0,0,0 },
+{ IDX_2C('e','r'),        "Eritrea",                          0,0,0 },
+{ IDX_2C('e','s'),        "Ispanya",                          0,0,0 },
+{ IDX_2C('e','t'),        "Etiyopya",                         0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "Finlandiya",                       0,0,0 },
+{ IDX_2C('f','j'),        "Fiji",                             0,0,0 },
+{ IDX_2C('f','k'),        "Folkland Adalari (Malvinas)",      0,0,0 },
+{ IDX_2C('f','m'),        "Micronesia",                       0,0,0 },
+{ IDX_2C('f','o'),        "Faroe Adalari",                    0,0,0 },
+{ IDX_2C('f','r'),        "Fransa",                           0,0,0 },
+{ IDX_2C('g','a'),        "Gabon",                            0,0,0 },
+{ IDX_2C('g','b'),        "Buyuk Biritanya (UK)",             0,0,0 },
+{ IDX_2C('g','d'),        "Granada",                          0,0,0 },
+{ IDX_2C('g','e'),        "Georgia",                          0,0,0 },
+{ IDX_2C('g','f'),        "Fransiz Guyanasi",                 0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "Ghana",                            0,0,0 },
+{ IDX_2C('g','i'),        "Gibraltar",                        0,0,0 },
+{ IDX_2C('g','l'),        "Greenland",                        0,0,0 },
+{ IDX_2C('g','m'),        "Gambia",                           0,0,0 },
+{ IDX_2C('g','n'),        "Gine",                             0,0,0 },
+{ IDX_2C('g','p'),        "Guadeloupe",                       0,0,0 },
+{ IDX_2C('g','q'),        "Ekvator Ginesi",                   0,0,0 },
+{ IDX_2C('g','r'),        "Yunanistan",                       0,0,0 },
+{ IDX_2C('g','s'),        "S. Georgia and S. Sandwich Adalari.", 0,0,0 },
+{ IDX_2C('g','t'),        "Guatemala",                        0,0,0 },
+{ IDX_2C('g','u'),        "Guam",                             0,0,0 },
+{ IDX_2C('g','w'),        "Guinea-Bissau",                    0,0,0 },
+{ IDX_2C('g','y'),        "Guyana",                           0,0,0 },
+{ IDX_2C('h','k'),        "Hong Kong",                        0,0,0 },
+{ IDX_2C('h','m'),        "Heard and McDonald Adalari",       0,0,0 },
+{ IDX_2C('h','n'),        "Honduras",                         0,0,0 },
+{ IDX_2C('h','r'),        "Hirvatistan",                      0,0,0 },
+{ IDX_2C('h','t'),        "Haiti",                            0,0,0 },
+{ IDX_2C('h','u'),        "Macaristan",                       0,0,0 },
+{ IDX_2C('i','d'),        "Endonezya",                        0,0,0 },
+{ IDX_2C('i','e'),        "Irlanda",                          0,0,0 },
+{ IDX_2C('i','l'),        "Israil",                           0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "Hindistan",                        0,0,0 },
+{ IDX_2C('i','o'),        "Ingiliz-Hint Okyanis Bolgesi",     0,0,0 },
+{ IDX_2C('i','q'),        "Irak",                             0,0,0 },
+{ IDX_2C('i','r'),        "Iran",                             0,0,0 },
+{ IDX_2C('i','s'),        "Izlanda",                          0,0,0 },
+{ IDX_2C('i','t'),        "Italya",                           0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "Jamaika",                          0,0,0 },
+{ IDX_2C('j','o'),        "Urdun",                            0,0,0 },
+{ IDX_2C('j','p'),        "Japonya",                          0,0,0 },
+{ IDX_2C('k','e'),        "Kenya",                            0,0,0 },
+{ IDX_2C('k','g'),        "Kirgizistan",                      0,0,0 },
+{ IDX_2C('k','h'),        "Kambocya",                         0,0,0 },
+{ IDX_2C('k','i'),        "Kiribati",                         0,0,0 },
+{ IDX_2C('k','m'),        "Comoros",                          0,0,0 },
+{ IDX_2C('k','n'),        "Saint Kitts and Nevis",            0,0,0 },
+{ IDX_2C('k','p'),        "Kore (Kuzey)",                     0,0,0 },
+{ IDX_2C('k','r'),        "Kore (Guney)",                     0,0,0 },
+{ IDX_2C('k','w'),        "Kuveyt",                           0,0,0 },
+{ IDX_2C('k','y'),        "Cayman Islands",                   0,0,0 },
+{ IDX_2C('k','z'),        "Kazakhistan",                      0,0,0 },
+{ IDX_2C('l','a'),        "Laos",                             0,0,0 },
+{ IDX_2C('l','b'),        "Lubnan",                           0,0,0 },
+{ IDX_2C('l','c'),        "Saint Lucia",                      0,0,0 },
+{ IDX_2C('l','i'),        "Liechtenstein",                    0,0,0 },
+{ IDX_2C('l','k'),        "Sri Lanka",                        0,0,0 },
+{ IDX_2C('l','r'),        "Liberya",                          0,0,0 },
+{ IDX_2C('l','s'),        "Lesotho",                          0,0,0 },
+{ IDX_2C('l','t'),        "Litvanya",                         0,0,0 },
+{ IDX_2C('l','u'),        "Luxemburg",                        0,0,0 },
+{ IDX_2C('l','v'),        "Latvia",                           0,0,0 },
+{ IDX_2C('l','y'),        "Libya",                            0,0,0 },
+{ IDX_2C('m','a'),        "Moroko",                           0,0,0 },
+{ IDX_2C('m','c'),        "Monako",                           0,0,0 },
+{ IDX_2C('m','d'),        "Moldova",                          0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "Madagascar",                       0,0,0 },
+{ IDX_2C('m','h'),        "Marshall Adalari",                 0,0,0 },
+{ IDX_2C('m','k'),        "Makedonya",                        0,0,0 },
+{ IDX_2C('m','l'),        "Mali",                             0,0,0 },
+{ IDX_2C('m','m'),        "Myanmar",                          0,0,0 },
+{ IDX_2C('m','n'),        "Mongolya",                         0,0,0 },
+{ IDX_2C('m','o'),        "Macau",                            0,0,0 },
+{ IDX_2C('m','p'),        "Kuzey Mariana Adalari",            0,0,0 },
+{ IDX_2C('m','q'),        "Martinik",                         0,0,0 },
+{ IDX_2C('m','r'),        "Moritanya",                        0,0,0 },
+{ IDX_2C('m','s'),        "Montserrat",                       0,0,0 },
+{ IDX_2C('m','t'),        "Malta",                            0,0,0 },
+{ IDX_2C('m','u'),        "Mauritius",                        0,0,0 },
+{ IDX_2C('m','v'),        "Maldivler",                        0,0,0 },
+{ IDX_2C('m','w'),        "Malawi",                           0,0,0 },
+{ IDX_2C('m','x'),        "Meksika",                          0,0,0 },
+{ IDX_2C('m','y'),        "Malezya",                          0,0,0 },
+{ IDX_2C('m','z'),        "Mozambik",                         0,0,0 },
+{ IDX_2C('n','a'),        "Namibya",                          0,0,0 },
+{ IDX_2C('n','c'),        "Yeni Kaledonya",                   0,0,0 },
+{ IDX_2C('n','e'),        "Niger",                            0,0,0 },
+{ IDX_2C('n','f'),        "Norfolk Adalari",                  0,0,0 },
+{ IDX_2C('n','g'),        "Nijerya",                          0,0,0 },
+{ IDX_2C('n','i'),        "Nikaragua",                        0,0,0 },
+{ IDX_2C('n','l'),        "Hollanda",                         0,0,0 },
+{ IDX_2C('n','o'),        "Norvec",                           0,0,0 },
+{ IDX_2C('n','p'),        "Nepal",                            0,0,0 },
+{ IDX_2C('n','r'),        "Nauru",                            0,0,0 },
+{ IDX_2C('n','u'),        "Niue",                             0,0,0 },
+{ IDX_2C('n','z'),        "Yeni Zellanda",                    0,0,0 },
+{ IDX_2C('o','m'),        "Umman",                            0,0,0 },
+{ IDX_2C('p','a'),        "Panama",                           0,0,0 },
+{ IDX_2C('p','e'),        "Peru",                             0,0,0 },
+{ IDX_2C('p','f'),        "Fransiz Polinezyasi",              0,0,0 },
+{ IDX_2C('p','g'),        "Papua Yeni Gine",                  0,0,0 },
+{ IDX_2C('p','h'),        "Filipinler",                       0,0,0 },
+{ IDX_2C('p','k'),        "Pakistan",                         0,0,0 },
+{ IDX_2C('p','l'),        "Polonya",                          0,0,0 },
+{ IDX_2C('p','m'),        "St. Pierre and Miquelon",          0,0,0 },
+{ IDX_2C('p','n'),        "Pitcairn",                         0,0,0 },
+{ IDX_2C('p','r'),        "Porto Riko",                       0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "Portekiz",                         0,0,0 },
+{ IDX_2C('p','w'),        "Palau",                            0,0,0 },
+{ IDX_2C('p','y'),        "Paraguay",                         0,0,0 },
+{ IDX_2C('q','a'),        "Katar",                            0,0,0 },
+{ IDX_2C('r','e'),        "Reunion",                          0,0,0 },
+{ IDX_2C('r','o'),        "Romanya",                          0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "Rus Federasyonu",                  0,0,0 },
+{ IDX_2C('r','w'),        "Ruanda",                           0,0,0 },
+{ IDX_2C('s','a'),        "Suudi Arabistan",                  0,0,0 },
+{ IDX_2C('s','b'),        "Solomon Adalari",                  0,0,0 },
+{ IDX_2C('s','c'),        "Seychelles",                       0,0,0 },
+{ IDX_2C('s','d'),        "Sudan",                            0,0,0 },
+{ IDX_2C('s','e'),        "Isvec",                            0,0,0 },
+{ IDX_2C('s','g'),        "Singapur",                         0,0,0 },
+{ IDX_2C('s','h'),        "St. Helena",                       0,0,0 },
+{ IDX_2C('s','i'),        "Slovenya",                         0,0,0 },
+{ IDX_2C('s','j'),        "Svalbard ve Jan Mayen Adalari",    0,0,0 },
+{ IDX_2C('s','k'),        "Slovak Cumhuriyeti",               0,0,0 },
+{ IDX_2C('s','l'),        "Sierra Leone",                     0,0,0 },
+{ IDX_2C('s','m'),        "San Marino",                       0,0,0 },
+{ IDX_2C('s','n'),        "Senegal",                          0,0,0 },
+{ IDX_2C('s','o'),        "Somali",                           0,0,0 },
+{ IDX_2C('s','r'),        "Surinam",                          0,0,0 },
+{ IDX_2C('s','t'),        "Sao Tome and Principe",            0,0,0 },
+{ IDX_2C('s','u'),        "SSCB (eski)",                      0,0,0 },
+{ IDX_2C('s','v'),        "El Salvador",                      0,0,0 },
+{ IDX_2C('s','y'),        "Suriye",                           0,0,0 },
+{ IDX_2C('s','z'),        "Swaziland",                        0,0,0 },
+{ IDX_2C('t','c'),        "Turks ve Caicos Adalari",          0,0,0 },
+{ IDX_2C('t','d'),        "Cad",                              0,0,0 },
+{ IDX_2C('t','f'),        "Fransiz Guney Bolgeleri",          0,0,0 },
+{ IDX_2C('t','g'),        "Togo",                             0,0,0 },
+{ IDX_2C('t','h'),        "Tayland",                          0,0,0 },
+{ IDX_2C('t','j'),        "Tacikistan",                       0,0,0 },
+{ IDX_2C('t','k'),        "Tokelau",                          0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "Turkmenistan",                     0,0,0 },
+{ IDX_2C('t','n'),        "Tunus",                            0,0,0 },
+{ IDX_2C('t','o'),        "Tonga",                            0,0,0 },
+{ IDX_2C('t','p'),        "Dogu Timor",                       0,0,0 },
+{ IDX_2C('t','r'),        "Turkiye",                          0,0,0 },
+{ IDX_2C('t','t'),        "Trinidad ve Tobago",               0,0,0 },
+{ IDX_2C('t','v'),        "Tuvalu",                           0,0,0 },
+{ IDX_2C('t','w'),        "Tayvan",                           0,0,0 },
+{ IDX_2C('t','z'),        "Tanzanya",                         0,0,0 },
+{ IDX_2C('u','a'),        "Ukrayna",                          0,0,0 },
+{ IDX_2C('u','g'),        "Uganda",                           0,0,0 },
+{ IDX_2C('u','k'),        "Ingiltere",                        0,0,0 },
+{ IDX_2C('u','m'),        "US Minor Outlying Adalari",        0,0,0 },
+{ IDX_2C('u','s'),        "United States",                    0,0,0 },
+{ IDX_2C('u','y'),        "Uruguay",                          0,0,0 },
+{ IDX_2C('u','z'),        "Uzbekistan",                       0,0,0 },
+{ IDX_2C('v','a'),        "Vatican Sehiri Devleti (Kutsal Deniz)", 0,0,0 },
+{ IDX_2C('v','c'),        "Saint Vincent ve Grenadines",      0,0,0 },
+{ IDX_2C('v','e'),        "Venezuela",                        0,0,0 },
+{ IDX_2C('v','g'),        "Virgin Adalari (British)",         0,0,0 },
+{ IDX_2C('v','i'),        "Virgin Adalari (U.S.)",            0,0,0 },
+{ IDX_2C('v','n'),        "Vietnam",                          0,0,0 },
+{ IDX_2C('v','u'),        "Vanuatu",                          0,0,0 },
+{ IDX_2C('w','f'),        "Wallis ve Futuna Adalari",         0,0,0 },
+{ IDX_2C('w','s'),        "Samoa",                            0,0,0 },
+{ IDX_2C('y','e'),        "Yemen",                            0,0,0 },
+{ IDX_2C('y','t'),        "Mayotte",                          0,0,0 },
+{ IDX_2C('y','u'),        "Yugoslavya",                       0,0,0 },
+{ IDX_2C('z','a'),        "Guney Afrika",                     0,0,0 },
+{ IDX_2C('z','m'),        "Zambia",                           0,0,0 },
+{ IDX_2C('z','w'),        "Zimbabve",                         0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/lang/webalizer_lang.ukrainian b/lang/webalizer_lang.ukrainian
new file mode 100644 (file)
index 0000000..ded23a8
--- /dev/null
@@ -0,0 +1,638 @@
+/*
+   webalizer_lang.ukrainian
+
+   Webalizer V2.0x Language Support file for English.
+   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
+   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
+   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
+   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
+   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
+   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
+   17-May-2001 Translated by Mike Futerko (mike@LITech.lviv.ua)
+   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
+   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
+
+
+   Language files are named using the following convention:
+
+   webalizer_lang.LANGUAGE
+
+   where 'LANGUAGE' is the name of the language the file is
+   translated into (ie: webalizer_lang.russian for russian).
+   Either copy the desired language file to webalizer_lang.h
+   or create a symbolic link, then re-compile.
+
+   If you translate this file into a different language, please
+   send a copy to brad@mrunix.net.
+
+   Note: to use this translation, your GD should be able to display
+         the right Cyrillic chars. Who is require GD patch mail to:
+         mike@LITech.lviv.ua
+
+*/
+
+/***********************************************************************/
+/* DEFINE LANGUAGE NAME here                                           */
+/***********************************************************************/
+
+char *language  = "Ukrainian";
+char *langcode  = "uk";
+
+/***********************************************************************/
+/*                                                                     */
+/* Informational messages                                              */
+/*                                                                     */
+/* These messages are only displayed while The Webalizer is being run, */
+/* usually to the screen, and are not part of the HTML output.         */
+/*                                                                     */
+/***********************************************************************/
+
+/* these are only used in timing totals */
+/* Format:   XXX records (XXX ignored, XXX bad) in X.XX seconds        */
+char *msg_records = "records";
+char *msg_addresses="addresses";
+char *msg_ignored = "ignored";
+char *msg_bad     = "bad";
+char *msg_in      = "in";
+char *msg_seconds = "seconds";
+
+/* progress and setup error messages */
+char *msg_log_err = "Error: Can't open log file";
+char *msg_log_use = "Using logfile";
+char *msg_dir_err = "Error: Can't change directory to";
+char *msg_dir_use = "Creating output in";
+char *msg_cur_dir = "current directory";
+char *msg_hostname= "Hostname for reports is";
+char *msg_ign_hist= "Ignoring previous history...";
+char *msg_no_hist = "History file not found...";
+char *msg_get_hist= "Reading history file...";
+char *msg_put_hist= "Saving history information...";
+char *msg_hist_err= "Error: Unable to write history file";
+char *msg_bad_hist= "Error: Ignoring invalid history record";
+char *msg_bad_conf= "Error: Unable to open configuration file";
+char *msg_bad_key = "Warning: Invalid keyword";
+char *msg_bad_date= "Error: Skipping record (bad date)";
+char *msg_ign_nscp= "Skipping Netscape header record";
+char *msg_bad_rec = "Skipping bad record";
+char *msg_no_vrec = "No valid records found!";
+char *msg_gen_rpt = "Generating report for";
+char *msg_gen_sum = "Generating summary report";
+char *msg_get_data= "Reading previous run data..";
+char *msg_put_data= "Saving current run data...";
+char *msg_no_data = "Previous run data not found...";
+char *msg_bad_data= "Error: Unable to restore run data";
+char *msg_data_err= "Error: Unable to save current run data";
+char *msg_dup_data= "Warning: Possible duplicate data found";
+
+/* DNS Stuff */
+char *msg_dns_nocf= "No cache file specified, aborting...";
+char *msg_dns_nodb= "Error: Unable to open DNS cache file";
+char *msg_dns_nolk= "Error: Unable to lock DNS cache file";
+char *msg_dns_usec= "Using DNS cache file";
+char *msg_dns_rslv= "DNS Lookup";
+char *msg_dns_none= "None to process";
+char *msg_dns_abrt= "DNS support not present, aborting...";
+
+/* Geolocation stuff */
+char *msg_geo_open= "Error opening file";
+char *msg_geo_use = "Using";
+char *msg_geo_nolu= "lookups disabled";
+char *msg_geo_dflt= "default";
+
+/* memory allocation errors */
+char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!";
+char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!";
+char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!";
+char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!";
+char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!";
+char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!";
+char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!";
+char *msg_nomem_dh= "Error adding host node (daily), skipping";
+char *msg_nomem_mh= "Error adding host node (monthly), skipping";
+char *msg_nomem_u = "Error adding URL node, skipping";
+char *msg_nomem_a = "Error adding User Agent node, skipping";
+char *msg_nomem_r = "Error adding Referrer node, skipping";
+char *msg_nomem_sc= "Error adding Search String Node, skipping";
+char *msg_nomem_i = "Error adding Username node, skipping";
+
+/* log record errors */
+char *msg_big_rec = "Error: Skipping oversized log record";
+char *msg_big_host= "Warning: Truncating oversized hostname";
+char *msg_big_date= "Warning: Truncating oversized date field";
+char *msg_big_req = "Warning: Truncating oversized request field";
+char *msg_big_ref = "Warning: Truncating oversized referrer field";
+char *msg_big_user= "Warning: Truncating oversized username";
+char *msg_big_one = "Warning: String exceeds storage size";
+
+/* misc errors */
+char *msg_no_open = "Error: Unable to open file";
+
+/* Help display... */
+char *h_usage1 = "Usage";
+char *h_usage2 = "[options] [log file]";
+char *h_msg[]= {
+         "-h        = print this help message"             ,
+         "-V        = print version information"           ,
+         "-v        = be verbose"                          ,
+         "-d        = print additional debug info"         ,
+         "-F type   = Log type.  type= (clf | ftp | squid | w3c)",
+         "-f        = Fold sequence errors"                ,
+         "-i        = ignore history file"                 ,
+         "-p        = preserve state (incremental)"        ,
+         "-b        = ignore state (incremental)"          ,
+         "-q        = supress informational messages"      ,
+         "-Q        = supress _ALL_ messages"              ,
+         "-Y        = supress country graph"               ,
+         "-G        = supress hourly graph"                ,
+         "-H        = supress hourly stats"                ,
+         "-L        = supress color coded graph legends"   ,
+         "-l num    = use num background lines on graph"   ,
+         "-m num    = Visit timout value (seconds)"        ,
+         "-T        = print timing information"            ,
+         "-c file   = use configuration file 'file'"       ,
+         "-n name   = hostname to use"                     ,
+         "-o dir    = output directory to use"             ,
+         "-t name   = report title 'name'"                 ,
+         "-a name   = hide user agent 'name'"              ,
+         "-r name   = hide referrer 'name'"                ,
+         "-s name   = hide site 'name'"                    ,
+         "-u name   = hide URL 'name'"                     ,
+         "-x name   = Use filename extension 'name'"       ,
+         "-O name   = Omit page 'name'"                    ,
+         "-P name   = Page type extension 'name'"          ,
+         "-I name   = Index alias 'name'"                  ,
+         "-K num    = num months in summary table"         ,
+         "-k num    = num months in summary graph"         ,
+         "-A num    = Display num top agents"              ,
+         "-C num    = Display num top countries"           ,
+         "-R num    = Display num top referrers"           ,
+         "-S num    = Display num top sites"               ,
+         "-U num    = Display num top URLs"                ,
+         "-e num    = Display num top Entry Pages"         ,
+         "-E num    = Display num top Exit Pages"          ,
+         "-g num    = Group Domains to 'num' levels"       ,
+         "-X        = Hide individual sites"               ,
+         "-z dir    = Use country flags in 'dir'"          ,
+#ifdef USE_DNS
+         "-D name   = Use DNS Cache file 'name'"           ,
+         "-N num    = Number of DNS processes (0=disable)" ,
+         "-j        = Enable native GeoDB lookups"         ,
+         "-J name   = Use GeoDB database 'name'"           ,
+#endif
+#ifdef USE_GEOIP
+         "-w        = Enable GeoIP lookups"                ,
+         "-W name   = Use GeoIP database 'name'"           ,
+#endif
+         NULL};
+
+/***********************************************************************/
+/*                                                                     */
+/* HTML strings                                                        */
+/*                                                                     */
+/* These strings are used as part of the HTML output generated by The  */
+/* Webalizer.                                                          */ 
+/*                                                                     */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "ðÅÒ¦ÏÄ ÓÔÁÔÉÓÔÉËÉ";
+char *msg_hhdr_gt = "óÔ×ÏÒÅÎÏ";
+
+/* main index strings */
+char *msg_main_us = "óÕÍÁÒÎÅ ×ÉËÏÒÉÓÔÁÎÎÑ";
+/* char *msg_main_per= "ÏÓÔÁÎΦ 12 Í¦ÓÑæ×"; */
+char *msg_main_per= "ýÏͦÓÑÞÎÉʠЦÄÓÕÍÏË";
+char *msg_main_sum= "ýÏͦÓÑÞÎÉʠЦÄÓÕÍÏË";
+char *msg_main_da = "÷ ÓÅÒÅÄÎØÏÍÕ ÚÁ ÄÅÎØ";
+char *msg_main_mt = "÷ÓØÏÇÏ ÚÁ Í¦ÓÑÃØ";
+
+/* month HTML page strings */
+char *msg_hmth_du = "ýÏÄÅÎÎÅ ×ÉËÏÒÉÓÔÁÎÎÑ ÚÁ";
+char *msg_hmth_hu = "ðÏÇÏÄÉÎÎÅ ×ÉËÏÒÉÓÔÁÎÎÑ ÚÁ";
+
+/* table header strings */
+char *msg_h_by    = "ÐÏ";
+char *msg_h_avg   = "ÓÅÒÅÄÎ.";
+char *msg_h_max   = "ÍÁËÓ.";
+char *msg_h_total = "×ÓØÏÇÏ";
+char *msg_h_totals= "÷ÓØÏÇÏ";
+char *msg_h_day   = "ÄÅÎØ";
+char *msg_h_mth   = "ͦÓÑÃØ";
+char *msg_h_hour  = "ÇÏÄÉÎÁ";
+char *msg_h_hits  = "ÚÁÐÉÔ¦×";
+char *msg_h_pages = "ÓÔÏÒ.";
+char *msg_h_visits= "צÄצÄ.";
+char *msg_h_files = "ÆÁÊ̦×";
+char *msg_h_sites = "ÓÁÊÔ¦×";
+char *msg_h_xfer  = "ëâÁÊÔ";
+char *msg_h_hname = "¦Í'Ñ ÈÏÓÔÁ";
+char *msg_h_url   = "URL";
+char *msg_h_agent = "ÁÇÅÎÔ ËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_h_ref   = "ÐÏÓÉÌÁÎÎÑ";
+char *msg_h_ctry  = "ËÒÁ§ÎÁ";
+char *msg_h_search= "ÓÔÒ¦ÞËÁ ÐÏÛÕËÕ";
+char *msg_h_uname = "¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ";
+
+/* links along top of page */
+char *msg_hlnk_ds = "óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÈ";
+char *msg_hlnk_hs = "óÔÁÔÉÓÔÉËÁ ÐÏ ÇÏÄÉÎÁÈ";
+char *msg_hlnk_u  = "URL'É";
+char *msg_hlnk_s  = "óÁÊÔÉ";
+char *msg_hlnk_a  = "áÇÅÎÔÉ ËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_hlnk_c  = "ëÒÁ§ÎÉ";
+char *msg_hlnk_r  = "ðÏÓÉÌÁÎÎÑ";
+char *msg_hlnk_en = "ðÏÞÁÔËÏצ ÓÔÏÒ¦ÎËÉ";
+char *msg_hlnk_ex = "ë¦ÎÃÅצ ÓÔÏÒ¦ÎËÉ";
+char *msg_hlnk_sr = "ðÏÛÕË";
+char *msg_hlnk_i  = "ëÏÒÉÓÔÕ×ÁÞ¦";
+
+/* monthly total table */
+char *msg_mtot_ms = "í¦ÓÑÞÎÁ ÓÔÁÔÉÓÎÉËÁ ÚÁ";
+char *msg_mtot_th = "÷ÓØÏÇÏ ÚÁÐÉÔ¦×";
+char *msg_mtot_tf = "÷ÓØÏÇÏ ÆÁÊ̦×";
+char *msg_mtot_tx = "÷ÓØÏÇÏ ëâÁÊÔ";
+char *msg_mtot_us = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÓÁÊÔ¦×";
+char *msg_mtot_ur = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÐÏÓÉÌÁÎØ";
+char *msg_mtot_ua = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÁÇÅÎԦנËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_mtot_uu = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ URL'¦×";
+char *msg_mtot_ui = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ¦ÍÅÎ";
+char *msg_mtot_mhd= "ú×ÅÒÔÁÎØ ÚÁ ÄÅÎØ";
+char *msg_mtot_mhh= "ú×ÅÒÔÁÎØ ÚÁ ÇÏÄÉÎÕ";
+char *msg_mtot_mfd= "æÁÊ̦נÚÁ ÄÅÎØ";
+char *msg_mtot_mpd= "óÔÏÒ¦ÎÏË ÚÁ ÄÅÎØ";
+char *msg_mtot_msd= "Sites per Day";
+char *msg_mtot_mvd= "÷¦ÄצÄÕ×ÁÎØ ÚÁ ÄÅÎØ";
+char *msg_mtot_mkd= "KâÁÊÔ ÚÁ ÄÅÎØ";
+char *msg_mtot_rc = "ú×ÅÒÔÁÎØ ÚÁ ËÏÄÏ͠צÄÐÏצĦ";
+
+/* daily total table */
+char *msg_dtot_ds = "óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÈ ÚÁ";
+
+/* hourly total table */
+char *msg_htot_hs = "óÔÁÔÉÓÔÉËÁ ÐÏ ÇÏÄÉÎÁÈ ÚÁ";
+
+/* country pie chart */
+char *msg_ctry_use= "CÔÁÔÉÓÔÉËÁ ÐÏ ËÒÁ§ÎÁÈ ÚÁ";
+
+/* top tables */
+/* Formatted as "Top xxx of xxx Total something" */
+char *msg_top_top = "ðÅÒÛ¦";
+char *msg_top_of  = "Ú";
+char *msg_top_s   = "ÓÁÊÔ¦×";
+char *msg_top_u   = "URL'¦×";
+char *msg_top_r   = "ÐÏÓÉÌÁÎØ";
+char *msg_top_a   = "ÁÇÅÎԦנËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_top_c   = "ËÒÁ§Î";
+char *msg_top_en  = "ÐÏÞÁÔËÏ×ÉÈ ÓÔÏÒ¦ÎÏË";
+char *msg_top_ex  = "˦ÎÃÅ×ÉÈ ÓÔÏÒ¦ÎÏË";
+char *msg_top_sr  = "ÓÔÒ¦ÞÏË ÐÏÛÕËÕ";
+char *msg_top_i   = "¦ÍÅΠËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_v_sites = "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ ÓÁÊÔÉ";
+char *msg_v_urls  = "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ URL'É";
+char *msg_v_refs  = "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ ÐÏÓÉÌÁÎÎÑ";
+char *msg_v_agents= "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ ÁÇÅÎÔÉ ËÏÒÉÓÔÕ×ÁÞÁ";
+char *msg_v_search= "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ cÔÒ¦ÞËÉ ÐÏÛÕËÕ";
+char *msg_v_users = "ðÅÒÅÇÌÑÎÕÔÉ ×Ó¦ ¦ÍÅÎÁ ËÏÒÉÓÔÕ×ÁÞ¦×";
+
+/* short month names MUST BE 3 CHARS in size... pad if needed*/
+char *s_month[12]={ "ó¦Þ", "ìÀÔ", "âÅÒ",
+                    "ëצ", "ôÒÁ", "þÅÒ",
+                    "ìÉÐ", "óÅÒ", "÷ÅÒ",
+                    "öÏ×", "ìÉÓ", "çÒÕ"};
+
+/* long month names - can be any length */
+char *l_month[12]={ "ó¦ÞÅÎØ",   "ìÀÔÉÊ",   "âÅÒÅÚÅÎØ", "ëצÔÅÎØ",
+                    "ôÒÁ×ÅÎØ",  "þÅÒ×ÅÎØ", "ìÉÐÅÎØ",   "óÅÒÐÅÎØ",
+                    "÷ÅÒÅÓÅÎØ", "öÏ×ÔÅÎØ", "ìÉÓÔÏÐÁÄ", "çÒÕÄÅÎØ"};
+
+/* response code descriptions... order IS important!      */
+struct response_code response[] =
+       { { "îÅצÄÏÍÉÊ ËÏĠצÄÐÏצĦ",                    0 },
+         { "Code 100 - Continue",                        0 },
+         { "Code 101 - Switching Protocols",             0 },
+         { "Code 200 - OK",                              0 },
+         { "Code 201 - Created",                         0 },
+         { "Code 202 - Accepted",                        0 },
+         { "Code 203 - Non-Authoritative Information",   0 },
+         { "Code 204 - No Content",                      0 },
+         { "Code 205 - Reset Content",                   0 },
+         { "Code 206 - Partial Content",                 0 },
+         { "Code 300 - Multiple Choices",                0 },
+         { "Code 301 - Moved Permanently",               0 },
+         { "Code 302 - Found",                           0 },
+         { "Code 303 - See Other",                       0 },
+         { "Code 304 - Not Modified",                    0 },
+         { "Code 305 - Use Proxy",                       0 },
+         { "Code 307 - Moved Temporarily",               0 },
+         { "Code 400 - Bad Request",                     0 },
+         { "Code 401 - Unauthorized",                    0 },
+         { "Code 402 - Payment Required",                0 },
+         { "Code 403 - Forbidden",                       0 },
+         { "Code 404 - Not Found",                       0 },
+         { "Code 405 - Method Not Allowed",              0 },
+         { "Code 406 - Not Acceptable",                  0 },
+         { "Code 407 - Proxy Authentication Required",   0 },
+         { "Code 408 - Request Timeout",                 0 },
+         { "Code 409 - Conflict",                        0 },
+         { "Code 410 - Gone",                            0 },
+         { "Code 411 - Length Required",                 0 },
+         { "Code 412 - Precondition Failed",             0 },
+         { "Code 413 - Request Entity Too Large",        0 },
+         { "Code 414 - Request-URI Too Long",            0 },
+         { "Code 415 - Unsupported Media Type",          0 },
+         { "Code 416 - Requested Range Not Satisfiable", 0 },
+         { "Code 417 - Expectation Failed",              0 },
+         { "Code 500 - Internal Server Error",           0 },
+         { "Code 501 - Not Implemented",                 0 },
+         { "Code 502 - Bad Gateway",                     0 },
+         { "Code 503 - Service Unavailable",             0 },
+         { "Code 504 - Gateway Timeout",                 0 },
+         { "Code 505 - HTTP Version Not Supported",      0 } };
+
+char *msg_title   = "óÔÁÔÉÓÔÉËÁ ×¦ÄצÄÕ×ÁÎØ";
+char *msg_h_other = "¶ÎÛ¦";
+
+/* Country codes (previously in ctry.h header file) */
+
+struct  country_code ctry[] = {
+{ 0,                      "îÅÒÏÚ×'ÑÚÁΦ/îÅצÄÏͦ",            0,0,0 },
+{ IDX_3C('c','o','m'),    "ëÏÍÅÒæÊΦ (com)",                 0,0,0 },
+{ IDX_3C('e','d','u'),    "ïÓצÔΦ (edu)",                    0,0,0 },
+{ IDX_3C('g','o','v'),    "õÒÑÄÏצ (gov)",                    0,0,0 },
+{ IDX_3C('i','n','t'),    "¶ÎÔÅÒÎÁæÏÎÁÌØΦ (int)",           0,0,0 },
+{ IDX_3C('m','i','l'),    "÷¦ÊÓØËÏצ (mil)",                  0,0,0 },
+{ IDX_3C('n','e','t'),    "íÅÒÅÖÅצ (net)",                   0,0,0 },
+{ IDX_3C('o','r','g'),    "îÅËÏÍÅÒæÊΦ ÏÒÇÁΦÚÁ槠(org)",   0,0,0 },
+{ IDX_3C('b','i','z'),    "Generic Business (biz)",           0,0,0 },
+{ IDX_3C('c','a','t'),    "Catalan Community (cat)",          0,0,0 },
+{ IDX_3C('p','r','o'),    "Professional (pro)",               0,0,0 },
+{ IDX_3C('t','e','l'),    "Ind. Contact Data (tel)",          0,0,0 },
+{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)",    0,0,0 },
+{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)",    0,0,0 },
+{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)",   0,0,0 },
+{ IDX_4C('i','n','f','o'),"Generic TLD (info)",               0,0,0 },
+{ IDX_4C('j','o','b','s'),"Human Resources (jobs)",           0,0,0 },
+{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)",        0,0,0 },
+{ IDX_4C('n','a','m','e'),"Individual (name)",                0,0,0 },
+{ IDX_4C('a','r','p','a'),"Address Routing (arpa)",           0,0,0 },
+{ IDX_4C('n','a','t','o'),"úÏÎÁ Nato (nato)",                 0,0,0 },
+{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)",        0,0,0 },
+{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)",    0,0,0 },
+{ IDX_2C('a','c'),        "Ascension Island",                 0,0,0 },
+{ IDX_2C('a','d'),        "áÎÄÏÒÁ (ad)",                      0,0,0 },
+{ IDX_2C('a','e'),        "ïÂ'¤ÄÎÁΦ áÒÁÂÓØ˦ åͦÒÁÔÉ (ae)",  0,0,0 },
+{ IDX_2C('a','f'),        "áÆÇÁΦÓÔÁΠ(af)",                  0,0,0 },
+{ IDX_2C('a','g'),        "ôҦΦÄÁÄ ÔÁ ôÏÂÁÇÏ (ag)",          0,0,0 },
+{ IDX_2C('a','i'),        "áÎǦÌØÑ (ai)",                     0,0,0 },
+{ IDX_2C('a','l'),        "áÌÂÁΦѠ(al)",                     0,0,0 },
+{ IDX_2C('a','m'),        "÷¦ÒÍÅΦѠ(am)",                    0,0,0 },
+{ IDX_2C('a','n'),        "çÏÌÁÎÄÓØ˦ áÎÔÉÌØÓØ˦ ÏÓÔÒÏ×É (an)", 0,0,0 },
+{ IDX_2C('a','o'),        "áÎÇÏÌÁ (ao)",                      0,0,0 },
+{ IDX_2C('a','q'),        "áÎÔÁÒËÔÉËÁ (aq)",                  0,0,0 },
+{ IDX_2C('a','r'),        "áÒÇÅÎÔÉÎÁ (ar)",                   0,0,0 },
+{ IDX_2C('a','s'),        "áÍÅÒÉËÁÎÓØËÁ óÁÍÏÁ (as)",          0,0,0 },
+{ IDX_2C('a','t'),        "á×ÓÔҦѠ(at)",                     0,0,0 },
+{ IDX_2C('a','u'),        "á×ÓÔÒÁ̦Ѡ(au)",                   0,0,0 },
+{ IDX_2C('a','w'),        "áÒÕÂÁ (aw)",                       0,0,0 },
+{ IDX_2C('a','x'),        "Aland Islands",                    0,0,0 },
+{ IDX_2C('a','z'),        "áÚÅÒÂÁÊÄÖÁΠ(az)",                 0,0,0 },
+{ IDX_2C('b','a'),        "âÏÓΦѠÔÁ çÅÒÃÏÇÏ×ÉÎÁ (ba)",       0,0,0 },
+{ IDX_2C('b','b'),        "âÁÒÂÁÄÏÓ (bb)",                    0,0,0 },
+{ IDX_2C('b','d'),        "âÁÎÇÌÁÄÅÛ (bd)",                   0,0,0 },
+{ IDX_2C('b','e'),        "âÅÌØǦѠ(be)",                     0,0,0 },
+{ IDX_2C('b','f'),        "âÕÒ˦ÎÁ æÁÓÏ (bf)",                0,0,0 },
+{ IDX_2C('b','g'),        "âÏÌÇÁҦѠ(bg)",                    0,0,0 },
+{ IDX_2C('b','h'),        "âÁÈÒÅÊΠ(bh)",                     0,0,0 },
+{ IDX_2C('b','i'),        "âÕÒÕÎĦ (bi)",                     0,0,0 },
+{ IDX_2C('b','j'),        "âÅΦΠ(bj)",                       0,0,0 },
+{ IDX_2C('b','l'),        "Saint Barthelemy",                 0,0,0 },
+{ IDX_2C('b','m'),        "âÅÒÍÕÄÉ (bm)",                     0,0,0 },
+{ IDX_2C('b','n'),        "âÒÕÎÅÊ äÁÒÕÓÁÌÁÍ (bn)",            0,0,0 },
+{ IDX_2C('b','o'),        "âÏ̦צѠ(bo)",                     0,0,0 },
+{ IDX_2C('b','r'),        "âÒÁÚÉ̦Ѡ(br)",                    0,0,0 },
+{ IDX_2C('b','s'),        "âÁÇÁÍÉ (bs)",                      0,0,0 },
+{ IDX_2C('b','t'),        "âÕÔÁΠ(bt)",                       0,0,0 },
+{ IDX_2C('b','v'),        "ïÓÔҦנâÕ×ÅÔ (bv)",                0,0,0 },
+{ IDX_2C('b','w'),        "âÏÔÓ×ÁÎÁ (bw)",                    0,0,0 },
+{ IDX_2C('b','y'),        "â¦ÌÏÒÕÓØ (by)",                    0,0,0 },
+{ IDX_2C('b','z'),        "âÅ̦ڠ(bz)",                       0,0,0 },
+{ IDX_2C('c','a'),        "ëÁÎÁÄÁ (ca)",                      0,0,0 },
+{ IDX_2C('c','c'),        "ëÁËÏÓÏצ ïÓÔÒÏ×É (cc)",            0,0,0 },
+{ IDX_2C('c','d'),        "Congo, Democratic Republic",       0,0,0 },
+{ IDX_2C('c','f'),        "ãÅÎÔÒÁÌØÎÏ áÆÒÉËÁÎÓØËÁ òÅÓÐÕÂ̦ËÁ (cf)", 0,0,0 },
+{ IDX_2C('c','g'),        "ëÏÎÇÏ (cg)",                       0,0,0 },
+{ IDX_2C('c','h'),        "û×ÅÊÃÁҦѠ(ch)",                   0,0,0 },
+{ IDX_2C('c','i'),        "õÚÂÅÒÅÖÖÑ ¶×ÏÒ¦ (ci)",             0,0,0 },
+{ IDX_2C('c','k'),        "ïÓÔÒÏ×É ëÕËÁ (cg)",                0,0,0 },
+{ IDX_2C('c','l'),        "þ¦Ì¦ (cl)",                        0,0,0 },
+{ IDX_2C('c','m'),        "ëÁÍÅÒÕΠ(cm)",                     0,0,0 },
+{ IDX_2C('c','n'),        "ëÉÔÁÊ (cn)",                       0,0,0 },
+{ IDX_2C('c','o'),        "ëÏÌÕͦѠ(co)",                    0,0,0 },
+{ IDX_2C('c','r'),        "ëÏÓÔÁ ò¦ËÁ (cr)",                  0,0,0 },
+{ IDX_2C('c','u'),        "ëÕÂÁ (cu)",                        0,0,0 },
+{ IDX_2C('c','v'),        "ëÅÊР÷ÅÒÄÅ (cv)",                  0,0,0 },
+{ IDX_2C('c','x'),        "ïÓÔҦנò¦ÚÄ×Á (cx)",               0,0,0 },
+{ IDX_2C('c','y'),        "ë¦ÐÒ (cy)",                        0,0,0 },
+{ IDX_2C('c','z'),        "þÅÓØËÁ ÒÅÓÐÕÂ̦ËÁ (cz)",           0,0,0 },
+{ IDX_2C('d','e'),        "î¦ÍÅÞÞÉÎÁ (de)",                   0,0,0 },
+{ IDX_2C('d','j'),        "äÖÉÂÕÔ¦ (dj)",                     0,0,0 },
+{ IDX_2C('d','k'),        "äÁΦѠ(dk)",                       0,0,0 },
+{ IDX_2C('d','m'),        "äÏͦΦËÁ (dm)",                    0,0,0 },
+{ IDX_2C('d','o'),        "äÏͦΦËÁÎÓØËÁ ÒÅÓÐÕÂ̦ËÁ (do)",    0,0,0 },
+{ IDX_2C('d','z'),        "áÌÇÅҦѠ(dz)",                     0,0,0 },
+{ IDX_2C('e','c'),        "åË×ÁÄÏÒ (ec)",                     0,0,0 },
+{ IDX_2C('e','e'),        "åÓÔÏΦѠ(ee)",                     0,0,0 },
+{ IDX_2C('e','g'),        "´ÇÉÐÅÔ (eg)",                      0,0,0 },
+{ IDX_2C('e','h'),        "úÁȦÄÎÁ óÁÈÁÒÁ (eh)",              0,0,0 },
+{ IDX_2C('e','r'),        "åÒ¦ÔÒÅÑ (er)",                     0,0,0 },
+{ IDX_2C('e','s'),        "¶ÓÐÁΦѠ(es)",                     0,0,0 },
+{ IDX_2C('e','t'),        "åƦÏЦѠ(et)",                     0,0,0 },
+{ IDX_2C('e','u'),        "European Union",                   0,0,0 },
+{ IDX_2C('f','i'),        "A¦ÎÌÑÎĦѠ(fi)",                   0,0,0 },
+{ IDX_2C('f','j'),        "æ¦ÄÖ¦ (fj)",                       0,0,0 },
+{ IDX_2C('f','k'),        "æÏÌËÌÅÎÄÓØ˦ ïÓÔÒÏ×É (fk)",        0,0,0 },
+{ IDX_2C('f','m'),        "í¦ËÒÏÎÅڦѠ(fm)",                  0,0,0 },
+{ IDX_2C('f','o'),        "æÁÒÅÒÓØ˦ ïÓÔÒÏ×É (fo)",           0,0,0 },
+{ IDX_2C('f','r'),        "æÒÁÎæѠ(fr)",                     0,0,0 },
+{ IDX_2C('g','a'),        "çÏÂÏΠ(ga)",                       0,0,0 },
+{ IDX_2C('g','b'),        "÷ÅÌÉËÏÂÒÉÔÁΦѠ(gb)",              0,0,0 },
+{ IDX_2C('g','d'),        "çÒÅÎÁÄÁ (gd)",                     0,0,0 },
+{ IDX_2C('g','e'),        "çÒÕڦѠ(ge)",                      0,0,0 },
+{ IDX_2C('g','f'),        "æÒÁÎÃÕÚØËÁ çÁÑÎÁ (gf)",            0,0,0 },
+{ IDX_2C('g','g'),        "Guernsey",                         0,0,0 },
+{ IDX_2C('g','h'),        "çÁÎÁ (gh)",                        0,0,0 },
+{ IDX_2C('g','i'),        "ç¦ÂÒÁÌÔÁÒ (gi)",                   0,0,0 },
+{ IDX_2C('g','l'),        "çÒÅÎÌÁÎĦѠ(gl)",                  0,0,0 },
+{ IDX_2C('g','m'),        "çÁͦѠ(gm)",                      0,0,0 },
+{ IDX_2C('g','n'),        "çצÎÅÑ (gn)",                      0,0,0 },
+{ IDX_2C('g','p'),        "ç×ÁÄÅÌÕÐÁ (gp)",                   0,0,0 },
+{ IDX_2C('g','q'),        "åË×ÁÔÏÒ¦ÁÌØÎÁ çצÎÅÑ (gq)",        0,0,0 },
+{ IDX_2C('g','r'),        "çÒÅæѠ(gr)",                      0,0,0 },
+{ IDX_2C('g','s'),        "ðÄ. çÅÏÒǦѠ¦ ðÄ. ïÓÔÒÏ×É óÅÎÄצޠ(gs)", 0,0,0 },
+{ IDX_2C('g','t'),        "ç×ÁÔÅÍÁÌÁ (gt)",                   0,0,0 },
+{ IDX_2C('g','u'),        "çÕÁÍ (gu)",                        0,0,0 },
+{ IDX_2C('g','w'),        "çצÎÅÀ-â¦ÓÁÕ (gw)",                0,0,0 },
+{ IDX_2C('g','y'),        "çÁÑÎÁ (gy)",                       0,0,0 },
+{ IDX_2C('h','k'),        "çÏΠëÏÎÇ (hk)",                    0,0,0 },
+{ IDX_2C('h','m'),        "ïÓÔÒÏ×É èÅÒÄÁ ¦ íÁËÄÏÎÁÌØÄÁ (hm)", 0,0,0 },
+{ IDX_2C('h','n'),        "çÏÎÄÕÒÁÓ (hn)",                    0,0,0 },
+{ IDX_2C('h','r'),        "èÏÒ×ÁԦѠ(hr)",                    0,0,0 },
+{ IDX_2C('h','t'),        "çÁ§Ô¦ (ht)",                       0,0,0 },
+{ IDX_2C('h','u'),        "õÇÏÒÝÉΦ (hu)",                    0,0,0 },
+{ IDX_2C('i','d'),        "¶ÎÄÏÎÅڦѠ(id)",                   0,0,0 },
+{ IDX_2C('i','e'),        "¶ÒÌÁÎĦѠ(ie)",                    0,0,0 },
+{ IDX_2C('i','l'),        "¶ÚÒÁ§ÌØ (il)",                     0,0,0 },
+{ IDX_2C('i','m'),        "Isle of Man",                      0,0,0 },
+{ IDX_2C('i','n'),        "¶ÎĦѠ(in)",                       0,0,0 },
+{ IDX_2C('i','o'),        "âÒÉÔÁÎÓØ˦ ÔÅÒ .× ¶ÎĦÊÓØËÏÍÕ ïËÅÁΦ (io)",0,0,0 },
+{ IDX_2C('i','q'),        "¶ÒÁË (iq)",                        0,0,0 },
+{ IDX_2C('i','r'),        "¶ÒÁΠ(ir)",                        0,0,0 },
+{ IDX_2C('i','s'),        "¶ÓÌÁÎĦѠ(is)",                    0,0,0 },
+{ IDX_2C('i','t'),        "¶ÔÁ̦Ѡ(it)",                      0,0,0 },
+{ IDX_2C('j','e'),        "Jersey",                           0,0,0 },
+{ IDX_2C('j','m'),        "ñÍÁÊËÁ (jm)",                      0,0,0 },
+{ IDX_2C('j','o'),        "êÏÒÄÁΠ(jo)",                      0,0,0 },
+{ IDX_2C('j','p'),        "ñÐÏΦѠ(jp)",                      0,0,0 },
+{ IDX_2C('k','e'),        "ëÅΦѠ(ke)",                       0,0,0 },
+{ IDX_2C('k','g'),        "ëÉÒÇÉÓÔÁΠ(kg)",                   0,0,0 },
+{ IDX_2C('k','h'),        "ëÁÍÂÏÄÖÁ (kh)",                    0,0,0 },
+{ IDX_2C('k','i'),        "ë¦Ò¦ÂÁÔ¦ (ki)",                    0,0,0 },
+{ IDX_2C('k','m'),        "ëÏÍÏÒÓØ˦ ïÓÔÒÏ×É (km)",           0,0,0 },
+{ IDX_2C('k','n'),        "ïÓÔÒÏ×É Ó×. ë¦ÔÓÁ É îÅצÓÁ (kn)",  0,0,0 },
+{ IDX_2C('k','p'),        "ëÏÒÅÑ (ð¦×ΦÞÎÁ) (kp)",            0,0,0 },
+{ IDX_2C('k','r'),        "ëÏÒÅÑ (ð¦×ÄÅÎÎÁ) (kr)",            0,0,0 },
+{ IDX_2C('k','w'),        "ëÕ×ÅÊÔ (kw)",                      0,0,0 },
+{ IDX_2C('k','y'),        "ëÁÊÍÁÎÓØ˦ ïÓÔÒÏ×É (ky)",          0,0,0 },
+{ IDX_2C('k','z'),        "ëÁÚÁÈÓÔÁΠ(kz)",                   0,0,0 },
+{ IDX_2C('l','a'),        "ìÁÏÓ (la)",                        0,0,0 },
+{ IDX_2C('l','b'),        "ìÅÂÁÎÏΠ(lb)",                     0,0,0 },
+{ IDX_2C('l','c'),        "óÁÎÔÁ ìÀަѠ(lc)",                 0,0,0 },
+{ IDX_2C('l','i'),        "ì¦ÈÔÅÎÛÔÅÊΠ(li)",                 0,0,0 },
+{ IDX_2C('l','k'),        "ûÒ¦ ìÁÎËÁ (lk)",                   0,0,0 },
+{ IDX_2C('l','r'),        "ì¦ÂÅҦѠ(lr)",                     0,0,0 },
+{ IDX_2C('l','s'),        "ìÅÓÏÔÏ (ls)",                      0,0,0 },
+{ IDX_2C('l','t'),        "ìÉÔ×Á (lt)",                       0,0,0 },
+{ IDX_2C('l','u'),        "ìÀËÓÅÍÂÕÒÇ (lu)",                  0,0,0 },
+{ IDX_2C('l','v'),        "ìÁÔצѠ(lv)",                      0,0,0 },
+{ IDX_2C('l','y'),        "ì¦×¦Ñ (ly)",                       0,0,0 },
+{ IDX_2C('m','a'),        "íÁÒÏËÏ (ma)",                      0,0,0 },
+{ IDX_2C('m','c'),        "íÏÎÁËÏ (mc)",                      0,0,0 },
+{ IDX_2C('m','d'),        "íÏÌÄÏ×Á (md)",                     0,0,0 },
+{ IDX_2C('m','e'),        "Montenegro",                       0,0,0 },
+{ IDX_2C('m','f'),        "Saint Martin (French part)",       0,0,0 },
+{ IDX_2C('m','g'),        "íÁÄÁÇÁÓËÁÒ (mg)",                  0,0,0 },
+{ IDX_2C('m','h'),        "íÁÒÛÁÌÏצ ïÓÔÒÏ×É (mh)",           0,0,0 },
+{ IDX_2C('m','k'),        "íÁËÅÄÏΦѠ(mk)",                   0,0,0 },
+{ IDX_2C('m','l'),        "íÁ̦ (ml)",                        0,0,0 },
+{ IDX_2C('m','m'),        "íÁÊÁÎÍÁÒ (mm)",                    0,0,0 },
+{ IDX_2C('m','n'),        "íÏÎÇÏ̦Ѡ(mn)",                    0,0,0 },
+{ IDX_2C('m','o'),        "íÁËÁÕ (mo)",                       0,0,0 },
+{ IDX_2C('m','p'),        "ð¦×ΦÞΦ íÁÒ¦ÁÎÓØ˦ ïÓÔÒÏ×É (mp)", 0,0,0 },
+{ IDX_2C('m','q'),        "íÁÒԦΦËÁ (mq)",                   0,0,0 },
+{ IDX_2C('m','r'),        "íÁ×ÒÉÔÁΦѠ(mr)",                  0,0,0 },
+{ IDX_2C('m','s'),        "íÏÎÔÓÅÒÁÔ (ms)",                   0,0,0 },
+{ IDX_2C('m','t'),        "íÁÌØÔÁ (mt)",                      0,0,0 },
+{ IDX_2C('m','u'),        "íÁ×ÒÉÔÁΦѠ(mu)",                  0,0,0 },
+{ IDX_2C('m','v'),        "íÁÌØĦ×ÓØËÁ òÅÓÐÕÂ̦ËÁ (mv)",      0,0,0 },
+{ IDX_2C('m','w'),        "íÁÌÁצ (mw)",                      0,0,0 },
+{ IDX_2C('m','x'),        "íÅËÓÉËÁ (mx)",                     0,0,0 },
+{ IDX_2C('m','y'),        "íÁÌÁڦѠ(my)",                     0,0,0 },
+{ IDX_2C('m','z'),        "íÏÚÁͦˠ(mz)",                    0,0,0 },
+{ IDX_2C('n','a'),        "îÁͦ¦Ѡ(na)",                     0,0,0 },
+{ IDX_2C('n','c'),        "îÏ×Á ëÁÌÅÄÏΦѠ(nc)",              0,0,0 },
+{ IDX_2C('n','e'),        "î¦ÇÅÒ (ne)",                       0,0,0 },
+{ IDX_2C('n','f'),        "ïÓÔҦנîÏÒÆÏÌË (nf)",              0,0,0 },
+{ IDX_2C('n','g'),        "î¦ÇÅҦѠ(ng)",                     0,0,0 },
+{ IDX_2C('n','i'),        "î¦ËÁÒÁÇÕÁ (ni)",                   0,0,0 },
+{ IDX_2C('n','l'),        "î¦ÄÅÒÌÁÎÄÉ (nl)",                  0,0,0 },
+{ IDX_2C('n','o'),        "îÏÒ×ÅǦѠ(no)",                    0,0,0 },
+{ IDX_2C('n','p'),        "îÅÐÁÌ (np)",                       0,0,0 },
+{ IDX_2C('n','r'),        "îÁÕÒÕ (nr)",                       0,0,0 },
+{ IDX_2C('n','u'),        "î¦ÕÅ (nu)",                        0,0,0 },
+{ IDX_2C('n','z'),        "îÏ×Á úÅÌÁÎĦѠ(nz)",               0,0,0 },
+{ IDX_2C('o','m'),        "ïÍÁΠ(om)",                        0,0,0 },
+{ IDX_2C('p','a'),        "ðÁÎÁÍÁ (pa)",                      0,0,0 },
+{ IDX_2C('p','e'),        "ðÅÒÕ (pr)",                        0,0,0 },
+{ IDX_2C('p','f'),        "æÒÁÎÃÕÚØËÁ ðÏ̦ÎÅڦѠ(pf)",        0,0,0 },
+{ IDX_2C('p','g'),        "ðÁÐÕÁ îÏ×Á çצÎÅÑ (pg)",           0,0,0 },
+{ IDX_2C('p','h'),        "æ¦Ì¦Ð¦ÎÉ (ph)",                    0,0,0 },
+{ IDX_2C('p','k'),        "ðÁ˦ÓÔÁΠ(pk)",                    0,0,0 },
+{ IDX_2C('p','l'),        "ðÏÌØÝÁ (pl)",                      0,0,0 },
+{ IDX_2C('p','m'),        "ïÓÔҦנÓ×. ð¤ÒÁ ¦ í¦ÇÅÌÑ (pm)",    0,0,0 },
+{ IDX_2C('p','n'),        "ð¦ÔËÅÒΠ(pn)",                     0,0,0 },
+{ IDX_2C('p','r'),        "ðÕÅÒÔÏ ò¦ËÏ (pr)",                 0,0,0 },
+{ IDX_2C('p','s'),        "Palestinian Territory, Occupied",  0,0,0 },
+{ IDX_2C('p','t'),        "ðÏÒÔÕÇÁ̦Ѡ(pt)",                  0,0,0 },
+{ IDX_2C('p','w'),        "ðÁÌÁÕ (pw)",                       0,0,0 },
+{ IDX_2C('p','y'),        "ðÁÒÁÇ×ÁÊ (py)",                    0,0,0 },
+{ IDX_2C('q','a'),        "ëÁÔÁÒ (qa)",                       0,0,0 },
+{ IDX_2C('r','e'),        "ïÓÔҦנòÅÀÎØÏΠ(re)",              0,0,0 },
+{ IDX_2C('r','o'),        "òÕÍÕΦѠ(po)",                     0,0,0 },
+{ IDX_2C('r','s'),        "Serbia",                           0,0,0 },
+{ IDX_2C('r','u'),        "òÏÓ¦ÊÓØËÁ æÅÄÅÒÁæѠ(ru)",         0,0,0 },
+{ IDX_2C('r','w'),        "òÕÁÎÁ (rw)",                       0,0,0 },
+{ IDX_2C('s','a'),        "óÁÕĦ×ÓØËÁ áÒÁצѠ(sa)",           0,0,0 },
+{ IDX_2C('s','b'),        "óÏÌÏÍÏÎÏצ ïÓÔÒÏ×É (sb)",          0,0,0 },
+{ IDX_2C('s','c'),        "óÅÊÛÅÌØÓØ˦ ïÓÔÒÏ×É (sc)",         0,0,0 },
+{ IDX_2C('s','d'),        "óÕÄÁΠ(sd)",                       0,0,0 },
+{ IDX_2C('s','e'),        "û×ÅæѠ(se)",                      0,0,0 },
+{ IDX_2C('s','g'),        "ó¦ÎÇÁÐÕÒ (sg)",                    0,0,0 },
+{ IDX_2C('s','h'),        "ïÓÔҦנÓ×. ´ÌÅÎÉ (sh)",            0,0,0 },
+{ IDX_2C('s','i'),        "óÌÏ×ÅΦѠ(si)",                    0,0,0 },
+{ IDX_2C('s','j'),        "ïÓÔÒÏ×É ó×ÁÌÂÁÒÄ ¦ ñÎ-íÁÊÅΠ(sj)", 0,0,0 },
+{ IDX_2C('s','k'),        "òÅÓÐÕÂ̦ËÁ óÌÏ×Á˦§ (sk)",         0,0,0 },
+{ IDX_2C('s','l'),        "ó¦¤ÒÁ ìÅÏÎÅ (sl)",                 0,0,0 },
+{ IDX_2C('s','m'),        "óÁΠíÁÒ¦ÎÏ (sm)",                  0,0,0 },
+{ IDX_2C('s','n'),        "óÅÎÅÇÁÌ (sn)",                     0,0,0 },
+{ IDX_2C('s','o'),        "óÏÍÁ̦ (so)",                      0,0,0 },
+{ IDX_2C('s','r'),        "óÕÒ¦ÎÁÍ (sr)",                     0,0,0 },
+{ IDX_2C('s','t'),        "óÁÏ ôÏÍ ¦ ðÒÉÎÃÉÐÏצ ïÓÔÒÏ×É (st)",0,0,0 },
+{ IDX_2C('s','u'),        "óòóò (ËÏÌÉÛΦÊ, su)",              0,0,0 },
+{ IDX_2C('s','v'),        "óÁÌØ×ÁÄÏÒ (sv)",                   0,0,0 },
+{ IDX_2C('s','y'),        "óÉҦѠ(sy)",                       0,0,0 },
+{ IDX_2C('s','z'),        "ó×ÁÚ¦ÌÁÎÄ (sz)",                   0,0,0 },
+{ IDX_2C('t','c'),        "ïÓÔÒÏ×É ôÀÒËÓ ¦ ëÁÊËÏÓ (tc)",      0,0,0 },
+{ IDX_2C('t','d'),        "þÁÄ (td)",                         0,0,0 },
+{ IDX_2C('t','f'),        "ð¦×ÄÅÎΦ æÒÁÎÃÕÚØ˦ ÔÅÒÉÔÏÒ¦§ (tf)", 0,0,0 },
+{ IDX_2C('t','g'),        "ôÏÇÏ (tg)",                        0,0,0 },
+{ IDX_2C('t','h'),        "ôÁ§ÌÁÎÄ (th)",                     0,0,0 },
+{ IDX_2C('t','j'),        "ôÁÄÖÉËÉÓÔÁΠ(tj)",                 0,0,0 },
+{ IDX_2C('t','k'),        "ïÓÔÒÏ×É ôÏËÅÌÁÕ (tk)",             0,0,0 },
+{ IDX_2C('t','l'),        "Timor-Leste",                      0,0,0 },
+{ IDX_2C('t','m'),        "ôÕÒËÍÅÎÉÓÔÁΠ(tm)",                0,0,0 },
+{ IDX_2C('t','n'),        "ôÕΦӠ(tn)",                       0,0,0 },
+{ IDX_2C('t','o'),        "ïÓÔÒÏ×É ôÏÎÇÁ (to)",               0,0,0 },
+{ IDX_2C('t','p'),        "óȦÄÎÉÊ ô¦ÍÏÒ (tp)",               0,0,0 },
+{ IDX_2C('t','r'),        "ôÕÒÅÞÞÉÎÁ (tr)",                   0,0,0 },
+{ IDX_2C('t','t'),        "òÅÓÐÕÂ̦ËÁ ôҦΦÄÁÄ ÔÁ ôÏÂÁÇÏ (tt)",0,0,0 },
+{ IDX_2C('t','v'),        "ôÕ×ÁÌÕ (tv)",                      0,0,0 },
+{ IDX_2C('t','w'),        "ôÁÊ×ÁÎØ (tw)",                     0,0,0 },
+{ IDX_2C('t','z'),        "ôÁÎÚÁΦѠ(tz)",                    0,0,0 },
+{ IDX_2C('u','a'),        "õËÒÁ§ÎÁ (ua)",                     0,0,0 },
+{ IDX_2C('u','g'),        "õÇÁÎÄÁ (ug)",                      0,0,0 },
+{ IDX_2C('u','k'),        "÷ÅÌÉËÏÂÒÉÔÁΦѠ(uk)",              0,0,0 },
+{ IDX_2C('u','m'),        "íÁ̦ ÚÏ×ΦÛΦ ÏÓÔÒÏ×É óûá (um)",   0,0,0 },
+{ IDX_2C('u','s'),        "CÐÏÌÕÞÅΦ ÛÔÁÔÉ (us)",             0,0,0 },
+{ IDX_2C('u','y'),        "õÒÕÇ×ÁÊ (uy)",                     0,0,0 },
+{ IDX_2C('u','z'),        "EÚÂÅËÉÓÔÁΠ(uz)",                  0,0,0 },
+{ IDX_2C('v','a'),        "÷ÁÔ¦ËÁΠ(va)",                     0,0,0 },
+{ IDX_2C('v','c'),        "ïÓÔÒÏ×É Ó×. ÷¦ÎÓÅÎÔÁ ¦ çÒÅÎÁĦÎÉ (vc)", 0,0,0 },
+{ IDX_2C('v','e'),        "÷ÅÎÅÓÕÅÌÁ (ve)",                   0,0,0 },
+{ IDX_2C('v','g'),        "÷¦ÒÄÖÉÎÓØ˦ ïÓÔÒÏ×É (âÒÉÔÁÎÓØ˦, vg)", 0,0,0 },
+{ IDX_2C('v','i'),        "÷¦ÒÄÖÉÎÓØ˦ ïÓÔÒÏ×É (óûá, vi)",    0,0,0 },
+{ IDX_2C('v','n'),        "÷'¤ÔÎÁÍ (vn)",                     0,0,0 },
+{ IDX_2C('v','u'),        "÷ÁÎÕÁÔÕ (vu)",                     0,0,0 },
+{ IDX_2C('w','f'),        "ïÓÔÒÏ×Á ÷ÅÌ̦Ӡ¦ æÕÔÕÎÁ (wf)",     0,0,0 },
+{ IDX_2C('w','s'),        "óÁÍÏÁ (ws)",                       0,0,0 },
+{ IDX_2C('y','e'),        "´ÍÅΠ(ye)",                        0,0,0 },
+{ IDX_2C('y','t'),        "ïÓÔҦנíÁÊÏÔÁ (yt)",               0,0,0 },
+{ IDX_2C('y','u'),        "àÇÏÓÌÁצѠ(ËÏÌÉÛÎÑ, yu)",          0,0,0 },
+{ IDX_2C('z','a'),        "ð¦×ÄÅÎÎÁ áÆÒÉËÁ (za)",             0,0,0 },
+{ IDX_2C('z','m'),        "úÁͦѠ(zm)",                      0,0,0 },
+{ IDX_2C('z','w'),        "ú¦ÍÂÁÂ×Å (zw)",                    0,0,0 },
+{ IDX_2C('a','1'),        "Anonymous Proxy",                  0,0,0 },
+{ IDX_2C('a','2'),        "Satellite Provider",               0,0,0 },
+{ IDX_2C('o','1'),        "Other",                            0,0,0 },
+{ IDX_2C('a','p'),        "Asia/Pacific Region",              0,0,0 },
+{ IDX_3C('l','a','n'),    "Local Network (lan)",              0,0,0 },
+{ 0              ,        NULL,                               0,0,0 }};
diff --git a/linklist.c b/linklist.c
new file mode 100644 (file)
index 0000000..df3a71a
--- /dev/null
@@ -0,0 +1,305 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <sys/utsname.h>
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#include "webalizer.h"                         /* main header              */
+#include "lang.h"
+#include "linklist.h"
+
+/* internal function prototypes */
+
+NLISTPTR new_nlist(char *);                         /* new list node       */
+void     del_nlist(NLISTPTR *);                     /* del list            */
+
+GLISTPTR new_glist(char *, char *);                 /* new group list node */
+void     del_glist(GLISTPTR *);                     /* del group list      */
+
+int      isinstr(char *, char *);
+
+/* Linkded list pointers */
+GLISTPTR group_sites   = NULL;                /* "group" lists            */
+GLISTPTR group_urls    = NULL;
+GLISTPTR group_refs    = NULL;
+GLISTPTR group_agents  = NULL;
+GLISTPTR group_users   = NULL;
+NLISTPTR hidden_sites  = NULL;                /* "hidden" lists           */
+NLISTPTR hidden_urls   = NULL;
+NLISTPTR hidden_refs   = NULL;
+NLISTPTR hidden_agents = NULL;
+NLISTPTR hidden_users  = NULL;
+NLISTPTR ignored_sites = NULL;                /* "Ignored" lists          */
+NLISTPTR ignored_urls  = NULL;
+NLISTPTR ignored_refs  = NULL;
+NLISTPTR ignored_agents= NULL;
+NLISTPTR ignored_users = NULL;
+NLISTPTR include_sites = NULL;                /* "Include" lists          */
+NLISTPTR include_urls  = NULL;
+NLISTPTR include_refs  = NULL;
+NLISTPTR include_agents= NULL;
+NLISTPTR include_users = NULL;
+NLISTPTR index_alias   = NULL;                /* index. aliases           */
+NLISTPTR html_pre      = NULL;                /* before anything else :)  */
+NLISTPTR html_head     = NULL;                /* top HTML code            */
+NLISTPTR html_body     = NULL;                /* body HTML code           */
+NLISTPTR html_post     = NULL;                /* middle HTML code         */
+NLISTPTR html_tail     = NULL;                /* tail HTML code           */
+NLISTPTR html_end      = NULL;                /* after everything else    */
+NLISTPTR page_type     = NULL;                /* page view types          */
+NLISTPTR omit_page     = NULL;                /* pages not counted        */
+NLISTPTR page_prefix   = NULL;                /* page view prefixes       */
+GLISTPTR search_list   = NULL;                /* Search engine list       */
+
+/*********************************************/
+/* NEW_NLIST - create new linked list node   */ 
+/*********************************************/
+
+NLISTPTR new_nlist(char *str)
+{
+   NLISTPTR newptr;
+
+   if (sizeof(newptr->string) < strlen(str))
+   {
+      if (verbose)
+    fprintf(stderr,"[new_nlist] %s\n",msg_big_one);
+   }
+   if (( newptr = malloc(sizeof(struct nlist))) != NULL)
+    {strncpy(newptr->string, str, sizeof(newptr->string));newptr->next=NULL;}
+   return newptr;
+}
+
+/*********************************************/
+/* ADD_NLIST - add item to FIFO linked list  */
+/*********************************************/
+
+int add_nlist(char *str, NLISTPTR *list)
+{
+   NLISTPTR newptr,cptr,pptr;
+
+   if ( (newptr = new_nlist(str)) != NULL)
+   {
+      if (*list==NULL) *list=newptr;
+      else
+      {
+         cptr=pptr=*list;
+         while(cptr!=NULL) { pptr=cptr; cptr=cptr->next; };
+         pptr->next = newptr;
+      }
+   } 
+   return newptr==NULL;
+}
+
+/*********************************************/
+/* DEL_NLIST - delete FIFO linked list       */
+/*********************************************/
+
+void del_nlist(NLISTPTR *list)
+{
+   NLISTPTR cptr,nptr;
+
+   cptr=*list;
+   while (cptr!=NULL)
+   {
+      nptr=cptr->next;
+      free(cptr);
+      cptr=nptr;
+   }
+}
+
+/*********************************************/
+/* NEW_GLIST - create new linked list node   */ 
+/*********************************************/
+
+GLISTPTR new_glist(char *str, char *name)
+{
+   GLISTPTR newptr;
+
+   if (sizeof(newptr->string) < strlen(str) ||
+       sizeof(newptr->name) < strlen(name))
+   {
+      if (verbose)
+       fprintf(stderr,"[new_glist] %s\n",msg_big_one);
+   }
+   if (( newptr = malloc(sizeof(struct glist))) != NULL)
+     {
+       strncpy(newptr->string, str, sizeof(newptr->string));
+       strncpy(newptr->name, name, sizeof(newptr->name));
+       newptr->next=NULL;
+     }
+   return newptr;
+}
+
+/*********************************************/
+/* ADD_GLIST - add item to FIFO linked list  */
+/*********************************************/
+
+int add_glist(char *str, GLISTPTR *list)
+{
+   GLISTPTR newptr,cptr,pptr;
+   char temp_buf[MAXKVAL];
+   char *name=temp_buf;
+   char sep=0;
+
+   /* make local copy of string */
+   if (*str=='"' || *str=='\'') sep=*str++;             /* Quote character?  */
+   strncpy(temp_buf,str,MAXKVAL-1);
+   temp_buf[MAXKVAL-1]=0;
+
+   if (!sep)                                            /* Space seperated   */
+      while (!isspace((unsigned char)*name) && *name!=0) name++;
+   else
+      while (*name!=sep && *name!=0) name++;            /* Quote seperated   */
+
+   if (*name==0) name=temp_buf;
+   else
+   {
+      *name++=0;
+      while (isspace((unsigned char)*name)&&*name!=0) name++;
+      if (*name==0) name=temp_buf;
+   }
+
+   if ( (newptr = new_glist(temp_buf, name)) != NULL)
+   {
+      if (*list==NULL) *list=newptr;
+      else
+      {
+         cptr=pptr=*list;
+         while(cptr!=NULL) { pptr=cptr; cptr=cptr->next; };
+         pptr->next = newptr;
+      }
+   } 
+   return newptr==NULL;
+}
+
+/*********************************************/
+/* DEL_GLIST - delete FIFO linked list       */
+/*********************************************/
+
+void del_glist(GLISTPTR *list)
+{
+   GLISTPTR cptr,nptr;
+
+   cptr=*list;
+   while (cptr!=NULL)
+   {
+      nptr=cptr->next;
+      free(cptr);
+      cptr=nptr;
+   }
+}
+
+/*********************************************/
+/* ISINLIST - Test if string is in list      */
+/*********************************************/
+
+char *isinlist(NLISTPTR list, char *str)
+{
+   NLISTPTR lptr;
+
+   lptr=list;
+   while (lptr!=NULL)
+   {
+      if (isinstr(str,lptr->string)) return lptr->string;
+      lptr=lptr->next;
+   }
+   return NULL;
+}
+
+/*********************************************/
+/* ISINGLIST - Test if string is in list     */
+/*********************************************/
+
+char *isinglist(GLISTPTR list, char *str)
+{
+   GLISTPTR lptr;
+
+   lptr=list;
+   while (lptr!=NULL)
+   {
+      if (isinstr(str,lptr->string)) return lptr->name;
+      lptr=lptr->next;
+   }
+   return NULL;
+}
+
+/*********************************************/
+/* ISINSTR - Scan for string in string       */
+/*********************************************/
+
+int isinstr(char *str, char *cp)
+{
+   char *cp1,*cp2;
+
+   cp1=(cp+strlen(cp))-1;
+   if (*cp=='*')
+   {
+      /* if leading wildcard, start from end */
+      cp2=str+strlen(str)-1;
+      while ( (cp1!=cp) && (cp2!=str))
+      {
+         if (*cp1=='*') return 1;
+         if (*cp1--!=*cp2--) return 0;
+      }
+      if (cp1==cp) return 1;
+      else return 0;
+   }
+   else
+   {
+      /* if no leading/trailing wildcard, just strstr */
+      if (*cp1!='*') return(strstr(str,cp)!=NULL);
+      /* otherwise do normal forward scan */
+      cp1=cp; cp2=str;
+      while (*cp2!='\0')
+      {
+         if (*cp1=='*') return 1;
+         if (*cp1++!=*cp2++) return 0;
+      }
+      if (*cp1=='*') return 1;
+         else return 0;
+   }
+}
diff --git a/linklist.h b/linklist.h
new file mode 100644 (file)
index 0000000..38e360c
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef _LINKLIST_H
+#define _LINKLIST_H
+
+struct nlist {  char string[MAXKVAL];     /* list struct for HIDE items   */
+              struct nlist *next; };
+typedef struct nlist *NLISTPTR;
+
+struct glist {  char string[MAXKVAL];     /* list struct for GROUP items  */
+                char name[MAXKVAL];
+              struct glist *next; };
+typedef struct glist *GLISTPTR;
+
+extern GLISTPTR group_sites   ;               /* "group" lists            */
+extern GLISTPTR group_urls    ;
+extern GLISTPTR group_refs    ;
+extern GLISTPTR group_agents  ;
+extern GLISTPTR group_users   ;
+extern NLISTPTR hidden_sites  ;               /* "hidden" lists           */
+extern NLISTPTR hidden_urls   ;       
+extern NLISTPTR hidden_refs   ;       
+extern NLISTPTR hidden_agents ;       
+extern NLISTPTR hidden_users  ;       
+extern NLISTPTR ignored_sites ;               /* "Ignored" lists          */
+extern NLISTPTR ignored_urls  ;       
+extern NLISTPTR ignored_refs  ;       
+extern NLISTPTR ignored_agents;       
+extern NLISTPTR ignored_users ;       
+extern NLISTPTR include_sites ;               /* "Include" lists          */
+extern NLISTPTR include_urls  ;       
+extern NLISTPTR include_refs  ;       
+extern NLISTPTR include_agents;       
+extern NLISTPTR include_users ;       
+extern NLISTPTR index_alias   ;               /* index. aliases            */
+extern NLISTPTR html_pre      ;               /* before anything else :)   */
+extern NLISTPTR html_head     ;               /* top HTML code             */
+extern NLISTPTR html_body     ;               /* body HTML code            */
+extern NLISTPTR html_post     ;               /* middle HTML code          */
+extern NLISTPTR html_tail     ;               /* tail HTML code            */
+extern NLISTPTR html_end      ;               /* after everything else     */
+extern NLISTPTR page_type     ;               /* page view types           */
+extern NLISTPTR omit_page     ;               /* pages not counted         */
+extern NLISTPTR page_prefix   ;               /* page view prefixes        */
+extern GLISTPTR search_list   ;               /* Search engine list        */
+
+extern char     *isinlist(NLISTPTR, char *);        /* scan list for str   */
+extern char     *isinglist(GLISTPTR, char *);       /* scan glist for str  */
+extern int      add_nlist(char *, NLISTPTR *);      /* add list item       */
+extern int      add_glist(char *, GLISTPTR *);      /* add group list item */
+
+#endif  /* _LINKLIST_H */
diff --git a/msfree.png b/msfree.png
new file mode 100644 (file)
index 0000000..2be2dfa
Binary files /dev/null and b/msfree.png differ
diff --git a/output.c b/output.c
new file mode 100644 (file)
index 0000000..2f696db
--- /dev/null
+++ b/output.c
@@ -0,0 +1,2910 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
+#ifdef USE_DNS
+#include <db.h>
+#endif
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#ifdef USE_GEOIP
+#include <GeoIP.h>
+#endif
+
+#include "webalizer.h"                        /* main header              */
+#include "lang.h"
+#include "hashtab.h"
+#include "preserve.h"
+#include "linklist.h"
+#include "graphs.h"
+#include "output.h"
+
+/* internal function prototypes */
+void    write_html_head(char *, FILE *);            /* head of html page   */
+void    write_html_tail(FILE *);                    /* tail of html page   */
+void    month_links();                              /* Page links          */
+void    month_total_table();                        /* monthly total table */
+void    daily_total_table();                        /* daily total table   */
+void    hourly_total_table();                       /* hourly total table  */
+void    top_sites_table(int);                       /* top n sites table   */
+void    top_urls_table(int);                        /* top n URLs table    */
+void    top_entry_table(int);                       /* top n entry/exits   */
+void    top_refs_table();                           /* top n referrers ""  */
+void    top_agents_table();                         /* top n u-agents  ""  */
+void    top_ctry_table();                           /* top n countries ""  */
+void    top_search_table();                         /* top n search strs   */
+void    top_users_table();                          /* top n ident table   */
+u_int64_t load_url_array(  UNODEPTR *);             /* load URL array      */
+u_int64_t load_site_array( HNODEPTR *);             /* load Site array     */
+u_int64_t load_ref_array(  RNODEPTR *);             /* load Refs array     */
+u_int64_t load_agent_array(ANODEPTR *);             /* load Agents array   */
+u_int64_t load_srch_array( SNODEPTR *);             /* load srch str array */
+u_int64_t load_ident_array(INODEPTR *);             /* load ident array    */
+int    qs_url_cmph( const void*, const void*);     /* compare by hits     */
+int    qs_url_cmpk( const void*, const void*);     /* compare by kbytes   */
+int    qs_url_cmpn( const void*, const void*);     /* compare by entrys   */
+int    qs_url_cmpx( const void*, const void*);     /* compare by exits    */
+int    qs_site_cmph(const void*, const void*);     /* compare by hits     */
+int    qs_site_cmpk(const void*, const void*);     /* compare by kbytes   */
+int    qs_ref_cmph( const void*, const void*);     /* compare by hits     */
+int     qs_agnt_cmph(const void*, const void*);     /* compare by hits     */
+int     qs_srch_cmph(const void*, const void*);     /* compare by hits     */
+int     qs_ident_cmph(const void*, const void*);    /* compare by hits     */
+int     qs_ident_cmpk(const void*, const void*);    /* compare by kbytes   */
+
+int     all_sites_page(u_int64_t, u_int64_t);       /* output site page    */
+int     all_urls_page(u_int64_t, u_int64_t);        /* output urls page    */
+int     all_refs_page(u_int64_t, u_int64_t);        /* output refs page    */
+int     all_agents_page(u_int64_t, u_int64_t);      /* output agents page  */
+int     all_search_page(u_int64_t, u_int64_t);      /* output search page  */
+int     all_users_page(u_int64_t, u_int64_t);       /* output ident page   */
+void    dump_all_sites();                           /* dump sites tab file */
+void    dump_all_urls();                            /* dump urls tab file  */
+void    dump_all_refs();                            /* dump refs tab file  */
+void    dump_all_agents();                          /* dump agents file    */
+void    dump_all_users();                           /* dump usernames file */
+void    dump_all_search();                          /* dump search file    */
+
+/* define some colors for HTML */
+#define WHITE          "#FFFFFF"
+#define BLACK          "#000000"
+#define RED            "#FF0000"
+#define ORANGE         "#FF8000"
+#define LTBLUE         "#0080FF"
+#define BLUE           "#0000FF"
+#define GREEN          "#00FF00"
+#define DKGREEN        "#008040"
+#define GREY           "#C0C0C0"
+#define LTGREY         "#E8E8E8"
+#define YELLOW         "#FFFF00"
+#define PURPLE         "#FF00FF"
+#define CYAN           "#00E0FF"
+#define GRPCOLOR       "#D0D0E0"
+
+/* configurable html colors */
+#define HITCOLOR       hit_color
+#define FILECOLOR      file_color
+#define SITECOLOR      site_color
+#define KBYTECOLOR     kbyte_color
+#define PAGECOLOR      page_color
+#define VISITCOLOR     visit_color
+#define MISCCOLOR      misc_color
+
+/* sort arrays */
+UNODEPTR *u_array      = NULL;                /* Sort array for URLs      */
+HNODEPTR *h_array      = NULL;                /* hostnames (sites)        */
+RNODEPTR *r_array      = NULL;                /* referrers                */
+ANODEPTR *a_array      = NULL;                /* user agents              */
+SNODEPTR *s_array      = NULL;                /* search strings           */
+INODEPTR *i_array      = NULL;                /* ident strings (username) */
+u_int64_t a_ctr        = 0;                   /* counter for sort array   */
+
+FILE     *out_fp;
+
+/*********************************************/
+/* WRITE_HTML_HEAD - output top of HTML page */
+/*********************************************/
+
+void write_html_head(char *period, FILE *out_fp)
+{
+   NLISTPTR lptr;                          /* used for HTMLhead processing */
+
+   /* HTMLPre code goes before all else    */
+   lptr = html_pre;
+   if (lptr==NULL)
+   {
+      /* Default 'DOCTYPE' header record if none specified */
+      fprintf(out_fp,
+      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n\n");
+   }
+   else
+   {
+      while (lptr!=NULL)
+      {
+         fprintf(out_fp,"%s\n",lptr->string);
+         lptr=lptr->next;
+      }
+   }
+   /* Standard header comments */
+   fprintf(out_fp,"<!-- Generated by The Webalizer  Ver. %s-%s -->\n",
+      version,editlvl);
+   fprintf(out_fp,"<!--                                          -->\n");
+   fprintf(out_fp,"<!-- Copyright 1997-2011  Bradford L. Barrett -->\n");
+   fprintf(out_fp,"<!--                                          -->\n");
+   fprintf(out_fp,"<!-- Distributed under the GNU GPL  Version 2 -->\n");
+   fprintf(out_fp,"<!--        Full text may be found at:        -->\n");
+   fprintf(out_fp,"<!--         http://www.webalizer.org         -->\n");
+   fprintf(out_fp,"<!--                                          -->\n");
+   fprintf(out_fp,"<!--  Give the power back to the programmers  -->\n");
+   fprintf(out_fp,"<!--   Support the Free Software Foundation   -->\n");
+   fprintf(out_fp,"<!--           (http://www.fsf.org)           -->\n");
+   fprintf(out_fp,"<!--                                          -->\n");
+   fprintf(out_fp,"<!-- *** Generated: %s *** -->\n\n",cur_time());
+
+   fprintf(out_fp,"<HTML lang=\"%s\">\n<HEAD>\n",langcode);
+   fprintf(out_fp," <TITLE>%s %s - %s</TITLE>\n",
+                  msg_title, hname, (period)?period:msg_main_per);
+   lptr=html_head;
+   while (lptr!=NULL)
+   {
+      fprintf(out_fp,"%s\n",lptr->string);
+      lptr=lptr->next;
+   }
+   fprintf(out_fp,"</HEAD>\n\n");
+
+   lptr = html_body;
+   if (lptr==NULL)
+      fprintf(out_fp,"<BODY BGCOLOR=\"%s\" TEXT=\"%s\" "   \
+              "LINK=\"%s\" VLINK=\"%s\">\n",
+              LTGREY, BLACK, BLUE, RED);
+   else
+   {
+      while (lptr!=NULL)
+      {
+         fprintf(out_fp,"%s\n",lptr->string);
+         lptr=lptr->next;
+      }
+   }
+   fprintf(out_fp,"<H2>%s %s</H2>\n",msg_title, hname);
+   if (period)
+      fprintf(out_fp,"<SMALL><STRONG>\n%s: %s<BR>\n",msg_hhdr_sp,period);
+   else
+      fprintf(out_fp,"<SMALL><STRONG>\n%s<BR>\n",msg_main_per);
+   fprintf(out_fp,"%s %s<BR>\n</STRONG></SMALL>\n",msg_hhdr_gt,cur_time());
+   lptr=html_post;
+   while (lptr!=NULL)
+   {
+      fprintf(out_fp,"%s\n",lptr->string);
+      lptr=lptr->next;
+   }
+   fprintf(out_fp,"<CENTER>\n<HR>\n<P>\n");
+}
+
+/*********************************************/
+/* WRITE_HTML_TAIL - output HTML page tail   */
+/*********************************************/
+
+void write_html_tail(FILE *out_fp)
+{
+   NLISTPTR lptr;
+
+   fprintf(out_fp,"</CENTER>\n");
+   fprintf(out_fp,"<P>\n<HR>\n");
+   fprintf(out_fp,"<TABLE WIDTH=\"100%%\" CELLPADDING=0 " \
+                  "CELLSPACING=0 BORDER=0>\n");
+   fprintf(out_fp,"<TR>\n");
+   fprintf(out_fp,"<TD ALIGN=left VALIGN=top>\n");
+   fprintf(out_fp,"<SMALL>Generated by\n");
+   fprintf(out_fp,"<A HREF=\"http://www.webalizer.org/\">");
+   fprintf(out_fp,"<STRONG>Webalizer Version %s</STRONG></A>\n",version);
+   fprintf(out_fp,"</SMALL>\n</TD>\n");
+   lptr=html_tail;
+   if (lptr)
+   {
+      fprintf(out_fp,"<TD ALIGN=\"right\" VALIGN=\"top\">\n");
+      while (lptr!=NULL)
+      {
+         fprintf(out_fp,"%s\n",lptr->string);
+         lptr=lptr->next;
+      }
+      fprintf(out_fp,"</TD>\n");
+   }
+   fprintf(out_fp,"</TR>\n</TABLE>\n");
+
+   /* wind up, this is the end of the file */
+   fprintf(out_fp,"\n<!-- Webalizer Version %s-%s (Mod: %s) -->\n",
+           version,editlvl,moddate);
+   lptr = html_end;
+   if (lptr)
+   {
+      while (lptr!=NULL)
+      {
+         fprintf(out_fp,"%s\n",lptr->string);
+         lptr=lptr->next;
+      }
+   }
+   else fprintf(out_fp,"\n</BODY>\n</HTML>\n");
+}
+
+/*********************************************/
+/* WRITE_MONTH_HTML - does what it says...   */
+/*********************************************/
+
+int write_month_html()
+{
+   char html_fname[256];           /* filename storage areas...       */
+   char png1_fname[32];
+   char png2_fname[32];
+
+   char buffer[BUFSIZE];           /* scratch buffer                  */
+   char dtitle[256];
+   char htitle[256];
+
+   if (verbose>1)
+      printf("%s %s %d\n",msg_gen_rpt, l_month[cur_month-1], cur_year); 
+
+   /* fill in filenames */
+   snprintf(html_fname,sizeof(html_fname),"usage_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+   sprintf(png1_fname,"daily_usage_%04d%02d.png",cur_year,cur_month);
+   sprintf(png2_fname,"hourly_usage_%04d%02d.png",cur_year,cur_month);
+
+   /* create PNG images for web page */
+   if (daily_graph)
+   {
+      snprintf(dtitle,sizeof(dtitle),"%s %s %d",
+               msg_hmth_du,l_month[cur_month-1],cur_year);
+      month_graph6 (  png1_fname,          /* filename          */
+                      dtitle,              /* graph title       */
+                      cur_month,           /* graph month       */
+                      cur_year,            /* graph year        */
+                      tm_hit,              /* data 1 (hits)     */
+                      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)   */
+   }
+
+   if (hourly_graph)
+   {
+      snprintf(htitle,sizeof(htitle),"%s %s %d",
+               msg_hmth_hu,l_month[cur_month-1],cur_year);
+      day_graph3(    png2_fname,
+                     htitle,
+                     th_hit,
+                     th_file,
+                     th_page );
+   }
+
+   /* now do html stuff... */
+   /* first, open the file */
+   if ( (out_fp=open_out_file(html_fname))==NULL ) return 1;
+
+   snprintf(buffer,sizeof(buffer),"%s %d",l_month[cur_month-1],cur_year);
+   write_html_head(buffer, out_fp);
+   month_links();
+   month_total_table();
+   if (daily_graph || daily_stats)        /* Daily stuff */
+   {
+      fprintf(out_fp,"<A NAME=\"DAYSTATS\"></A>\n");
+      if (daily_graph) fprintf(out_fp,"<IMG SRC=\"%s\" ALT=\"%s\" " \
+                  "HEIGHT=400 WIDTH=512><P>\n",png1_fname,dtitle);
+      if (daily_stats) daily_total_table();
+   }
+
+   if (hourly_graph || hourly_stats)      /* Hourly stuff */
+   {
+      fprintf(out_fp,"<A NAME=\"HOURSTATS\"></A>\n");
+      if (hourly_graph) fprintf(out_fp,"<IMG SRC=\"%s\" ALT=\"%s\" "  \
+                     "HEIGHT=256 WIDTH=512><P>\n",png2_fname,htitle);
+      if (hourly_stats) hourly_total_table();
+   }
+
+   /* Do URL related stuff here, sorting appropriately                      */
+   if ( (a_ctr=load_url_array(NULL)) )
+   {
+    if ( (u_array=malloc(sizeof(UNODEPTR)*(a_ctr))) !=NULL )
+    {
+     a_ctr=load_url_array(u_array);        /* load up our sort array        */
+     if (ntop_urls || dump_urls)
+     {
+       qsort(u_array,a_ctr,sizeof(UNODEPTR),qs_url_cmph);
+       if (ntop_urls) top_urls_table(0);   /* Top URLs (by hits)            */
+       if (dump_urls) dump_all_urls();     /* Dump URLs tab file            */
+     }
+     if (ntop_urlsK)                       /* Top URLs (by kbytes)          */
+      {qsort(u_array,a_ctr,sizeof(UNODEPTR),qs_url_cmpk); top_urls_table(1); }
+     if (ntop_entry)                       /* Top Entry Pages               */
+      {qsort(u_array,a_ctr,sizeof(UNODEPTR),qs_url_cmpn); top_entry_table(0);}
+     if (ntop_exit)                        /* Top Exit Pages                */
+      {qsort(u_array,a_ctr,sizeof(UNODEPTR),qs_url_cmpx); top_entry_table(1);}
+     free(u_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [u_array]\n",msg_nomem_tu); /* err */
+   }
+
+   /* do hostname (sites) related stuff here, sorting appropriately...      */
+   if ( (a_ctr=load_site_array(NULL)) )
+   {
+    if ( (h_array=malloc(sizeof(HNODEPTR)*(a_ctr))) !=NULL )
+    {
+     a_ctr=load_site_array(h_array);       /* load up our sort array        */
+     if (ntop_sites || dump_sites)
+     {
+       qsort(h_array,a_ctr,sizeof(HNODEPTR),qs_site_cmph);
+       if (ntop_sites) top_sites_table(0); /* Top sites table (by hits)     */
+       if (dump_sites) dump_all_sites();   /* Dump sites tab file           */
+     }
+     if (ntop_sitesK)                      /* Top Sites table (by kbytes)   */
+     {
+       qsort(h_array,a_ctr,sizeof(HNODEPTR),qs_site_cmpk);
+       top_sites_table(1);
+     }
+     free(h_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [h_array]\n",msg_nomem_ts); /* err */
+   }
+
+   /* do referrer related stuff here, sorting appropriately...              */
+   if ( (a_ctr=load_ref_array(NULL)) )
+   {
+    if ( (r_array=malloc(sizeof(RNODEPTR)*(a_ctr))) != NULL)
+    {
+     a_ctr=load_ref_array(r_array);
+     if (ntop_refs || dump_refs)
+     {
+       qsort(r_array,a_ctr,sizeof(RNODEPTR),qs_ref_cmph);
+       if (ntop_refs) top_refs_table();   /* Top referrers table            */
+       if (dump_refs) dump_all_refs();    /* Dump referrers tab file        */
+     }
+     free(r_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [r_array]\n",msg_nomem_tr); /* err */
+   }
+
+   /* do search string related stuff, sorting appropriately...              */
+   if ( (a_ctr=load_srch_array(NULL)) )
+   {
+    if ( (s_array=malloc(sizeof(SNODEPTR)*(a_ctr))) != NULL)
+    {
+     a_ctr=load_srch_array(s_array);
+     if (ntop_search || dump_search)
+     {
+       qsort(s_array,a_ctr,sizeof(SNODEPTR),qs_srch_cmph);
+       if (ntop_search) top_search_table(); /* top search strings table     */
+       if (dump_search) dump_all_search();  /* dump search string tab file  */
+     }
+     free(s_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [s_array]\n",msg_nomem_tsr);/* err */
+   }
+
+   /* do ident (username) related stuff here, sorting appropriately...      */
+   if ( (a_ctr=load_ident_array(NULL)) )
+   {
+    if ( (i_array=malloc(sizeof(INODEPTR)*(a_ctr))) != NULL)
+    {
+     a_ctr=load_ident_array(i_array);
+     if (ntop_users || dump_users)
+     {
+       qsort(i_array,a_ctr,sizeof(INODEPTR),qs_ident_cmph);
+       if (ntop_users) top_users_table(); /* top usernames table            */
+       if (dump_users) dump_all_users();  /* dump usernames tab file        */
+     }
+     free(i_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [i_array]\n",msg_nomem_ti); /* err */
+   }
+
+   /* do user agent related stuff here, sorting appropriately...            */
+   if ( (a_ctr=load_agent_array(NULL)) )
+   {
+    if ( (a_array=malloc(sizeof(ANODEPTR)*(a_ctr))) != NULL)
+    {
+     a_ctr=load_agent_array(a_array);
+     if (ntop_agents || dump_agents)
+     {
+       qsort(a_array,a_ctr,sizeof(ANODEPTR),qs_agnt_cmph);
+       if (ntop_agents) top_agents_table(); /* top user agents table        */
+       if (dump_agents) dump_all_agents();  /* dump user agents tab file    */
+     }
+     free(a_array);
+    }
+    else if (verbose) fprintf(stderr,"%s [a_array]\n",msg_nomem_ta); /* err */
+   }
+
+   if (ntop_ctrys ) top_ctry_table();     /* top countries table            */
+
+   write_html_tail(out_fp);               /* finish up the HTML document    */
+   fclose(out_fp);                        /* close the file                 */
+   return (0);                            /* done...                        */
+}
+
+/*********************************************/
+/* MONTH_LINKS - links to other page parts   */
+/*********************************************/
+
+void month_links()
+{
+   fprintf(out_fp,"<SMALL>\n");
+   if (daily_stats || daily_graph)
+      fprintf(out_fp,"<A HREF=\"#DAYSTATS\">[%s]</A>\n",msg_hlnk_ds);
+   if (hourly_stats || hourly_graph)
+      fprintf(out_fp,"<A HREF=\"#HOURSTATS\">[%s]</A>\n",msg_hlnk_hs);
+   if (ntop_urls || ntop_urlsK)
+      fprintf(out_fp,"<A HREF=\"#TOPURLS\">[%s]</A>\n",msg_hlnk_u);
+   if (ntop_entry)
+      fprintf(out_fp,"<A HREF=\"#TOPENTRY\">[%s]</A>\n",msg_hlnk_en);
+   if (ntop_exit)
+      fprintf(out_fp,"<A HREF=\"#TOPEXIT\">[%s]</A>\n",msg_hlnk_ex);
+   if (ntop_sites || ntop_sitesK)
+      fprintf(out_fp,"<A HREF=\"#TOPSITES\">[%s]</A>\n",msg_hlnk_s);
+   if (ntop_refs && t_ref)
+      fprintf(out_fp,"<A HREF=\"#TOPREFS\">[%s]</A>\n",msg_hlnk_r);
+   if (ntop_search)
+      fprintf(out_fp,"<A HREF=\"#TOPSEARCH\">[%s]</A>\n",msg_hlnk_sr);
+   if (ntop_users && t_user)
+      fprintf(out_fp,"<A HREF=\"#TOPUSERS\">[%s]</A>\n",msg_hlnk_i);
+   if (ntop_agents && t_agent)
+      fprintf(out_fp,"<A HREF=\"#TOPAGENTS\">[%s]</A>\n",msg_hlnk_a);
+   if (ntop_ctrys)
+      fprintf(out_fp,"<A HREF=\"#TOPCTRYS\">[%s]</A>\n",msg_hlnk_c);
+   fprintf(out_fp,"</SMALL>\n<P>\n");
+}
+
+/*********************************************/
+/* MONTH_TOTAL_TABLE - monthly totals table  */
+/*********************************************/
+
+void month_total_table()
+{
+   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;
+
+   days_in_month=(l_day-f_day)+1;
+   for (i=0;i<31;i++)
+   {  /* Get max/day values */
+      if (tm_hit[i]>max_hits)     max_hits  = tm_hit[i];
+      if (tm_file[i]>max_files)   max_files = tm_file[i];
+      if (tm_page[i]>max_pages)   max_pages = tm_page[i];
+      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];
+   }
+
+   fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"<TR><TH COLSPAN=3 ALIGN=center BGCOLOR=\"%s\">"           \
+      "%s %s %d</TH></TR>\n",GREY,msg_mtot_ms,l_month[cur_month-1],cur_year);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   /* Total Hits */
+   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_th,t_hit);
+   /* Total Files */
+   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_tf,t_file);
+   /* Total Pages */
+   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s %s</FONT></TD>\n"  \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_h_total, msg_h_pages, t_page);
+   /* Total Visits */
+   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s %s</FONT></TD>\n"  \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_h_total, msg_h_visits, t_visit);
+   /* Total XFer */
+   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><TH HEIGHT=4></TH></TR>\n");
+   /**********************************************/
+   /* Unique Sites */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"                     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_us,t_site);
+   /* Unique URLs */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"                     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_uu,t_url);
+   /* Unique Referrers */
+   if (t_ref != 0)
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"                     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_ur,t_ref);
+   /* Unique Usernames */
+   if (t_user != 0)
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"                     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_ui,t_user);
+   /* Unique Agents */
+   if (t_agent != 0)
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"                     \
+      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%llu</B>"              \
+      "</FONT></TD></TR>\n",msg_mtot_ua,t_agent);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   /**********************************************/
+   /* Hourly/Daily avg/max totals */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TH WIDTH=380 BGCOLOR=\"%s\"><FONT SIZE=-1 COLOR=\"%s\">.</FONT></TH>\n"\
+      "<TH WIDTH=65 BGCOLOR=\"%s\" ALIGN=right>"                             \
+      "<FONT SIZE=-1>%s </FONT></TH>\n"                                      \
+      "<TH WIDTH=65 BGCOLOR=\"%s\" ALIGN=right>"                             \
+      "<FONT SIZE=-1>%s </FONT></TH></TR>\n",
+      GREY,GREY,GREY,msg_h_avg,GREY,msg_h_max);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   /* Max/Avg Hits per Hour */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_mhh, t_hit/(24*days_in_month),mh_hit);
+   /* Max/Avg Hits per Day */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_mhd, t_hit/days_in_month, max_hits);
+   /* Max/Avg Files per Day */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_mfd, t_file/days_in_month,max_files);
+   /* Max/Avg Pages per Day */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_mpd, t_page/days_in_month,max_pages);
+   /* Max/Avg Sites per Day */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_msd, t_site/days_in_month,max_sites);
+   /* Max/Avg Visits per Day */
+   fprintf(out_fp,"<TR>"                                                     \
+      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%llu</B>"                   \
+      "</FONT></TD></TR>\n",msg_mtot_mvd, t_visit/days_in_month,max_visits);
+   /* Max/Avg KBytes per Day */
+   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_mkd,
+      (t_xfer/1024)/days_in_month,max_xfer/1024);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   /**********************************************/
+   /* response code totals */
+   fprintf(out_fp,"<TR><TH COLSPAN=3 ALIGN=center BGCOLOR=\"%s\">\n"         \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",GREY,msg_mtot_rc);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   for (i=0;i<TOTAL_RC;i++)
+   {
+      if (response[i].count != 0)
+         fprintf(out_fp,"<TR><TD><FONT SIZE=\"-1\">%s</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></TR>\n",
+            response[i].desc,PCENT(response[i].count,t_hit),response[i].count);
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   /**********************************************/
+
+   fprintf(out_fp,"</TABLE>\n");
+   fprintf(out_fp,"<P>\n");
+}
+
+/*********************************************/
+/* DAILY_TOTAL_TABLE - daily totals          */
+/*********************************************/
+
+void daily_total_table()
+{
+   int i,j;
+
+   /* Daily stats */
+   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>"          \
+           "%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");
+   fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"                     \
+                  "<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>\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,
+                  FILECOLOR,  msg_h_files,
+                  PAGECOLOR,  msg_h_pages,
+                  VISITCOLOR, msg_h_visits,
+                  SITECOLOR,  msg_h_sites,
+                  KBYTECOLOR, msg_h_xfer);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   /* skip beginning blank days in a month */
+   for (i=0;i<l_day;i++) if (tm_hit[i]!=0) break;
+   if (i==l_day) i=0;
+
+   for (;i<l_day;i++)
+   {
+      j = jdate(i+1,cur_month,cur_year);
+      if ( (j%7==6) || (j%7==0) )
+           fprintf(out_fp,"<TR BGCOLOR=\"%s\"><TD ALIGN=center>",GRPCOLOR);
+      else fprintf(out_fp,"<TR><TD ALIGN=center>");
+      fprintf(out_fp,"<FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n", i+1);
+      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",
+              tm_hit[i],PCENT(tm_hit[i],t_hit));
+      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",
+              tm_file[i],PCENT(tm_file[i],t_file));
+      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",
+              tm_page[i],PCENT(tm_page[i],t_page));
+      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",
+              tm_visit[i],PCENT(tm_visit[i],t_visit));
+      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",
+              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",
+              tm_xfer[i]/1024,PCENT(tm_xfer[i],t_xfer));
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"</TABLE>\n");
+   fprintf(out_fp,"<P>\n");
+}
+
+/*********************************************/
+/* HOURLY_TOTAL_TABLE - hourly table         */
+/*********************************************/
+
+void hourly_total_table()
+{
+   int       i,days_in_month;
+   u_int64_t avg_file=0;
+   double    avg_xfer=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>"\
+           "%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");
+   fprintf(out_fp,"<TR><TH ALIGN=center ROWSPAN=2 BGCOLOR=\"%s\">" \
+                  "<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>\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);
+   fprintf(out_fp,"<TR><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",
+                  HITCOLOR, msg_h_avg, HITCOLOR, 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",
+                  FILECOLOR, msg_h_avg, FILECOLOR, 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",
+                  PAGECOLOR, msg_h_avg, PAGECOLOR, 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",
+                  KBYTECOLOR, msg_h_avg, KBYTECOLOR, msg_h_total);
+
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   for (i=0;i<24;i++)
+   {
+      fprintf(out_fp,"<TR><TD ALIGN=center>"                          \
+         "<FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n",i);
+      fprintf(out_fp,
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+         th_hit[i]/days_in_month,th_hit[i],
+         PCENT(th_hit[i],t_hit));
+      fprintf(out_fp,
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+         th_file[i]/days_in_month,th_file[i],
+         PCENT(th_file[i],t_file));
+      fprintf(out_fp,
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+         th_page[i]/days_in_month,th_page[i],
+         PCENT(th_page[i],t_page));
+      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_xfer[i]/days_in_month)/1024,th_xfer[i]/1024,
+         PCENT(th_xfer[i],t_xfer));
+      avg_file += th_file[i]/days_in_month;
+      avg_xfer+= (th_xfer[i]/days_in_month)/1024;
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* TOP_SITES_TABLE - generate top n table    */
+/*********************************************/
+
+void top_sites_table(int flag)
+{
+   u_int64_t cnt=0, h_reg=0, h_grp=0, h_hid=0, tot_num;
+   int       i;
+   HNODEPTR  hptr, *pointer;
+
+   cnt=a_ctr; pointer=h_array;
+   while(cnt--)
+   {
+      /* calculate totals */
+      switch ( (int)((HNODEPTR)(*pointer)->flag) )
+      {
+         case OBJ_REG:   h_reg++;  break;
+         case OBJ_GRP:   h_grp++;  break;
+         case OBJ_HIDE:  h_hid++;  break;
+      }
+      pointer++;
+   }
+
+   if ( (tot_num=h_reg+h_grp)==0 ) return;              /* split if none    */
+   i=(flag)?ntop_sitesK:ntop_sites;                     /* Hits or KBytes?? */
+   if (tot_num > i) tot_num = i;                        /* get max to do... */
+
+   if ((!flag) || (flag&&!ntop_sites))                  /* now do <A> tag   */
+      fprintf(out_fp,"<A NAME=\"TOPSITES\"></A>\n");
+
+   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>" \
+           "%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>" \
+           "%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");
+   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                    \
+          "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+          "<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",VISITCOLOR,msg_h_visits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                        \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_hname);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=h_array; i=0;
+   while(tot_num)
+   {
+      hptr=*pointer++;
+      if (hptr->flag != OBJ_HIDE)
+      {
+         /* shade grouping? */
+         if (shade_groups && (hptr->flag==OBJ_GRP))
+            fprintf(out_fp,"<TR BGCOLOR=\"%s\">\n", GRPCOLOR);
+         else fprintf(out_fp,"<TR>\n");
+
+         fprintf(out_fp,
+              "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n"  \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%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_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",
+               hptr->string);
+         else fprintf(out_fp,"%s</FONT></TD></TR>\n",
+               hptr->string);
+         tot_num--;
+         i++;
+      }
+   }
+
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ((!flag) || (flag&&!ntop_sites))
+   {
+      if ( (all_sites) && ((h_reg+h_grp)>ntop_sites) )
+      {
+         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,"<FONT SIZE=\"-1\">");
+            fprintf(out_fp,"<A HREF=\"./site_%04d%02d.%s\">",
+                    cur_year,cur_month,html_ext);
+            fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_sites);
+            if (flag)   /* do we need to sort? */
+               qsort(h_array,a_ctr,sizeof(HNODEPTR),qs_site_cmph);
+         }
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_SITES_PAGE - HTML page of all sites   */
+/*********************************************/
+
+int all_sites_page(u_int64_t h_reg, u_int64_t h_grp)
+{
+   HNODEPTR hptr, *pointer;
+   char     site_fname[256], buffer[256];
+   FILE     *out_fp;
+   int      i=(h_grp)?1:0;
+
+   /* generate file name */
+   snprintf(site_fname,sizeof(site_fname),"site_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(site_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_sites);
+   write_html_head(buffer, out_fp);
+
+   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,"----------------  ----------------  ----------------  " \
+                  "----------------  --------------------\n\n");
+
+   /* Do groups first (if any) */
+   pointer=h_array;
+   while(h_grp)
+   {
+      hptr=*pointer++;
+      if (hptr->flag == OBJ_GRP)
+      {
+         fprintf(out_fp,
+            "%-8llu %6.02f%%  %8llu %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_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+            hptr->string);
+         h_grp--;
+      }
+   }
+
+   if (i) fprintf(out_fp,"\n");
+
+   /* Now do individual sites (if any) */
+   pointer=h_array;
+   if (!hide_sites) while(h_reg)
+   {
+      hptr=*pointer++;
+      if (hptr->flag == OBJ_REG)
+      {
+         fprintf(out_fp,
+            "%-8llu %6.02f%%  %8llu %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_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+            hptr->string);
+         h_reg--;
+      }
+   }
+
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_URLS_TABLE - generate top n table     */
+/*********************************************/
+
+void top_urls_table(int flag)
+{
+   u_int64_t cnt=0,u_reg=0,u_grp=0,u_hid=0, tot_num;
+   int       i;
+   UNODEPTR  uptr, *pointer;
+
+   cnt=a_ctr; pointer=u_array;
+   while (cnt--)
+   {
+      /* calculate totals */
+      switch ( (int)((UNODEPTR)(*pointer)->flag) )
+      {
+         case OBJ_REG:  u_reg++;  break;
+         case OBJ_GRP:  u_grp++;  break;
+         case OBJ_HIDE: u_hid++;  break;
+      }
+      pointer++;
+   }
+
+   if ( (tot_num=u_reg+u_grp)==0 ) return;              /* split if none    */
+   i=(flag)?ntop_urlsK:ntop_urls;                       /* Hits or KBytes?? */
+   if (tot_num > i) tot_num = i;                        /* get max to do... */
+   if ((!flag) || (flag&&!ntop_urls))                   /* now do <A> tag   */
+      fprintf(out_fp,"<A NAME=\"TOPURLS\"></A>\n");
+
+   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>"  \
+           "%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>"   \
+           "%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");
+   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                  \
+                  "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+                  HITCOLOR,msg_h_hits);
+   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>"                      \
+                  "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+                  MISCCOLOR,msg_h_url);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=u_array; i=0;
+   while (tot_num)
+   {
+      uptr=*pointer++;             /* point to the URL node */
+      if (uptr->flag != OBJ_HIDE)
+      {
+         /* shade grouping? */
+         if (shade_groups && (uptr->flag==OBJ_GRP))
+            fprintf(out_fp,"<TR BGCOLOR=\"%s\">\n", GRPCOLOR);
+         else fprintf(out_fp,"<TR>\n");
+
+         fprintf(out_fp,
+            "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.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);
+
+         if (uptr->flag==OBJ_GRP)
+         {
+            if (hlite_groups)
+               fprintf(out_fp,"<STRONG>%s</STRONG></FONT></TD></TR>\n",
+                uptr->string);
+            else fprintf(out_fp,"%s</FONT></TD></TR>\n",uptr->string);
+         }
+         else 
+        {
+            /* check for a service prefix (ie: http://) */
+            if (strstr(uptr->string,"://")!=NULL)
+               fprintf(out_fp,"<A HREF=\"%s\">%s</A></FONT></TD></TR>\n",
+                 uptr->string,uptr->string);
+           else
+            {
+               if (log_type == LOG_FTP) /* FTP log? */
+                   fprintf(out_fp,"%s</FONT></TD></TR>\n",uptr->string);
+               else
+               {             /* Web log  */
+                  if (use_https)
+                     /* secure server mode, use https:// */
+                     fprintf(out_fp,
+                     "<A HREF=\"https://%s%s\">%s</A></FONT></TD></TR>\n",
+                      hname,uptr->string,uptr->string);
+                   else
+                      /* otherwise use standard 'http://' */
+                      fprintf(out_fp,
+                      "<A HREF=\"http://%s%s\">%s</A></FONT></TD></TR>\n",
+                      hname,uptr->string,uptr->string);
+               }
+            }
+        }
+         tot_num--;
+         i++;
+      }
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ((!flag) || (flag&&!ntop_urls))
+   {
+      if ( (all_urls) && ((u_reg+u_grp)>ntop_urls) )
+      {
+         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,"<FONT SIZE=\"-1\">");
+            fprintf(out_fp,"<A HREF=\"./url_%04d%02d.%s\">",
+                    cur_year,cur_month,html_ext);
+            fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_urls);
+            if (flag)   /* do we need to sort first? */
+               qsort(u_array,a_ctr,sizeof(UNODEPTR),qs_url_cmph);
+         }
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_URLS_PAGE - HTML page of all urls     */
+/*********************************************/
+
+int all_urls_page(u_int64_t u_reg, u_int64_t u_grp)
+{
+   UNODEPTR uptr, *pointer;
+   char     url_fname[256], buffer[256];
+   FILE     *out_fp;
+   int      i=(u_grp)?1:0;
+
+   /* generate file name */
+   snprintf(url_fname,sizeof(url_fname),"url_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(url_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_url);
+   write_html_head(buffer, out_fp);
+
+   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");
+
+   /* do groups first (if any) */
+   pointer=u_array;
+   while (u_grp)
+   {
+      uptr=*pointer++;
+      if (uptr->flag == OBJ_GRP)
+      {
+         fprintf(out_fp,"%-8llu %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->string);
+         u_grp--;
+      }
+   }
+
+   if (i) fprintf(out_fp,"\n");
+
+   /* now do invididual sites (if any) */
+   pointer=u_array;
+   while (u_reg)
+   {
+      uptr=*pointer++;
+      if (uptr->flag == OBJ_REG)
+      {
+         fprintf(out_fp,"%-8llu %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->string);
+         u_reg--;
+      }
+   }
+
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_ENTRY_TABLE - top n entry/exit urls   */
+/*********************************************/
+
+void top_entry_table(int flag)
+{
+   u_int64_t cnt=0, u_entry=0, u_exit=0, tot_num;
+   u_int64_t t_entry=0, t_exit=0;
+   int       i;
+   UNODEPTR  uptr, *pointer;
+
+   cnt=a_ctr; pointer=u_array;
+   while (cnt--)
+   {
+      if ( (int)((UNODEPTR)(*pointer)->flag) == OBJ_REG )
+      {
+         if ( (u_int64_t)(((UNODEPTR)(*pointer))->entry) )
+            {  u_entry++; t_entry+=(u_int64_t)(((UNODEPTR)(*pointer))->entry); }
+         if ( (u_int64_t)(((UNODEPTR)(*pointer))->exit)  )
+            { u_exit++;   t_exit +=(u_int64_t)(((UNODEPTR)(*pointer))->exit);  }
+      }
+      pointer++;
+   }
+
+   /* calculate how many we have */
+   tot_num=(flag)?u_exit:u_entry;
+   if (flag) { if (tot_num > ntop_exit ) tot_num=ntop_exit;  }
+   else      { if (tot_num > ntop_entry) tot_num=ntop_entry; }
+
+   /* return if none to do */
+   if (!tot_num) return;
+
+   if (flag) fprintf(out_fp,"<A NAME=\"TOPEXIT\"></A>\n"); /* do anchor tag */
+   else      fprintf(out_fp,"<A NAME=\"TOPENTRY\"></A>\n");
+
+   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=6>"        \
+           "%s %llu %s %llu %s</TH></TR>\n",
+           GREY,msg_top_top,tot_num,msg_top_of,
+           (flag)?u_exit:u_entry,(flag)?msg_top_ex:msg_top_en);
+   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);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+                  HITCOLOR,msg_h_hits);
+   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_url);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=u_array; i=0;
+   while (tot_num)
+   {
+      uptr=*pointer++;
+      if (uptr->flag != OBJ_HIDE)
+      {
+         fprintf(out_fp,"<TR>\n");
+         fprintf(out_fp,
+             "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+             i+1,uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             (flag)?uptr->exit:uptr->entry,
+             (flag)?((t_exit==0)?0:((float)uptr->exit/t_exit)*100.0)
+                   :((t_entry==0)?0:((float)uptr->entry/t_entry)*100.0));
+
+         /* check for a service prefix (ie: http://) */
+         if (strstr(uptr->string,"://")!=NULL)
+          fprintf(out_fp,
+             "<A HREF=\"%s\">%s</A></FONT></TD></TR>\n",
+              uptr->string,uptr->string);
+        else
+         {
+            if (use_https)
+            /* secure server mode, use https:// */
+             fprintf(out_fp,
+                "<A HREF=\"https://%s%s\">%s</A></FONT></TD></TR>\n",
+                 hname,uptr->string,uptr->string);
+            else
+            /* otherwise use standard 'http://' */
+             fprintf(out_fp,
+                "<A HREF=\"http://%s%s\">%s</A></FONT></TD></TR>\n",
+                 hname,uptr->string,uptr->string);
+        }
+         tot_num--;
+         i++;
+      }
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* TOP_REFS_TABLE - generate top n table     */
+/*********************************************/
+
+void top_refs_table()
+{
+   u_int64_t cnt=0, r_reg=0, r_grp=0, r_hid=0, tot_num;
+   int       i;
+   RNODEPTR  rptr, *pointer;
+
+   if (t_ref==0) return;        /* return if none to process */
+
+   cnt=a_ctr; pointer=r_array;
+   while(cnt--)
+   {
+      /* calculate totals */
+      switch ( (int)((RNODEPTR)(*pointer)->flag) )
+      {
+         case OBJ_REG:  r_reg++;  break;
+         case OBJ_HIDE: r_hid++;  break;
+         case OBJ_GRP:  r_grp++;  break;
+      }
+      pointer++;
+   }
+
+   if ( (tot_num=r_reg+r_grp)==0 ) return;              /* split if none    */
+   if (tot_num > ntop_refs) tot_num=ntop_refs;          /* get max to do... */
+
+   fprintf(out_fp,"<A NAME=\"TOPREFS\"></A>\n");
+   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=4>"         \
+           "%s %llu %s %llu %s</TH></TR>\n",
+           GREY, msg_top_top, tot_num, msg_top_of, t_ref, msg_top_r);
+   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);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+          HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+          MISCCOLOR,msg_h_ref);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=r_array; i=0;
+   while(tot_num)
+   {
+      rptr=*pointer++;
+      if (rptr->flag != OBJ_HIDE)
+      {
+         /* shade grouping? */
+         if (shade_groups && (rptr->flag==OBJ_GRP))
+            fprintf(out_fp,"<TR BGCOLOR=\"%s\">\n", GRPCOLOR);
+         else fprintf(out_fp,"<TR>\n");
+
+         fprintf(out_fp,
+             "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n"  \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+             "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+             i+1,rptr->count,
+             (t_hit==0)?0:((float)rptr->count/t_hit)*100.0);
+
+         if (rptr->flag==OBJ_GRP)
+         {
+            if (hlite_groups)
+               fprintf(out_fp,"<STRONG>%s</STRONG>",rptr->string);
+            else fprintf(out_fp,"%s",rptr->string);
+         }
+         else
+         {
+            /* only link if enabled and has a service prefix */
+            if ( (strstr(rptr->string,"://")!=NULL) && link_referrer )
+               fprintf(out_fp,"<A HREF=\"%s\" rel=\"nofollow\">%s</A>",
+                       rptr->string, rptr->string);
+            else
+               fprintf(out_fp,"%s", rptr->string);
+         }
+         fprintf(out_fp,"</FONT></TD></TR>\n");
+         tot_num--;
+         i++;
+      }
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ( (all_refs) && ((r_reg+r_grp)>ntop_refs) )
+   {
+      if (all_refs_page(r_reg, r_grp))
+      {
+         fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+         fprintf(out_fp,"<TD COLSPAN=4 ALIGN=\"center\">\n");
+         fprintf(out_fp,"<FONT SIZE=\"-1\">");
+         fprintf(out_fp,"<A HREF=\"./ref_%04d%02d.%s\">",
+                 cur_year,cur_month,html_ext);
+         fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_refs);
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_REFS_PAGE - HTML page of all refs     */
+/*********************************************/
+
+int all_refs_page(u_int64_t r_reg, u_int64_t r_grp)
+{
+   RNODEPTR rptr, *pointer;
+   char     ref_fname[256], buffer[256];
+   FILE     *out_fp;
+   int      i=(r_grp)?1:0;
+
+   /* generate file name */
+   snprintf(ref_fname,sizeof(ref_fname),"ref_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(ref_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_ref);
+   write_html_head(buffer, out_fp);
+
+   fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+
+   fprintf(out_fp," %12s      %s\n",msg_h_hits,msg_h_ref);
+   fprintf(out_fp,"----------------  --------------------\n\n");
+
+   /* do groups first (if any) */
+   pointer=r_array;
+   while(r_grp)
+   {
+      rptr=*pointer++;
+      if (rptr->flag == OBJ_GRP)
+      {
+         fprintf(out_fp,"%-8llu %6.02f%%  %s\n",
+            rptr->count,
+            (t_hit==0)?0:((float)rptr->count/t_hit)*100.0,
+            rptr->string);
+         r_grp--;
+      }
+   }
+
+   if (i) fprintf(out_fp,"\n");
+
+   pointer=r_array;
+   while(r_reg)
+   {
+      rptr=*pointer++;
+      if (rptr->flag == OBJ_REG)
+      {
+         fprintf(out_fp,"%-8llu %6.02f%%  %s\n",
+            rptr->count,
+            (t_hit==0)?0:((float)rptr->count/t_hit)*100.0,
+            rptr->string);
+         r_reg--;
+      }
+   }
+
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_AGENTS_TABLE - generate top n table   */
+/*********************************************/
+
+void top_agents_table()
+{
+   u_int64_t cnt, a_reg=0, a_grp=0, a_hid=0, tot_num;
+   int       i;
+   ANODEPTR  aptr, *pointer;
+
+   if (t_agent == 0) return;    /* don't bother if we don't have any */
+
+   cnt=a_ctr; pointer=a_array;
+   while(cnt--)
+   {
+      /* calculate totals */
+      switch ( (int)((ANODEPTR)(*pointer)->flag) )
+      {
+         case OBJ_REG:   a_reg++;  break;
+         case OBJ_GRP:   a_grp++;  break;
+         case OBJ_HIDE:  a_hid++;  break;
+      }
+      pointer++;
+   }
+
+   if ( (tot_num=a_reg+a_grp)==0 ) return;              /* split if none    */
+   if (tot_num > ntop_agents) tot_num=ntop_agents;      /* get max to do... */
+
+   fprintf(out_fp,"<A NAME=\"TOPAGENTS\"></A>\n");
+   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=4>"        \
+          "%s %llu %s %llu %s</TH></TR>\n",
+          GREY, msg_top_top, tot_num, msg_top_of, t_agent, msg_top_a);
+   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);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+          HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+          MISCCOLOR,msg_h_agent);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=a_array; i=0;
+   while(tot_num)
+   {
+      aptr=*pointer++;
+      if (aptr->flag != OBJ_HIDE)
+      {
+         /* shade grouping? */
+         if (shade_groups && (aptr->flag==OBJ_GRP))
+            fprintf(out_fp,"<TR BGCOLOR=\"%s\">\n", GRPCOLOR);
+         else fprintf(out_fp,"<TR>\n");
+
+         fprintf(out_fp,
+             "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+             i+1,aptr->count,
+             (t_hit==0)?0:((float)aptr->count/t_hit)*100.0);
+
+         if ((aptr->flag==OBJ_GRP)&&hlite_groups)
+            fprintf(out_fp,"<STRONG>%s</STRONG></FONT></TD></TR>\n",
+               aptr->string);
+         else fprintf(out_fp,"%s</FONT></TD></TR>\n",
+               aptr->string);
+         tot_num--;
+         i++;
+      }
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ( (all_agents) && ((a_reg+a_grp)>ntop_agents) )
+   {
+      if (all_agents_page(a_reg, a_grp))
+      {
+         fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+         fprintf(out_fp,"<TD COLSPAN=4 ALIGN=\"center\">\n");
+         fprintf(out_fp,"<FONT SIZE=\"-1\">");
+         fprintf(out_fp,"<A HREF=\"./agent_%04d%02d.%s\">",
+                 cur_year,cur_month,html_ext);
+         fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_agents);
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_AGENTS_PAGE - HTML user agent page    */
+/*********************************************/
+
+int all_agents_page(u_int64_t a_reg, u_int64_t a_grp)
+{
+   ANODEPTR aptr, *pointer;
+   char     agent_fname[256], buffer[256];
+   FILE     *out_fp;
+   int      i=(a_grp)?1:0;
+
+   /* generate file name */
+   snprintf(agent_fname,sizeof(agent_fname),"agent_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(agent_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_agent);
+   write_html_head(buffer, out_fp);
+
+   fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+
+   fprintf(out_fp," %12s      %s\n",msg_h_hits,msg_h_agent);
+   fprintf(out_fp,"----------------  ----------------------\n\n");
+
+   /* do groups first (if any) */
+   pointer=a_array;
+   while(a_grp)
+   {
+      aptr=*pointer++;
+      if (aptr->flag == OBJ_GRP)
+      {
+         fprintf(out_fp,"%-8llu %6.02f%%  %s\n",
+             aptr->count,
+             (t_hit==0)?0:((float)aptr->count/t_hit)*100.0,
+             aptr->string);
+         a_grp--;
+      }
+   }
+
+   if (i) fprintf(out_fp,"\n");
+
+   pointer=a_array;
+   while(a_reg)
+   {
+      aptr=*pointer++;
+      if (aptr->flag == OBJ_REG)
+      {
+         fprintf(out_fp,"%-8llu %6.02f%%  %s\n",
+             aptr->count,
+             (t_hit==0)?0:((float)aptr->count/t_hit)*100.0,
+             aptr->string);
+         a_reg--;
+      }
+   }
+
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_SEARCH_TABLE - generate top n table   */
+/*********************************************/
+
+void top_search_table()
+{
+   u_int64_t cnt,t_val=0, tot_num;
+   int       i;
+   SNODEPTR  sptr, *pointer;
+
+   if (a_ctr==0) return;                  /* don't bother if none to do    */
+
+   cnt=tot_num=a_ctr; pointer=s_array;
+   while(cnt--)
+   {
+      t_val+=(u_int64_t)(((SNODEPTR)(*pointer))->count);
+      pointer++;
+   }
+
+   if ( tot_num > ntop_search) tot_num=ntop_search;
+
+   fprintf(out_fp,"<A NAME=\"TOPSEARCH\"></A>\n");
+   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=4>"        \
+          "%s %llu %s %llu %s</TH></TR>\n",
+          GREY, msg_top_top, tot_num, msg_top_of, a_ctr, msg_top_sr);
+   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);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+          HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+          MISCCOLOR,msg_h_search);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=s_array; i=0;
+   while(tot_num)
+   {
+      sptr=*pointer++;
+      fprintf(out_fp,
+         "<TR>\n"                                                     \
+         "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+         "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+         i+1,sptr->count,
+         (t_val==0)?0:((float)sptr->count/t_val)*100.0);
+      fprintf(out_fp,"%s</FONT></TD></TR>\n",sptr->string);
+      tot_num--;
+      i++;
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ( (all_search) && (a_ctr>ntop_search) )
+   {
+      if (all_search_page(a_ctr, t_val))
+      {
+         fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+         fprintf(out_fp,"<TD COLSPAN=4 ALIGN=\"center\">\n");
+         fprintf(out_fp,"<FONT SIZE=\"-1\">");
+         fprintf(out_fp,"<A HREF=\"./search_%04d%02d.%s\">",
+                 cur_year,cur_month,html_ext);
+         fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_search);
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_SEARCH_PAGE - HTML for search strings */
+/*********************************************/
+
+int all_search_page(u_int64_t tot_num, u_int64_t t_val)
+{
+   SNODEPTR sptr, *pointer;
+   char     search_fname[256], buffer[256];
+   FILE     *out_fp;
+
+   if (!tot_num) return 0;
+
+   /* generate file name */
+   snprintf(search_fname,sizeof(search_fname),"search_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(search_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_search);
+   write_html_head(buffer, out_fp);
+
+   fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+
+   fprintf(out_fp," %12s      %s\n",msg_h_hits,msg_h_search);
+   fprintf(out_fp,"----------------  ----------------------\n\n");
+
+   pointer=s_array;
+   while(tot_num)
+   {
+      sptr=*pointer++;
+      fprintf(out_fp,"%-8llu %6.02f%%  %s\n",
+         sptr->count,
+         (t_val==0)?0:((float)sptr->count/t_val)*100.0,
+         sptr->string);
+      tot_num--;
+   }
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_USERS_TABLE - generate top n table    */
+/*********************************************/
+
+void top_users_table()
+{
+   u_int64_t cnt=0, i_reg=0, i_grp=0, i_hid=0, tot_num;
+   int       i;
+   INODEPTR  iptr, *pointer;
+
+   cnt=a_ctr; pointer=i_array;
+   while(cnt--)
+   {
+      /* calculate totals */
+      switch ( (int)((INODEPTR)(*pointer)->flag) )
+      {
+         case OBJ_REG:   i_reg++;  break;
+         case OBJ_GRP:   i_grp++;  break;
+         case OBJ_HIDE:  i_hid++;  break;
+      }
+      pointer++;
+   }
+
+   if ( (tot_num=i_reg+i_grp)==0 ) return;              /* split if none    */
+   if (tot_num > ntop_users) tot_num = ntop_users;
+
+   fprintf(out_fp,"<A NAME=\"TOPUSERS\"></A>\n");       /* now do <A> tag   */
+
+   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>" \
+           "%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");
+   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                   \
+          "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+          "<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",VISITCOLOR,msg_h_visits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_uname);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+
+   pointer=i_array; i=0;
+   while(tot_num)
+   {
+      iptr=*pointer++;
+      if (iptr->flag != OBJ_HIDE)
+      {
+         /* shade grouping? */
+         if (shade_groups && (iptr->flag==OBJ_GRP))
+            fprintf(out_fp,"<TR BGCOLOR=\"%s\">\n", GRPCOLOR);
+         else fprintf(out_fp,"<TR>\n");
+
+         fprintf(out_fp,
+              "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n"  \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%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_visit==0)?0:((float)iptr->visit/t_visit)*100.0);
+
+         if ((iptr->flag==OBJ_GRP)&&hlite_groups)
+             fprintf(out_fp,"<STRONG>%s</STRONG></FONT></TD></TR>\n",
+               iptr->string);
+         else fprintf(out_fp,"%s</FONT></TD></TR>\n",
+               iptr->string);
+         tot_num--;
+         i++;
+      }
+   }
+
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   if ( (all_users) && ((i_reg+i_grp)>ntop_users) )
+   {
+      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,"<FONT SIZE=\"-1\">");
+         fprintf(out_fp,"<A HREF=\"./user_%04d%02d.%s\">",
+            cur_year,cur_month,html_ext);
+         fprintf(out_fp,"%s</A></TD></TR>\n",msg_v_users);
+      }
+   }
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* ALL_USERS_PAGE - HTML of all usernames    */
+/*********************************************/
+
+int all_users_page(u_int64_t i_reg, u_int64_t i_grp)
+{
+   INODEPTR iptr, *pointer;
+   char     user_fname[256], buffer[256];
+   FILE     *out_fp;
+   int      i=(i_grp)?1:0;
+
+   /* generate file name */
+   snprintf(user_fname,sizeof(user_fname),"user_%04d%02d.%s",
+            cur_year,cur_month,html_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(user_fname))==NULL ) return 0;
+
+   snprintf(buffer,sizeof(buffer),"%s %d - %s",
+            l_month[cur_month-1],cur_year,msg_h_uname);
+   write_html_head(buffer, out_fp);
+
+   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,"----------------  ----------------  ----------------  " \
+                  "----------------  --------------------\n\n");
+
+   /* Do groups first (if any) */
+   pointer=i_array;
+   while(i_grp)
+   {
+      iptr=*pointer++;
+      if (iptr->flag == OBJ_GRP)
+      {
+         fprintf(out_fp,
+      "%-8llu %6.02f%%  %8llu %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_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+            iptr->string);
+         i_grp--;
+      }
+   }
+
+   if (i) fprintf(out_fp,"\n");
+
+   /* Now do individual users (if any) */
+   pointer=i_array;
+   while(i_reg)
+   {
+      iptr=*pointer++;
+      if (iptr->flag == OBJ_REG)
+      {
+         fprintf(out_fp,
+      "%-8llu %6.02f%%  %8llu %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_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+            iptr->string);
+         i_reg--;
+      }
+   }
+
+   fprintf(out_fp,"</PRE></FONT>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 1;
+}
+
+/*********************************************/
+/* TOP_CTRY_TABLE - top countries table      */
+/*********************************************/
+
+void top_ctry_table()
+{
+   int       i,j,x,tot_num=0,tot_ctry=0;
+   int       ctry_fnd=0;
+   u_int64_t idx;
+   HNODEPTR  hptr;
+   char      *domain;
+   u_int64_t pie_data[10];
+   char      *pie_legend[10];
+   char      pie_title[48];
+   char      pie_fname[48];
+   char      flag_buf[256];
+
+   extern int ctry_graph;  /* include external flag */
+
+#ifdef USE_GEOIP
+   extern int    geoip;
+   extern GeoIP  *geo_fp;
+   const  char   *geo_rc=NULL;
+#endif
+   char          geo_ctry[3]="--";
+
+   /* scan hash table adding up domain totals */
+   for (i=0;i<MAXHASH;i++)
+   {
+      hptr=sm_htab[i];
+      while (hptr!=NULL)
+      {
+         if (hptr->flag != OBJ_GRP)   /* ignore group totals */
+         {
+            if (isipaddr(hptr->string)>0)
+            {
+               idx=0;                 /* unresolved/unknown  */
+#ifdef USE_DNS
+               if (geodb)
+               {
+                  /* Lookup IP address here, turn into idx   */
+                  geodb_get_cc(geo_db, hptr->string, geo_ctry);
+                  if (geo_ctry[0]=='-')
+                  {
+                     if (debug_mode)
+                        fprintf(stderr,"GeoDB: %s unknown!\n",hptr->string);
+                  }
+                  else idx=ctry_idx(geo_ctry);
+               }
+#endif
+#ifdef USE_GEOIP
+               if (geoip)
+               {
+                  /* Lookup IP address here,  turn into idx  */
+                  geo_rc=GeoIP_country_code_by_addr(geo_fp, hptr->string);
+                  if (geo_rc==NULL||geo_rc[0]=='\0'||geo_rc[0]=='-')
+                  {
+                     if (debug_mode)
+                        fprintf(stderr,"GeoIP: %s unknown (returns '%s')\n",
+                                hptr->string,(geo_rc==NULL)?"null":geo_rc);
+                  }
+                  else
+                  {
+                     /* index returned geo_ctry */
+                     geo_ctry[0]=tolower(geo_rc[0]);
+                     geo_ctry[1]=tolower(geo_rc[1]);
+                     idx=ctry_idx(geo_ctry);
+                  }
+               }
+#endif /* USE_GEOIP */
+            }
+            else
+            {
+               /* resolved hostname.. try to get TLD */
+               domain = hptr->string+strlen(hptr->string)-1;
+               while ( (*domain!='.')&&(domain!=hptr->string)) domain--;
+               if (domain++==hptr->string) idx=0;
+               else idx=ctry_idx(domain);
+            }
+            if (idx!=0)
+            {
+               ctry_fnd=0;
+               for (j=0;ctry[j].desc;j++)
+               {
+                  if (idx==ctry[j].idx)
+                  {
+                     ctry[j].count+=hptr->count;
+                     ctry[j].files+=hptr->files;
+                     ctry[j].xfer +=hptr->xfer;
+                     ctry_fnd=1;
+                     break;
+                  }
+               }
+            }
+            if (!ctry_fnd || idx==0)
+            {
+               ctry[0].count+=hptr->count;
+               ctry[0].files+=hptr->files;
+               ctry[0].xfer +=hptr->xfer;
+            }
+         }
+         hptr=hptr->next;
+      }
+   }
+
+   for (i=0;ctry[i].desc;i++)
+   {
+      if (ctry[i].count!=0) tot_ctry++;
+      for (j=0;j<ntop_ctrys;j++)
+      {
+         if (top_ctrys[j]==NULL) { top_ctrys[j]=&ctry[i]; break; }
+         else
+         {
+            if (ctry[i].count > top_ctrys[j]->count)
+            {
+               for (x=ntop_ctrys-1;x>j;x--)
+                  top_ctrys[x]=top_ctrys[x-1];
+               top_ctrys[x]=&ctry[i];
+               break;
+            }
+         }
+      }
+   }
+
+   /* put our anchor tag first... */
+   fprintf(out_fp,"<A NAME=\"TOPCTRYS\"></A>\n");
+
+   /* generate pie chart if needed */
+   if (ctry_graph)
+   {
+      for (i=0;i<10;i++) pie_data[i]=0;             /* init data array      */
+      if (ntop_ctrys<10) j=ntop_ctrys; else j=10;   /* ensure data size     */
+
+      for (i=0;i<j;i++)
+      {
+         pie_data[i]=top_ctrys[i]->count;           /* load the array       */
+         pie_legend[i]=top_ctrys[i]->desc;
+      }
+      snprintf(pie_title,sizeof(pie_title),"%s %s %d",
+               msg_ctry_use,l_month[cur_month-1],cur_year);
+      sprintf(pie_fname,"ctry_usage_%04d%02d.png",cur_year,cur_month);
+
+      pie_chart(pie_fname,pie_title,t_hit,pie_data,pie_legend);  /* do it   */
+
+      /* put the image tag in the page */
+      fprintf(out_fp,"<IMG SRC=\"%s\" ALT=\"%s\" " \
+                  "HEIGHT=300 WIDTH=512><P>\n",pie_fname,pie_title);
+   }
+
+   /* Now do the table */
+
+   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>"         \
+           "%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");
+   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                   \
+          "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+          "<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>"                       \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_ctry);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   for (i=0;i<ntop_ctrys;i++)
+   {
+      flag_buf[0]=0;
+      if (use_flags)
+      {
+         domain=un_idx((idx=top_ctrys[i]->idx));
+         if (strlen(domain)<3 && idx!=0) /* only to ccTLDs */
+         {
+            if ( domain[0]!='a'||domain[1]!='p' )  /* all but 'ap' */
+            snprintf(flag_buf,sizeof(flag_buf),
+            "<IMG SRC=\"%s/%s.png\" ALT=\"%s\" WIDTH=18 HEIGHT=12> ",
+            flag_dir,domain,top_ctrys[i]->desc);
+         }
+      }
+
+      if (top_ctrys[i]->count!=0)
+      fprintf(out_fp,"<TR>"                                                \
+              "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+              "<TD ALIGN=left NOWRAP>%s<FONT SIZE=\"-1\">%s</FONT>"        \
+              "</TD></TR>\n",
+              i+1,top_ctrys[i]->count,
+              (t_hit==0)?0:((float)top_ctrys[i]->count/t_hit)*100.0,
+              top_ctrys[i]->files,
+              (t_file==0)?0:((float)top_ctrys[i]->files/t_file)*100.0,
+              top_ctrys[i]->xfer/1024,
+              (t_xfer==0)?0:((float)top_ctrys[i]->xfer/t_xfer)*100.0,
+              flag_buf,top_ctrys[i]->desc);
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"</TABLE>\n<P>\n");
+}
+
+/*********************************************/
+/* DUMP_ALL_SITES - dump sites to tab file   */
+/*********************************************/
+
+void dump_all_sites()
+{
+   HNODEPTR  hptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/site_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* 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); 
+   }
+
+   /* dump 'em */
+   pointer=h_array;
+   while (cnt)
+   {
+      hptr=*pointer++;
+      if (hptr->flag != OBJ_GRP)
+      {
+         fprintf(out_fp,
+         "%llu\t%llu\t%.0f\t%llu\t%s\n",
+            hptr->count,hptr->files,hptr->xfer/1024,
+            hptr->visit,hptr->string);
+      }
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* DUMP_ALL_URLS - dump all urls to tab file */
+/*********************************************/
+
+void dump_all_urls()
+{
+   UNODEPTR  uptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/url_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* need a header? */
+   if (dump_header)
+   {
+      fprintf(out_fp,"%s\t%s\t%s\n",msg_h_hits,msg_h_xfer,msg_h_url);
+   }
+
+   /* dump 'em */
+   pointer=u_array;
+   while (cnt)
+   {
+      uptr=*pointer++;
+      if (uptr->flag != OBJ_GRP)
+      {
+         fprintf(out_fp,"%llu\t%.0f\t%s\n",
+            uptr->count,uptr->xfer/1024,uptr->string);
+      }
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* DUMP_ALL_REFS - dump all refs to tab file */
+/*********************************************/
+
+void dump_all_refs()
+{
+   RNODEPTR  rptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/ref_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* need a header? */
+   if (dump_header)
+   {
+      fprintf(out_fp,"%s\t%s\n",msg_h_hits,msg_h_ref);
+   }
+
+   /* dump 'em */
+   pointer=r_array;
+   while(cnt)
+   {
+      rptr=*pointer++;
+      if (rptr->flag != OBJ_GRP)
+      {
+         fprintf(out_fp,"%llu\t%s\n",rptr->count, rptr->string);
+      }
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* DUMP_ALL_AGENTS - dump agents htab file   */
+/*********************************************/
+
+void dump_all_agents()
+{
+   ANODEPTR  aptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/agent_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* need a header? */
+   if (dump_header)
+   {
+      fprintf(out_fp,"%s\t%s\n",msg_h_hits,msg_h_agent);
+   }
+
+   /* dump 'em */
+   pointer=a_array;
+   while(cnt)
+   {
+      aptr=*pointer++;
+      if (aptr->flag != OBJ_GRP)
+      {
+         fprintf(out_fp,"%llu\t%s\n",aptr->count,aptr->string);
+      }
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* DUMP_ALL_USERS - dump username tab file   */
+/*********************************************/
+
+void dump_all_users()
+{
+   INODEPTR  iptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/user_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* 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);
+   }
+
+   /* dump 'em */
+   pointer=i_array;
+   while(cnt)
+   {
+      iptr=*pointer++;
+      if (iptr->flag != OBJ_GRP)
+      {
+         fprintf(out_fp,
+         "%llu\t%llu\t%.0f\t%llu\t%s\n",
+            iptr->count,iptr->files,iptr->xfer/1024,
+            iptr->visit,iptr->string);
+      }
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* DUMP_ALL_SEARCH - dump search htab file   */
+/*********************************************/
+
+void dump_all_search()
+{
+   SNODEPTR  sptr, *pointer;
+   FILE      *out_fp;
+   char      filename[256];
+   u_int64_t cnt=a_ctr;
+
+   /* generate file name */
+   snprintf(filename,sizeof(filename),"%s/search_%04d%02d.%s",
+      (dump_path)?dump_path:".",cur_year,cur_month,dump_ext);
+
+   /* open file */
+   if ( (out_fp=open_out_file(filename))==NULL ) return;
+
+   /* need a header? */
+   if (dump_header)
+   {
+      fprintf(out_fp,"%s\t%s\n",msg_h_hits,msg_h_search);
+   }
+
+   /* dump 'em */
+   pointer=s_array;
+   while(cnt)
+   {
+      sptr=*pointer++;
+      fprintf(out_fp,"%llu\t%s\n",sptr->count,sptr->string);
+      cnt--;
+   }
+   fclose(out_fp);
+   return;
+}
+
+/*********************************************/
+/* WRITE_MAIN_INDEX - main index.html file   */
+/*********************************************/
+
+int write_main_index()
+{
+   /* create main index file */
+
+   int     i,j,days_in_month;
+   int     s_year=hist[HISTSIZE-1].year;
+   char    index_fname[256];
+   char    buffer[BUFSIZE];
+   u_int64_t m_hit=0;
+   u_int64_t m_files=0;
+   u_int64_t m_pages=0;
+   u_int64_t m_visits=0;
+   double    m_xfer=0.0;
+   double  gt_hit=0.0;
+   double  gt_files=0.0;
+   double  gt_pages=0.0;
+   double  gt_xfer=0.0;
+   double  gt_visits=0.0;
+
+   if (verbose>1) printf("%s\n",msg_gen_sum);
+
+   snprintf(buffer,sizeof(buffer),"%s %s",msg_main_us,hname);
+   year_graph6x("usage.png", buffer, hist);
+
+   /* now do html stuff... */
+   snprintf(index_fname,sizeof(index_fname),"index.%s",html_ext);
+
+   /* .htaccess file needed? */
+   if (htaccess)
+   {
+      if ((out_fp=fopen(".htaccess","wx")) != NULL)
+      {
+         fprintf(out_fp,"DirectoryIndex %s\n",index_fname);
+         fclose(out_fp);
+      }
+      else
+      {
+         if (errno!=EEXIST && verbose)
+            fprintf(stderr,"Error: Failed to create .htaccess file: %s\n",
+                    strerror(errno));
+      }
+   }
+
+   if ( (out_fp=open_out_file(index_fname)) == NULL)
+   {
+      if (verbose)
+      fprintf(stderr,"%s %s!\n",msg_no_open,index_fname);
+      return 1;
+   }
+   write_html_head(NULL, out_fp);
+
+   /* year graph */
+   fprintf(out_fp,"<IMG SRC=\"usage.png\" ALT=\"%s\" "    \
+                  "HEIGHT=256 WIDTH=512><P>\n",buffer);
+   /* 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,"%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\">"            \
+          "<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);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",PAGECOLOR,msg_h_pages);
+   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",SITECOLOR,msg_h_sites);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",PAGECOLOR,msg_h_pages);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",HITCOLOR,msg_h_hits);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   for (i=HISTSIZE-1;i>=HISTSIZE-index_mths;i--)
+   {
+      if (hist[i].hit==0)
+      {
+         days_in_month=1;
+         for (j=i;j>=0;j--) if (hist[j].hit!=0) break;
+         if (j<0) break;
+      }
+      else days_in_month=(hist[i].lday-hist[i].fday)+1;
+
+      /* Check for year change */
+      if (s_year!=hist[i].year)
+      {
+         /* Year Totals */
+         if (index_mths>16 && year_totals)
+         {
+            fprintf(out_fp,"<TR><TH COLSPAN=6 BGCOLOR=\"%s\" "         \
+                "ALIGN=left><FONT SIZE=\"-1\"><STRONG>%04d</TH>\n",
+                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\">%0llu</TH>", GRPCOLOR, m_visits);
+            fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                  "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_pages);
+            fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                  "<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;
+         }
+         /* Year Header */
+         s_year=hist[i].year;
+         if (index_mths>16 && year_hdrs)
+            fprintf(out_fp,"<TR><TH COLSPAN=11 BGCOLOR=\"%s\" "           \
+               "ALIGN=center>%04d</TH></TR>\n", GREY, s_year);
+      }
+
+      fprintf(out_fp,"<TR><TD NOWRAP>");
+      if (hist[i].hit!=0)
+         fprintf(out_fp,"<A HREF=\"usage_%04d%02d.%s\">"                  \
+                        "<FONT SIZE=\"-1\">%s %d</FONT></A></TD>\n",
+                         hist[i].year, hist[i].month, html_ext,
+                         s_month[hist[i].month-1], hist[i].year);
+      else
+         fprintf(out_fp,"<FONT SIZE=\"-1\">%s %d</FONT></A></TD>\n",      \
+                         s_month[hist[i].month-1], hist[i].year);
+                     
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].hit/days_in_month);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].files/days_in_month);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].page/days_in_month);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].visit/days_in_month);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      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\">%llu</FONT></TD>\n",
+                      hist[i].visit);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].page);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                      hist[i].files);
+      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>",
+                      hist[i].hit);
+      fprintf(out_fp,"</TR>\n");
+      gt_hit   += hist[i].hit;
+      gt_files += hist[i].files;
+      gt_pages += hist[i].page;
+      gt_xfer  += hist[i].xfer;
+      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;
+   }
+
+   if (index_mths>16 && year_totals)
+   {
+      fprintf(out_fp,"<TR><TH COLSPAN=6 BGCOLOR=\"%s\" "         \
+                     "ALIGN=left><FONT SIZE=\"-1\"><STRONG>%04d</TH>\n",
+                     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\">%0llu</TH>", GRPCOLOR, m_visits);
+      fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                     "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_pages);
+      fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                     "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_files);
+      fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                     "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_hit);
+   }
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=6 ALIGN=left>"          \
+          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_h_totals);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_xfer);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_visits);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_pages);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_files);
+   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+          "<FONT SIZE=\"-1\">%.0f</FONT></TH></TR>\n",GREY,gt_hit);
+   fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+   fprintf(out_fp,"</TABLE>\n");
+   write_html_tail(out_fp);
+   fclose(out_fp);
+   return 0;
+}
+
+/*********************************************/
+/* QS_SITE_CMPH - QSort compare site by hits */
+/*********************************************/
+
+int qs_site_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(HNODEPTR *)cp1)->count;
+   t2=(*(HNODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, we sort by hostname instead */
+   return strcmp( (*(HNODEPTR *)cp1)->string,
+                  (*(HNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_SITE_CMPK - QSort cmp site by bytes    */
+/*********************************************/
+
+int qs_site_cmpk(const void *cp1, const void *cp2)
+{
+   double t1, t2;
+   t1=(*(HNODEPTR *)cp1)->xfer;
+   t2=(*(HNODEPTR *)cp2)->xfer;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if xfer bytes are the same, we sort by hostname instead */
+   return strcmp( (*(HNODEPTR *)cp1)->string,
+                  (*(HNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_URL_CMPH - QSort compare URL by hits   */
+/*********************************************/
+
+int qs_url_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(UNODEPTR *)cp1)->count;
+   t2=(*(UNODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, we sort by url instead */
+   return strcmp( (*(UNODEPTR *)cp1)->string,
+                  (*(UNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_URL_CMPK - QSort compare URL by bytes  */
+/*********************************************/
+
+int qs_url_cmpk(const void *cp1, const void *cp2)
+{
+   double t1, t2;
+   t1=(*(UNODEPTR *)cp1)->xfer;
+   t2=(*(UNODEPTR *)cp2)->xfer;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if xfer bytes are the same, we sort by url instead */
+   return strcmp( (*(UNODEPTR *)cp1)->string,
+                  (*(UNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_URL_CMPN - QSort compare URL by entry  */
+/*********************************************/
+
+int qs_url_cmpn(const void *cp1, const void *cp2)
+{
+   double t1, t2;
+   t1=(*(UNODEPTR *)cp1)->entry;
+   t2=(*(UNODEPTR *)cp2)->entry;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if xfer bytes are the same, we sort by url instead */
+   return strcmp( (*(UNODEPTR *)cp1)->string,
+                  (*(UNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_URL_CMPX - QSort compare URL by exit   */
+/*********************************************/
+
+int qs_url_cmpx(const void *cp1, const void *cp2)
+{
+   double t1, t2;
+   t1=(*(UNODEPTR *)cp1)->exit;
+   t2=(*(UNODEPTR *)cp2)->exit;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if xfer bytes are the same, we sort by url instead */
+   return strcmp( (*(UNODEPTR *)cp1)->string,
+                  (*(UNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_REF_CMPH - QSort compare Refs by hits  */
+/*********************************************/
+
+int qs_ref_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(RNODEPTR *)cp1)->count;
+   t2=(*(RNODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, we sort by referrer URL instead */
+   return strcmp( (*(RNODEPTR *)cp1)->string,
+                  (*(RNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_AGNT_CMPH - QSort cmp Agents by hits   */
+/*********************************************/
+
+int qs_agnt_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(ANODEPTR *)cp1)->count;
+   t2=(*(ANODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, we sort by agent string instead */
+   return strcmp( (*(ANODEPTR *)cp1)->string,
+                  (*(ANODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_SRCH_CMPH - QSort cmp srch str by hits */
+/*********************************************/
+
+int qs_srch_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(SNODEPTR *)cp1)->count;
+   t2=(*(SNODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, we sort by search string instead */
+   return strcmp( (*(SNODEPTR *)cp1)->string,
+                  (*(SNODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* QS_IDENT_CMPH - QSort cmp ident by hits   */
+/*********************************************/
+
+int qs_ident_cmph(const void *cp1, const void *cp2)
+{
+   u_int64_t t1, t2;
+   t1=(*(INODEPTR *)cp1)->count;
+   t2=(*(INODEPTR *)cp2)->count;
+   if (t1!=t2) return (t2<t1)?-1:1;
+   /* if hits are the same, sort by ident (username) string instead */
+   return strcmp( (*(INODEPTR *)cp1)->string,
+                  (*(INODEPTR *)cp2)->string );
+}
+
+/*********************************************/
+/* LOAD_SITE_ARRAY - load up the sort array  */
+/*********************************************/
+
+u_int64_t load_site_array(HNODEPTR *pointer)
+{
+   HNODEPTR  hptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      hptr=sm_htab[i];
+      while (hptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=hptr;     /* otherwise, really do the load  */
+         hptr=hptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* LOAD_URL_ARRAY - load up the sort array   */
+/*********************************************/
+
+u_int64_t load_url_array(UNODEPTR *pointer)
+{
+   UNODEPTR  uptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      uptr=um_htab[i];
+      while (uptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=uptr;     /* otherwise, really do the load  */
+         uptr=uptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* LOAD_REF_ARRAY - load up the sort array   */
+/*********************************************/
+
+u_int64_t load_ref_array(RNODEPTR *pointer)
+{
+   RNODEPTR  rptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      rptr=rm_htab[i];
+      while (rptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=rptr;     /* otherwise, really do the load  */
+         rptr=rptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* LOAD_AGENT_ARRAY - load up the sort array */
+/*********************************************/
+
+u_int64_t load_agent_array(ANODEPTR *pointer)
+{
+   ANODEPTR  aptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      aptr=am_htab[i];
+      while (aptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=aptr;     /* otherwise, really do the load  */
+         aptr=aptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* LOAD_SRCH_ARRAY - load up the sort array  */
+/*********************************************/
+
+u_int64_t load_srch_array(SNODEPTR *pointer)
+{
+   SNODEPTR  sptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      sptr=sr_htab[i];
+      while (sptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=sptr;     /* otherwise, really do the load  */
+         sptr=sptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* LOAD_IDENT_ARRAY - load up the sort array */
+/*********************************************/
+
+u_int64_t load_ident_array(INODEPTR *pointer)
+{
+   INODEPTR  iptr;
+   int       i;
+   u_int64_t ctr = 0;
+
+   /* load the array */
+   for (i=0;i<MAXHASH;i++)
+   {
+      iptr=im_htab[i];
+      while (iptr!=NULL)
+      {
+         if (pointer==NULL) ctr++;       /* fancy way to just count 'em    */
+         else *(pointer+ctr++)=iptr;     /* otherwise, really do the load  */
+         iptr=iptr->next;
+      }
+   }
+   return ctr;   /* return number loaded */
+}
+
+/*********************************************/
+/* OPEN_OUT_FILE - Open file for output      */
+/*********************************************/
+
+FILE *open_out_file(char *filename)
+{
+   struct stat out_stat;
+   FILE *out_fp;
+
+   /* stat the file */
+   if ( !(lstat(filename, &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,filename);
+         return NULL;
+      }
+   }
+
+   /* open the file... */
+   if ( (out_fp=fopen(filename,"w")) == NULL)
+   {
+      if (verbose)
+      fprintf(stderr,"%s %s!\n",msg_no_open,filename);
+      return NULL;
+   }
+   return out_fp;
+}
+
diff --git a/output.h b/output.h
new file mode 100644 (file)
index 0000000..90cfe3a
--- /dev/null
+++ b/output.h
@@ -0,0 +1,12 @@
+#ifndef _OUTPUT_H
+#define _OUTPUT_H
+
+extern int   write_main_index();                    /* produce main HTML   */
+extern int   write_month_html();                    /* monthy HTML page    */
+extern FILE  *open_out_file(char *);                /* open output file    */
+#ifdef USE_DNS
+extern char  *geodb_get_cc(DB *, char *, char *);
+extern DB    *geo_db;
+#endif
+
+#endif  /* _OUTPUT_H */
diff --git a/parser.c b/parser.c
new file mode 100644 (file)
index 0000000..487ec7a
--- /dev/null
+++ b/parser.c
@@ -0,0 +1,740 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <sys/utsname.h>
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#include "webalizer.h"                        /* main header              */
+#include "lang.h"
+#include "parser.h"
+
+/* internal function prototypes */
+void fmt_logrec(char *);
+int  parse_record_clf(char *);
+int  parse_record_ftp(char *);
+int  parse_record_squid(char *);
+int  parse_record_w3c(char *);
+
+/*********************************************/
+/* FMT_LOGREC - terminate log fields w/zeros */
+/*********************************************/
+
+void fmt_logrec(char *buffer)
+{
+   char *cp=buffer;
+   int  q=0,b=0,p=0;
+
+   while (*cp != '\0')
+   {
+      /* break record up, terminate fields with '\0' */
+      switch (*cp)
+      {
+       case '\t': if (b || q || p) break; *cp='\0';   break;
+       case ' ': if (b || q || p) break; *cp='\0';    break;
+       case '"': if (*(cp-1)=='\\') break; else q^=1; break;
+       case '[': if (q) break; b++;                   break;
+       case ']': if (q) break; if (b>0) b--;          break;
+       case '(': if (q) break; p++;                   break;
+       case ')': if (q) break; if (p>0) p--;          break;
+      }
+      cp++;
+   }
+}
+
+/*********************************************/
+/* PARSE_RECORD - uhhh, you know...          */
+/*********************************************/
+
+int parse_record(char *buffer)
+{
+   /* clear out structure */
+   memset(&log_rec,0,sizeof(struct log_struct));
+
+   /* call appropriate handler */
+   switch (log_type)
+   {
+      default:
+      case LOG_CLF:   return parse_record_clf(buffer);   break; /* clf   */
+      case LOG_FTP:   return parse_record_ftp(buffer);   break; /* ftp   */
+      case LOG_SQUID: return parse_record_squid(buffer); break; /* squid */
+      case LOG_W3C:   return parse_record_w3c(buffer);   break; /* w3c   */
+   }
+}
+
+/*********************************************/
+/* PARSE_RECORD_FTP - ftp log handler        */
+/*********************************************/
+
+int parse_record_ftp(char *buffer)
+{
+   int size;
+   int i,j,count;
+   char *cp1, *cp2, *cpx, *cpy, *eob;
+
+   size = strlen(buffer);                 /* get length of buffer        */
+   eob = buffer+size;                     /* calculate end of buffer     */
+   fmt_logrec(buffer);                    /* seperate fields with \0's   */
+
+   /* Start out with date/time       */
+   cp1=buffer;
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   cpx=cp1;       /* save month name */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   i=atoi(cp1);   /* get day number  */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   cpy=cp1;       /* get timestamp   */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   j=atoi(cp1);   /* get year        */
+
+   /* minimal sanity check */
+   if (*(cpy+2)!=':' || *(cpy+5)!=':') return 0;
+   if (j<1990 || j>2100) return 0;
+   if (i<1 || i>31) return 0;
+
+   /* format date/time field         */
+   snprintf(log_rec.datetime,sizeof(log_rec.datetime),
+            "[%02d/%s/%4d:%s -0000]",i,cpx,j,cpy);
+
+   /* skip seconds... */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   while (*cp1!=0 && cp1<eob) cp1++;
+
+   /* get hostname */
+   if (*(cp1+1)==0)
+   {
+      /* Blank? That's weird.. */
+      strcpy(log_rec.hostname,"NONE");
+      if (debug_mode) fprintf(stderr, "Warning: Blank hostname found!\n");
+   }
+   else
+   {
+      /* good hostname */
+      strncpy(log_rec.hostname, ++cp1, MAXHOST);
+      log_rec.hostname[MAXHOST-1]=0;
+      while (*cp1!=0 && cp1<eob) cp1++;
+   }
+   while (*cp1==0 && cp1<eob) cp1++;
+
+   /* get filesize */
+   if (*cp1<'0'||*cp1>'9') log_rec.xfer_size=0;
+   else log_rec.xfer_size = strtoul(cp1,NULL,10);
+
+   /* URL stuff */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+   cpx=cp1;
+   /* get next field for later */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0 && cp1<eob) cp1++;
+
+   /* skip next two */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+
+   /* fabricate an appropriate request string based on direction */
+   if (*cp1=='i')
+      snprintf(log_rec.url,sizeof(log_rec.url),"\"POST %s\"",cpx);
+   else
+      snprintf(log_rec.url,sizeof(log_rec.url),"\"GET %s\"",cpx);
+
+   if (cp1<eob) cp1++;
+   if (cp1<eob) cp1++;
+   while (*cp1!=0 && cp1<eob) cp1++;
+   if (cp1<eob) cp1++;
+   cp2=log_rec.ident;count=MAXIDENT-1;
+   while (*cp1!=0 && cp1<eob && count) { *cp2++ = *cp1++; count--; }
+   *cp2='\0';
+
+   /* return appropriate response code */
+   log_rec.resp_code=(*(eob-2)=='i')?206:200;
+
+   return 1;
+}
+
+/*********************************************/
+/* PARSE_RECORD_CLF - CLF web log handler    */
+/*********************************************/
+
+int parse_record_clf(char *buffer)
+{
+   int size;
+   char *cp1, *cp2, *cpx, *eob, *eos;
+
+   size = strlen(buffer);                 /* get length of buffer        */
+   eob = buffer+size;                     /* calculate end of buffer     */
+   fmt_logrec(buffer);                    /* seperate fields with \0's   */
+
+   /* HOSTNAME */
+   cp1 = cpx = buffer; cp2=log_rec.hostname;
+   eos = (cp1+MAXHOST)-1;
+   if (eos >= eob) eos=eob-1;
+
+   while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_host);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   /* skip next field (ident) */
+   while ( (*cp1 != '\0') && (cp1 < eob) ) cp1++;
+   if (cp1 < eob) cp1++;
+
+   /* IDENT (authuser) field */
+   cpx = cp1;
+   cp2 = log_rec.ident;
+   eos = (cp1+MAXIDENT-1);
+   if (eos >= eob) eos=eob-1;
+
+   while ( (*cp1 != '[') && (cp1 < eos) ) /* remove embeded spaces */
+   {
+      if (*cp1=='\0') *cp1=' ';
+      *cp2++=*cp1++;
+   }
+   *cp2--='\0';
+
+   if (cp1 >= eob) return 0;
+
+   /* check if oversized username */
+   if (*cp1 != '[')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_user);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while ( (*cp1 != '[') && (cp1 < eob) ) cp1++;
+   }
+
+   /* strip trailing space(s) */
+   while (*cp2==' ') *cp2--='\0';
+
+   /* date/time string */
+   cpx = cp1;
+   cp2 = log_rec.datetime;
+   eos = (cp1+28);
+   if (eos >= eob) eos=eob-1;
+
+   while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_date);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   /* minimal sanity check on timestamp */
+   if ( (log_rec.datetime[0] != '[') ||
+        (log_rec.datetime[3] != '/') ||
+        (cp1 >= eob))  return 0;
+
+   /* HTTP request */
+   cpx = cp1;
+   cp2 = log_rec.url;
+   eos = (cp1+MAXURL-1);
+   if (eos >= eob) eos = eob-1;
+
+   while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_req);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   if ( (log_rec.url[0] != '"') ||
+        (cp1 >= eob) ) return 0;
+
+   /* Strip off HTTP version from URL */
+   if ( (cp2=strstr(log_rec.url,"HTTP"))!=NULL )
+   {
+      *cp2='\0';          /* Terminate string */
+      *(--cp2)='"';       /* change <sp> to " */
+   }
+
+   /* response code */
+   log_rec.resp_code = atoi(cp1);
+
+   /* xfer size */
+   while ( (*cp1 != '\0') && (cp1 < eob) ) cp1++;
+   if (cp1 < eob) cp1++;
+   if (*cp1<'0'||*cp1>'9') log_rec.xfer_size=0;
+   else log_rec.xfer_size = strtoul(cp1,NULL,10);
+
+   /* done with CLF record */
+   if (cp1>=eob) return 1;
+
+   while ( (*cp1 != '\0') && (*cp1 != '\n') && (cp1 < eob) ) cp1++;
+   if (cp1 < eob) cp1++;
+   /* get referrer if present */
+   cpx = cp1;
+   cp2 = log_rec.refer;
+   eos = (cp1+MAXREF-1);
+   if (eos >= eob) eos = eob-1;
+
+   while ( (*cp1 != '\0') && (*cp1 != '\n') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_ref);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   cpx = cp1;
+   cp2 = log_rec.agent;
+   eos = cp1+(MAXAGENT-1);
+   if (eos >= eob) eos = eob-1;
+
+   while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+
+   return 1;     /* maybe a valid record, return with TRUE */
+}
+
+/*********************************************/
+/* PARSE_RECORD_SQUID - squid log handler    */
+/*********************************************/
+
+int parse_record_squid(char *buffer)
+{
+   int size, slash_count=0;
+   time_t i;
+   char *cp1, *cp2, *cpx, *eob, *eos;
+
+   size = strlen(buffer);                 /* get length of buffer        */
+   eob = buffer+size;                     /* calculate end of buffer     */
+   fmt_logrec(buffer);                    /* seperate fields with \0's   */
+
+   /* date/time */
+   cp1=buffer;
+   i=atoi(cp1);                /* get timestamp */
+
+   /* format date/time field */
+   strftime(log_rec.datetime,sizeof(log_rec.datetime),
+            "[%d/%b/%Y:%H:%M:%S -0000]",localtime(&i));
+
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+
+   /* skip request size */
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+
+   /* HOSTNAME */
+   cpx = cp1; cp2=log_rec.hostname;
+   eos = (cp1+MAXHOST)-1;
+   if (eos >= eob) eos=eob-1;
+
+   while ((*cp1 != '\0') && (cp1 != eos)) *cp2++ = *cp1++;
+   *cp2='\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_host);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   /* skip cache status */
+   while (*cp1!=0 && cp1<eob && *cp1!='/') cp1++;
+   cp1++;
+
+   /* response code */
+   log_rec.resp_code = atoi(cp1);
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+
+   /* xfer size */
+   if (*cp1<'0'||*cp1>'9') log_rec.xfer_size=0;
+   else log_rec.xfer_size = strtoul(cp1,NULL,10);
+
+   while (*cp1!=0 && cp1<eob) cp1++;
+   while (*cp1==0) cp1++;
+
+   /* HTTP request type */
+   cpx = cp1;
+   cp2 = log_rec.url;
+   *cp2++ = '\"';
+   eos = (cp1+MAXURL-1);
+   if (eos >= eob) eos = eob-1;
+
+   while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if (*cp1 != '\0')
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_req);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   *cp2++ = ' ';
+
+   /* HTTP URL requested */
+   cpx = cp1;
+
+   if (trimsquid>0)
+   {
+      slash_count=trimsquid+2;
+      while ( (*cp1 != '\0') && (cp1 != eos) && slash_count)
+      {
+         *cp2++ = *cp1++;
+         if (*cp1 == '/') slash_count--;
+      }
+   }
+   else while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+   *cp2 = '\0';
+   if ((*cp1 != '\0' && trimsquid==0) || (trimsquid && slash_count) )
+   {
+      if (verbose)
+      {
+         fprintf(stderr,"%s",msg_big_req);
+         if (debug_mode) fprintf(stderr,": %s\n",cpx);
+         else fprintf(stderr,"\n");
+      }
+      while (*cp1 != '\0') cp1++;
+   }
+   if (cp1 < eob) cp1++;
+
+   *cp2++ = '\"';
+
+   /* IDENT (authuser) field */
+   cpx = cp1;
+   cp2 = log_rec.ident;
+   eos = (cp1+MAXIDENT-1);
+   if (eos >= eob) eos=eob-1;
+
+   while (*cp1 == ' ') cp1++; /* skip white space */
+
+   while ( (*cp1 != ' ' && *cp1!='\0') && (cp1 < eos) )  *cp2++=*cp1++;
+
+   *cp2--='\0';
+
+   if (cp1 >= eob) return 0;
+
+   /* strip trailing space(s) */
+   while (*cp2==' ') *cp2--='\0';
+
+   /* we have no interest in the remaining fields */
+   return 1;
+}
+
+/*********************************************/
+/* PARSE_RECORD_W3C - w3c log handler        */
+/*********************************************/
+
+/* field index structure */
+struct  field_index_struct
+{  
+   int date;       /* Date field index                */
+   int time;       /* Time field index                */
+   int ip;         /* IP field index                  */
+   int username;   /* Username field index            */
+   int method;     /* Method field index              */
+   int url;        /* URL field index                 */
+   int query;      /* Querystring field index         */
+   int status;     /* Status code field index         */
+   int size;       /* Size field index                */
+   int referer;    /* Referrer field index            */
+   int agent;      /* User agent field index          */
+   int fields;     /* Number of fields in this format */
+};
+
+/* field structure */
+struct  fields_struct
+{  
+   char *date;     /* Date field       */
+   char *time;     /* Time field       */
+   char *ip;       /* IP field         */
+   char *username; /* Username field   */
+   char *method;   /* Method field     */
+   char *url;      /* URL field        */
+   char *query;    /* Querystring      */
+   char *status;   /* Status code      */
+   char *size;     /* Size field       */
+   char *referer;  /* Referrer field   */
+   char *agent;    /* User agent field */
+};
+
+int parse_record_w3c(char *buffer)
+{
+   int size;
+   char *eob;
+   char *cp;
+   int index;
+   static struct field_index_struct field_index;
+   struct fields_struct fields;
+   struct tm gm_time, *local_time;
+   time_t timestamp;
+
+   memset(&gm_time, 0, sizeof(struct tm));
+   size = strlen(buffer);                 /* get length of buffer        */
+   eob = buffer + size;                   /* calculate end of buffer     */
+
+   /* remove line end markers, reduce eob accordingly */
+   cp = eob;
+   while(cp>buffer)
+   {
+      cp--;
+      if (*cp == '\r' || *cp=='\n')
+      {
+         *cp = '\0';
+         eob--;
+      }
+      else
+         break;
+   }
+
+   fmt_logrec(buffer);                    /* seperate fields with \0's   */
+
+   cp = buffer;
+
+   /* Check if the line is empty or a line suffers from the IIS 
+      Null-Character bug and abort parsing if found. */
+   if (*cp == '\0') return 0;
+
+   /* If it's a header line ignore it or parse the Fields header if found */
+   if (*cp == '#')
+   {
+      cp++;
+      if (!strcmp(cp, "Fields:"))
+      {
+         /* Reset the field indices */
+         memset(&field_index, 0, sizeof(struct field_index_struct));
+         while (*cp) cp++;
+         cp++;
+         index = 1;
+         while (cp < eob)
+         {
+            /* Set the field index */
+            if (!strcmp(cp, "date"))           field_index.date     = index;
+            if (!strcmp(cp, "time"))           field_index.time     = index;
+            if (!strcmp(cp, "c-ip"))           field_index.ip       = index;
+            if (!strcmp(cp, "cs-method"))      field_index.method   = index;
+            if (!strcmp(cp, "cs-uri-stem"))    field_index.url      = index;
+            if (!strcmp(cp, "cs-uri-query"))   field_index.query    = index;
+            if (!strcmp(cp, "sc-status"))      field_index.status   = index;
+            if (!strcmp(cp, "cs(Referer)"))    field_index.referer  = index;
+            if (!strcmp(cp, "sc-bytes"))       field_index.size     = index;
+            if (!strcmp(cp, "cs(User-Agent)")) field_index.agent    = index;
+            if (!strcmp(cp, "cs-username"))    field_index.username = index;
+            
+            /* Continue with the next field */
+            while (*cp) cp++;
+            cp++;
+            index++;
+         }
+         field_index.fields = index -1;
+      }
+
+      /* Return because this header line is completely parsed */
+      return 0;
+   }
+
+   /* A data line has been found */
+
+   /* Check if the number of entries in this line are conform to the
+      format specified in the header */
+   index = 1;
+   while (cp < eob)
+   {
+      while (*cp) cp++;
+      cp++;
+      index++;
+   }
+   if (index-1 != field_index.fields) return 0;
+   
+   /* Reset pointer */
+   cp = buffer;
+   
+   /* Reset the field pointers and begin parsing the data line */
+   memset(&fields, 0, sizeof(struct fields_struct));
+   index = 1;
+   while (cp < eob)
+   {
+      /* Set the field pointers */
+      if (index == field_index.date)     fields.date      = cp;
+      if (index == field_index.time)     fields.time      = cp;
+      if (index == field_index.ip)       fields.ip        = cp;
+      if (index == field_index.method)   fields.method    = cp;
+      if (index == field_index.url)      fields.url       = cp;
+      if (index == field_index.query)    fields.query     = cp;
+      if (index == field_index.status)   fields.status    = cp;
+      if (index == field_index.referer)  fields.referer   = cp;
+      if (index == field_index.size)     fields.size      = cp;
+      if (index == field_index.agent)    fields.agent     = cp;
+      if (index == field_index.username) fields.username  = cp;
+      
+      /* Continue with the next data field */
+      while (*cp) cp++;
+      cp++;
+      index++;
+   }
+   
+   /* Save URL */
+   if (fields.url)
+   {
+      cp = fields.url;
+      while (*cp) { if (*cp=='+') *cp=' '; cp++; }
+
+      /* If no HTTP Method, force to "NONE" */
+      if (fields.method && (fields.method[0]=='-'))
+         fields.method="NONE";
+
+      if (fields.query && (fields.query[0]!='-'))
+           snprintf(log_rec.url, MAXURL, "\"%s %s?%s\"",
+                    fields.method, fields.url, fields.query);
+      else snprintf(log_rec.url, MAXURL, "\"%s %s\"",
+                    fields.method, fields.url);
+   }
+   else return 0;
+
+   /* Save hostname */
+   if (fields.ip) strncpy(log_rec.hostname, fields.ip, MAXHOST - 1);
+      
+   /* Save response code */
+   if (fields.status) log_rec.resp_code = atoi(fields.status);
+   
+   /* Save referer */
+   if (fields.referer) strncpy(log_rec.refer, fields.referer, MAXREF - 1);
+   
+   /* Save transfer size */
+   if (fields.size) log_rec.xfer_size = strtoul(fields.size, NULL, 10);
+   
+   /* Save user agent */
+   if (fields.agent)
+   {
+      cp = fields.agent;
+      while (*cp) { if (*cp=='+') *cp=' '; cp++; }
+      strncpy(log_rec.agent, fields.agent, MAXAGENT - 1);
+   }
+   
+   /* Save auth username */
+   if (fields.username) strncpy(log_rec.ident, fields.username, MAXIDENT - 1);
+   
+   /* Parse date and time and save it */
+   if (fields.date)
+   {
+      gm_time.tm_year = atoi(fields.date);
+      if (gm_time.tm_year > 1900) gm_time.tm_year-=1900;
+      while ((fields.date[0] != '\0') && (fields.date[0] != '-')) fields.date++;
+      if (fields.date[0] == '\0') return 0;
+      fields.date++;
+      gm_time.tm_mon = atoi(fields.date) - 1;
+      while ((fields.date[0] != '\0') && (fields.date[0] != '-')) fields.date++;
+      if (fields.date[0] == '\0') return 0;
+      fields.date++;
+      gm_time.tm_mday = atoi(fields.date);
+   }
+   if (fields.time)
+   {
+      gm_time.tm_hour = atoi(fields.time);
+      while ((fields.time[0] != '\0') && (fields.time[0] != ':')) fields.time++;
+      if (fields.time[0] == '\0') return 0;
+      fields.time++;
+      gm_time.tm_min = atoi(fields.time);
+      while ((fields.time[0] != '\0') && (fields.time[0] != ':')) fields.time++;
+      if (fields.time[0] == '\0') return 0;
+      fields.time++;
+      gm_time.tm_sec = atoi(fields.time);
+   }
+   
+   /* Convert GMT to localtime */
+   gm_time.tm_isdst = -1;                              /* force dst check   */
+   timestamp = mktime(&gm_time);                       /* get time in sec   */
+#ifdef HAVE_ALTZONE
+   timestamp-=(gm_time.tm_isdst)?altzone:timezone;     /* solaris & friends */
+#else
+   timestamp = mktime(&gm_time)+gm_time.tm_gmtoff;     /* glibc systems     */
+#endif
+   local_time = localtime(&timestamp);                 /* update tm struct  */
+   strftime(log_rec.datetime, sizeof(log_rec.datetime),/* and format sting  */
+     "[%d/%b/%Y:%H:%M:%S -0000]", local_time);         /* for log_rec field */
+   return 1;
+}
diff --git a/parser.h b/parser.h
new file mode 100644 (file)
index 0000000..58da828
--- /dev/null
+++ b/parser.h
@@ -0,0 +1,6 @@
+#ifndef _PARSER_H
+#define _PARSER_H
+
+extern int  parse_record(char *);
+
+#endif  /* _PARSER_H */
diff --git a/preserve.c b/preserve.c
new file mode 100644 (file)
index 0000000..34f3533
--- /dev/null
@@ -0,0 +1,859 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <ctype.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#include "webalizer.h"                        /* main header              */
+#include "lang.h"
+#include "hashtab.h"
+#include "parser.h"
+#include "preserve.h"
+
+struct hist_rec hist[HISTSIZE];              /* history structure array   */
+
+/*********************************************/
+/* GET_HISTORY - load in history file        */
+/*********************************************/
+
+void get_history()
+{
+   int   i,n,numfields;
+   int   in_m,in_y;
+   int   mth, yr;
+   FILE  *hist_fp;
+   char  buffer[BUFSIZE];
+
+   /* try to open history file */
+   hist_fp=fopen(hist_fname,"r");
+
+   if (hist_fp)
+   {
+      if (verbose>1) printf("%s %s\n",msg_get_hist,hist_fname);
+      while ( fgets(buffer,BUFSIZE,hist_fp) != NULL )
+      {
+         if (buffer[0]=='#') { continue; } /* skip comments */
+
+         /* get record month/year */
+         sscanf(buffer,"%d %d",&in_m,&in_y);
+
+         /* check if valid numbers */
+         if ( (in_m<1 || in_m>12 || in_y<1970) )
+         {
+            if (verbose) fprintf(stderr,"%s (mth=%d)\n",msg_bad_hist,in_m);
+            continue;
+         }
+
+         /* populate if first time through */
+         if (hist[HISTSIZE-1].year==0) populate_history(in_m, in_y);
+
+         for (i=HISTSIZE-1;i>=0;i--)
+         {
+            if (in_m==hist[i].month && in_y==hist[i].year) break;
+            else
+            {
+               if ( (in_m>hist[i].month&&in_y==hist[i].year) ||
+                    (in_y>hist[i].year) )
+               {
+                  if (i>0)
+                  {
+                     n=(mth_idx(in_m,in_y)-mth_idx(hist[i].month,hist[i].year));
+                     while (n)
+                     {
+                        yr = hist[i].year;
+                        mth= hist[i].month+1;
+                        if (mth>12) { mth=1; yr++; }
+                        memcpy(&hist[0], &hist[1], sizeof(hist[0])*i);
+                        memset(&hist[i], 0, sizeof(struct hist_rec));
+                        hist[i].year=yr; hist[i].month=mth; n--;
+                    }
+                  }
+                  break;
+               }
+            }
+         }
+         if (i>=0)
+         {
+         /* month# year# requests files sites xfer firstday lastday */
+         numfields = sscanf(buffer,"%d %d %llu %llu %llu %lf %d %d %llu %llu",
+                       &hist[i].month,
+                       &hist[i].year,
+                       &hist[i].hit,
+                       &hist[i].files,
+                       &hist[i].site,
+                       &hist[i].xfer,
+                       &hist[i].fday,
+                       &hist[i].lday,
+                       &hist[i].page,
+                       &hist[i].visit);
+         }
+      }
+      fclose(hist_fp);
+   }
+   else if (verbose>1) printf("%s\n",msg_no_hist);
+}
+
+/*********************************************/
+/* PUT_HISTORY - write out history file      */
+/*********************************************/
+
+void put_history()
+{
+   int     i;
+   FILE    *hist_fp;
+   char    new_fname[MAXKVAL+4];
+   char    old_fname[MAXKVAL+4];
+   struct  stat hist_stat;
+   time_t  now;
+   char    timestamp[48];
+
+   /* generate 'new' filename */
+   sprintf(new_fname, "%s.new", hist_fname);
+
+   /* stat the file */
+   if ( !(lstat(new_fname, &hist_stat)) )
+   {
+      /* check if the file a symlink */
+      if ( S_ISLNK(hist_stat.st_mode) )
+      {
+         if (verbose)
+         fprintf(stderr,"%s %s (symlink)\n",msg_no_open,new_fname);
+         return;
+      }
+   }
+
+   /* Generate our timestamp */
+   now=time(NULL);
+   strftime(timestamp,sizeof(timestamp),"%d/%b/%Y %H:%M:%S",localtime(&now));
+
+   /* Open file for writing */
+   hist_fp = fopen(new_fname,"w");
+   if (hist_fp)
+   {
+      if (verbose>1) printf("%s\n",msg_put_hist);
+
+      /* write header */
+      fprintf(hist_fp,"# Webalizer V%s-%s History Data - %s (%d month)\n",
+              version, editlvl, timestamp, HISTSIZE);
+
+      for (i=HISTSIZE-1;i>=0;i--)
+      {
+         fprintf(hist_fp,"%d %d %llu %llu %llu %.0f %d %d %llu %llu\n",
+                         hist[i].month,
+                         hist[i].year,
+                         hist[i].hit,
+                         hist[i].files,
+                         hist[i].site,
+                         hist[i].xfer,
+                         hist[i].fday,
+                         hist[i].lday,
+                         hist[i].page,
+                         hist[i].visit);
+      }
+      /* Done, close file */
+      fclose(hist_fp);
+
+      /* if time-warp error detected, save old */
+      if (hist_gap)
+      {
+         sprintf(old_fname, "%s.sav", hist_fname);
+         if ((rename(hist_fname,old_fname)==-1)&&(errno!=ENOENT)&&verbose)
+            fprintf(stderr,"Failed renaming %s to %s: %s\n",
+               hist_fname,old_fname,strerror(errno));
+      }
+
+      /* now rename the 'new' file to real name */
+      if ((rename(new_fname,hist_fname) == -1) && verbose)
+         fprintf(stderr,"Failed renaming %s to %s\n",new_fname,hist_fname);
+   }
+   else
+      if (verbose)
+      fprintf(stderr,"%s %s\n",msg_hist_err,new_fname);
+}
+
+/*********************************************/
+/* POPULATE_HISTORY - populate with dates    */
+/*********************************************/
+
+void populate_history(int month, int year)
+{
+   int   i;
+   int   mth=month;
+   int   yr =year;
+
+   if (hist[HISTSIZE-1].year==0)
+   {
+      for (i=HISTSIZE-1;i>=0;i--)
+      {
+         hist[i].year=yr; hist[i].month=mth--;
+         if (mth==0) { yr--; mth=12; }
+      }
+   }
+}
+
+/*********************************************/
+/* UPDATE_HISTORY - update with cur totals   */
+/*********************************************/
+
+void update_history()
+{
+   int   i,n;
+   int   mth,yr;
+
+   /* populate if first time through */
+   if (hist[HISTSIZE-1].year==0) populate_history(cur_month,cur_year);
+
+   /* we need to figure out where to put in history */
+   for (i=HISTSIZE-1;i>=0;i--)
+   {
+      if (cur_month==hist[i].month && cur_year==hist[i].year) break;
+      else
+      {
+         if ((cur_month>hist[i].month&&cur_year==hist[i].year) ||
+             (cur_year>hist[i].year))
+         {
+            if (i>0)
+            {
+               n=(mth_idx(cur_month,cur_year) -
+                  mth_idx(hist[i].month,hist[i].year));
+
+               if (n>2)
+               {
+                  if (verbose)
+                     fprintf(stderr,"Warning! %d month gap detected! "   \
+                             "(%d/%d to %d/%d)\n", n, hist[i].month,
+                             hist[i].year, cur_month, cur_year);
+                  if (n>11) hist_gap=1;  /* year or more? */
+               }
+
+               while (n)
+               {
+                  yr = hist[i].year;
+                  mth= hist[i].month+1;
+                  if (mth>12) { mth=1; yr++; }
+                  memcpy(&hist[0],&hist[1],sizeof(hist[0])*i);
+                  memset(&hist[i], 0, sizeof(struct hist_rec));
+                  hist[i].year=yr; hist[i].month=mth; n--;
+               }
+            }
+            break;
+         }
+      }
+   }
+   if (i>=0)
+   {
+      hist[i].month = cur_month;
+      hist[i].year  = cur_year;
+      hist[i].hit   = t_hit;
+      hist[i].files = t_file;
+      hist[i].page  = t_page;
+      hist[i].visit = t_visit;
+      hist[i].site  = t_site;
+      hist[i].xfer  = t_xfer/1024;
+      hist[i].fday  = f_day;
+      hist[i].lday  = l_day;
+   }
+}
+
+/*********************************************/
+/* SAVE_STATE - save internal data structs   */
+/*********************************************/
+
+int save_state()
+{
+   HNODEPTR hptr;
+   UNODEPTR uptr;
+   RNODEPTR rptr;
+   ANODEPTR aptr;
+   SNODEPTR sptr;
+   INODEPTR iptr;
+
+   FILE *fp;
+   int  i;
+   struct stat state_stat;
+
+   char buffer[BUFSIZE];
+   char new_fname[MAXKVAL+4];
+
+   /* generate 'new' filename */
+   sprintf(new_fname, "%s.new", state_fname);
+
+   /* stat the file */
+   if ( !(lstat(new_fname, &state_stat)) )
+   {
+      /* check if the file a symlink */
+      if ( S_ISLNK(state_stat.st_mode) )
+      {
+         if (verbose)
+         fprintf(stderr,"%s %s (symlink)\n",msg_no_open,new_fname);
+         return(EBADF);
+      }
+   }
+
+   /* Open file for writing */
+   fp=fopen(new_fname,"w");
+   if (fp==NULL) return 1;
+
+   /* Saving current run data... */
+   if (verbose>1)
+   {
+      sprintf(buffer,"%02d/%02d/%04d %02d:%02d:%02d",
+       cur_month,cur_day,cur_year,cur_hour,cur_min,cur_sec);
+      printf("%s [%s]\n",msg_put_data,buffer);
+   }
+
+   /* first, save the easy stuff */
+   /* Header record */
+   snprintf(buffer,sizeof(buffer),
+     "# Webalizer V%s-%s Incremental Data - %02d/%02d/%04d %02d:%02d:%02d\n",
+      version,editlvl,cur_month,cur_day,cur_year,cur_hour,cur_min,cur_sec);
+   if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+
+   /* Current date/time          */
+   sprintf(buffer,"%d %d %d %d %d %d\n",
+        cur_year, cur_month, cur_day, cur_hour, cur_min, cur_sec);
+   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",
+        t_hit, t_file, t_site, t_url,
+        t_ref, t_agent, t_xfer, t_page, t_visit, t_user);
+   if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+
+   /* Daily totals for sites, urls, etc... */
+   sprintf(buffer,"%llu %llu %llu %d %d\n",
+        dt_site, ht_hit, mh_hit, f_day, l_day);
+   if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+
+   /* 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]);
+      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]);
+      if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+   }
+
+   /* Response codes */
+   for (i=0;i<TOTAL_RC;i++)
+   {
+      sprintf(buffer,"%llu\n",response[i].count);
+      if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+   }
+
+   /* now we need to save our linked lists */
+   /* URL list */
+   if (fputs("# -urls- \n",fp)==EOF) return 1;  /* error exit */
+   for (i=0;i<MAXHASH;i++)
+   {
+      uptr=um_htab[i];
+      while (uptr!=NULL)
+      {
+         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n",
+                  uptr->string, uptr->flag, uptr->count, uptr->files,
+                  uptr->xfer, uptr->entry, uptr->exit);
+         if (fputs(buffer,fp)==EOF) return 1;
+         uptr=uptr->next;
+      }
+   }
+   if (fputs("# End Of Table - urls\n",fp)==EOF) return 1;  /* error exit */
+
+   /* daily hostname list */
+   if (fputs("# -sites- (monthly)\n",fp)==EOF) return 1;  /* error exit */
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      hptr=sm_htab[i];
+      while (hptr!=NULL)
+      {
+         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n%s\n",
+                  hptr->string, hptr->flag, hptr->count, hptr->files,
+                  hptr->xfer, hptr->visit, hptr->tstamp,
+                  (hptr->lasturl==blank_str)?"-":hptr->lasturl);
+         if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+         hptr=hptr->next;
+      }
+   }
+   if (fputs("# End Of Table - sites (monthly)\n",fp)==EOF) return 1;
+
+   /* hourly hostname list */
+   if (fputs("# -sites- (daily)\n",fp)==EOF) return 1;  /* error exit */
+   for (i=0;i<MAXHASH;i++)
+   {
+      hptr=sd_htab[i];
+      while (hptr!=NULL)
+      {
+         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n%s\n",
+                  hptr->string, hptr->flag, hptr->count, hptr->files,
+                  hptr->xfer, hptr->visit, hptr->tstamp,
+                  (hptr->lasturl==blank_str)?"-":hptr->lasturl);
+         if (fputs(buffer,fp)==EOF) return 1;
+         hptr=hptr->next;
+      }
+   }
+   if (fputs("# End Of Table - sites (daily)\n",fp)==EOF) return 1;
+
+   /* Referrer list */
+   if (fputs("# -referrers- \n",fp)==EOF) return 1;  /* error exit */
+   if (t_ref != 0)
+   {
+      for (i=0;i<MAXHASH;i++)
+      {
+         rptr=rm_htab[i];
+         while (rptr!=NULL)
+         {
+            snprintf(buffer,sizeof(buffer),"%s\n%d %llu\n",
+                     rptr->string, rptr->flag, rptr->count);
+            if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+            rptr=rptr->next;
+         }
+      }
+   }
+   if (fputs("# End Of Table - referrers\n",fp)==EOF) return 1;
+
+   /* User agent list */
+   if (fputs("# -agents- \n",fp)==EOF) return 1;  /* error exit */
+   if (t_agent != 0)
+   {
+      for (i=0;i<MAXHASH;i++)
+      {
+         aptr=am_htab[i];
+         while (aptr!=NULL)
+         {
+            snprintf(buffer,sizeof(buffer),"%s\n%d %llu\n",
+                     aptr->string, aptr->flag, aptr->count);
+            if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+            aptr=aptr->next;
+         }
+      }
+   }
+   if (fputs("# End Of Table - agents\n",fp)==EOF) return 1;
+
+   /* Search String list */
+   if (fputs("# -search strings- \n",fp)==EOF) return 1;  /* error exit */
+   for (i=0;i<MAXHASH;i++)
+   {
+      sptr=sr_htab[i];
+      while (sptr!=NULL)
+      {
+         snprintf(buffer,sizeof(buffer),"%s\n%llu\n",
+                  sptr->string,sptr->count);
+         if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+         sptr=sptr->next;
+      }
+   }
+   if (fputs("# End Of Table - search strings\n",fp)==EOF) return 1;
+
+   /* username list */
+   if (fputs("# -usernames- \n",fp)==EOF) return 1;  /* error exit */
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      iptr=im_htab[i];
+      while (iptr!=NULL)
+      {
+         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n",
+                  iptr->string, iptr->flag, iptr->count, iptr->files,
+              iptr->xfer, iptr->visit, iptr->tstamp);
+         if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+         iptr=iptr->next;
+      }
+   }
+   if (fputs("# End Of Table - usernames\n",fp)==EOF) return 1;
+
+   /* Done, close file */
+   fclose(fp);
+
+   /* now rename the 'new' file to real name */
+   if ((rename(new_fname,state_fname) == -1) && verbose)
+   {
+      fprintf(stderr,"Failed renaming %s to %s\n",new_fname,state_fname);
+      return 1;         /* Failed, return with error code                */
+   }
+   return 0;            /* successful, return with good return code      */
+}
+
+/*********************************************/
+/* RESTORE_STATE - reload internal run data  */
+/*********************************************/
+
+int restore_state()
+{
+   FILE *fp;
+   int  i;
+   struct hnode t_hnode;         /* Temporary hash nodes */
+   struct unode t_unode;
+   struct rnode t_rnode;
+   struct anode t_anode;
+   struct snode t_snode;
+   struct inode t_inode;
+
+   char         buffer[BUFSIZE];
+   char         tmp_buf[BUFSIZE];
+
+   u_int64_t    ul_bogus=0;
+
+   /* if ignoring, just return */
+   if (ignore_state) return 0;
+
+   /* try to open state file */
+   fp=fopen(state_fname,"r");
+   if (fp==NULL)
+   {
+      /* Previous run data not found... */
+      if (verbose>1) printf("%s\n",msg_no_data);
+      return 0;   /* return with ok code */
+   }
+
+   /* Reading previous run data... */
+   if (verbose>1) printf("%s %s\n",msg_get_data,state_fname);
+
+   /* get easy stuff */
+   sprintf(tmp_buf,"# Webalizer V%s    ",version);
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)                 /* Header record */
+   {
+      if (strncmp(buffer,tmp_buf,16))
+      {
+         /* Kludge to allow 2.01 files also */
+         sprintf(tmp_buf,"# Webalizer V2.01-1");
+         if (strncmp(buffer,tmp_buf,19)) return 99; /* bad magic? */
+      }
+   }
+   else return 1;   /* error exit */
+
+   /* Get current timestamp */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      sscanf(buffer,"%d %d %d %d %d %d",
+       &cur_year, &cur_month, &cur_day,
+       &cur_hour, &cur_min, &cur_sec);
+   } else return 2;  /* error exit */
+
+   /* calculate current timestamp (seconds since epoch) */
+   cur_tstamp=((jdate(cur_day,cur_month,cur_year)-epoch)*86400)+
+                     (cur_hour*3600)+(cur_min*60)+cur_sec;
+
+   /* Get monthly totals */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      sscanf(buffer,"%llu %llu %llu %llu %llu %llu %lf %llu %llu %llu",
+       &t_hit, &t_file, &t_site, &t_url,
+       &t_ref, &t_agent, &t_xfer, &t_page, &t_visit, &t_user);
+   } else return 3;  /* error exit */
+     
+   /* Get daily totals */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      sscanf(buffer,"%llu %llu %llu %d %d",
+       &dt_site, &ht_hit, &mh_hit, &f_day, &l_day);
+   } else return 4;  /* error exit */
+
+   /* get daily totals */
+   for (i=0;i<31;i++)
+   {
+      if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+      {
+         sscanf(buffer,"%llu %llu %lf %llu %llu %llu",
+          &tm_hit[i],&tm_file[i],&tm_xfer[i],&tm_site[i],&tm_page[i],
+          &tm_visit[i]);
+      } else return 5;  /* error exit */
+   }
+
+   /* get hourly totals */
+   for (i=0;i<24;i++)
+   {
+      if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+      {
+         sscanf(buffer,"%llu %llu %lf %llu",
+          &th_hit[i],&th_file[i],&th_xfer[i],&th_page[i]);
+      } else return 6;  /* error exit */
+   }
+
+   /* get response code totals */
+   for (i=0;i<TOTAL_RC;i++)
+   {
+      if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+         sscanf(buffer,"%llu",&response[i].count);
+      else return 7;  /* error exit */
+   }
+
+   /* Kludge for V2.01-06 TOTAL_RC off by one bug */
+   if (!strncmp(buffer,"# -urls- ",9)) response[TOTAL_RC-1].count=0;
+   else
+   {
+      /* now do hash tables */
+
+      /* url table */
+      if ((fgets(buffer,BUFSIZE,fp)) != NULL)            /* Table header */
+      { if (strncmp(buffer,"# -urls- ",9)) return 10; }  /* (url)        */
+      else return 10;   /* error exit */
+   }
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXURLH);
+      tmp_buf[strlen(tmp_buf)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 10;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 10;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
+         &t_unode.flag,&t_unode.count,
+         &t_unode.files, &t_unode.xfer,
+         &t_unode.entry, &t_unode.exit);
+
+      /* 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))
+      {
+         if (verbose)
+         /* Error adding URL node, skipping ... */
+         fprintf(stderr,"%s %s\n", msg_nomem_u, t_unode.string);
+      }
+   }
+
+   /* monthly sites table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -sites- ",10)) return 8; }    /* (monthly)    */
+   else return 8;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      /* Check for end of table */
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXHOST);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 8;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 8;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
+         &t_hnode.flag,&t_hnode.count,
+         &t_hnode.files, &t_hnode.xfer,
+         &t_hnode.visit, &t_hnode.tstamp);
+
+      /* get last url */
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 8;  /* error exit */
+      if (buffer[0]=='-') t_hnode.lasturl=blank_str;
+      else
+      {
+         buffer[strlen(buffer)-1]=0;
+         t_hnode.lasturl=find_url(buffer);
+      }
+
+      /* 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.visit+1,t_hnode.tstamp,t_hnode.lasturl,sm_htab))
+      {
+         /* Error adding host node (monthly), skipping .... */
+         if (verbose) fprintf(stderr,"%s %s\n",msg_nomem_mh, t_hnode.string);
+      }
+   }
+
+   /* Daily sites table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -sites- ",10)) return 9; }    /* (daily)      */
+   else return 9;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      /* Check for end of table */
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXHOST);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 9;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 9;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
+          &t_hnode.flag,&t_hnode.count,
+          &t_hnode.files, &t_hnode.xfer,
+          &t_hnode.visit, &t_hnode.tstamp);
+
+      /* get last url */
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 9;  /* error exit */
+      if (buffer[0]=='-') t_hnode.lasturl=blank_str;
+      else
+      {
+         buffer[strlen(buffer)-1]=0;
+         t_hnode.lasturl=find_url(buffer);
+      }
+
+      /* 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.visit+1,t_hnode.tstamp,t_hnode.lasturl,sd_htab))
+      {
+         /* Error adding host node (daily), skipping .... */
+         if (verbose) fprintf(stderr,"%s %s\n",msg_nomem_dh, t_hnode.string);
+      }
+   }
+
+   /* Referrers table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -referrers- ",14)) return 11; } /* (referrers)*/
+   else return 11;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXREFH);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 11;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 11;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu",&t_rnode.flag,&t_rnode.count);
+
+      /* insert node */
+      if (put_rnode(tmp_buf,t_rnode.flag,
+         t_rnode.count, &ul_bogus, rm_htab))
+      {
+         if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_r, log_rec.refer);
+      }
+   }
+
+   /* Agents table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -agents- ",11)) return 12; } /* (agents)*/
+   else return 12;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXAGENT);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 12;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 12;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu",&t_anode.flag,&t_anode.count);
+
+      /* insert node */
+      if (put_anode(tmp_buf,t_anode.flag,t_anode.count,
+         &ul_bogus,am_htab))
+      {
+         if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_a, log_rec.agent);
+      }
+   }
+
+   /* Search Strings table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -search string",16)) return 13; }  /* (search)*/
+   else return 13;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXSRCH);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 13;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 13;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%llu",&t_snode.count);
+
+      /* insert node */
+      if (put_snode(tmp_buf,t_snode.count,sr_htab))
+      {
+         if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_sc, t_snode.string);
+      }
+   }
+
+   /* usernames table */
+   if ((fgets(buffer,BUFSIZE,fp)) != NULL)               /* Table header */
+   { if (strncmp(buffer,"# -usernames- ",10)) return 14; }
+   else return 14;   /* error exit */
+
+   while ((fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      /* Check for end of table */
+      if (!strncmp(buffer,"# End Of Table ",15)) break;
+      strncpy(tmp_buf,buffer,MAXIDENT);
+      tmp_buf[strlen(buffer)-1]=0;
+
+      if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 14;  /* error exit */
+      if (!isdigit((unsigned char)buffer[0])) return 14;  /* error exit */
+
+      /* load temporary node data */
+      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
+         &t_inode.flag,&t_inode.count,
+         &t_inode.files, &t_inode.xfer,
+         &t_inode.visit, &t_inode.tstamp);
+
+      /* 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.visit+1,t_inode.tstamp,im_htab))
+      {
+         if (verbose)
+         /* Error adding username node, skipping .... */
+         fprintf(stderr,"%s %s\n",msg_nomem_i, t_inode.string);
+      }
+   }
+
+   fclose(fp);
+   check_dup = 1;              /* enable duplicate checking */
+   return 0;                   /* return with ok code       */
+}
diff --git a/preserve.h b/preserve.h
new file mode 100644 (file)
index 0000000..cfa1519
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef _PRESERVE_H
+#define _PRESERVE_H
+
+#define mth_idx(m,y) (m+((y-1970)*12))
+
+extern void    get_history();                 /* load history file        */
+extern void    put_history();                 /* save history file        */
+extern void    populate_history(int, int);    /* populate history w/dates */
+extern void    update_history();              /* update w/current totals  */
+extern int     save_state();                  /* save run state           */
+extern int     restore_state();               /* restore run state        */
+
+/* history record struct */
+struct hist_rec {       int   year;           /* year                     */
+                        int   month;          /* month                    */
+                        int   fday;           /* first day w/data         */
+                        int   lday;           /* last day w/data          */
+                  u_int64_t   hit;            /* hits for month           */
+                  u_int64_t   files;          /* files for month          */
+                  u_int64_t   site;           /* sites for month          */
+                  u_int64_t   page;           /* pages for month          */
+                  u_int64_t   visit;          /* visits for month         */
+                     double   xfer;           /* xfer amt for month       */
+                };
+
+extern struct hist_rec hist[HISTSIZE];        /* declare our hist array   */
+
+#endif  /* _PRESERVE_H */
diff --git a/sample.conf b/sample.conf
new file mode 100644 (file)
index 0000000..f5a3c68
--- /dev/null
@@ -0,0 +1,779 @@
+#
+# Sample Webalizer configuration file
+# Copyright 1997-2011 by Bradford L. Barrett
+#
+# Distributed under the GNU General Public License.  See the
+# files "Copyright" and "COPYING" provided with the webalizer
+# distribution for additional information.
+#
+# This is a sample configuration file for the Webalizer (ver 2.20)
+# Lines starting with pound signs '#' are comment lines and are
+# ignored.  Blank lines are skipped as well.  Other lines are considered
+# as configuration lines, and have the form "ConfigOption  Value" where
+# ConfigOption is a valid configuration keyword, and Value is the value
+# to assign that configuration option.  Invalid keyword/values are
+# ignored, with appropriate warnings being displayed.  There must be
+# at least one space or tab between the keyword and its value.
+#
+# As of version 0.98, The Webalizer will look for a 'default' configuration
+# file named "webalizer.conf" in the current directory, and if not found
+# there, will look for "/etc/webalizer.conf".
+
+
+# LogFile defines the web server log file to use.  If not specified
+# here or on on the command line, input will default to STDIN.  If
+# the log filename ends in '.gz' (a gzip compressed file), or '.bz2'
+# (bzip2 compressed file), it will be decompressed on the fly as it
+# is being read.
+
+#LogFile        /var/lib/httpd/logs/access_log
+
+# LogType defines the log type being processed.  Normally, the Webalizer
+# expects a CLF or Combined web server log as input.  Using this option,
+# you can process ftp logs (xferlog as produced by wu-ftp and others),
+# Squid native logs or W3C extended format web logs. Values can be 'clf',
+# 'ftp', 'squid' or 'w3c'.  The default is 'clf'.
+
+#LogType       clf
+
+# OutputDir is where you want to put the output files.  This should
+# should be a full path name, however relative ones might work as well.
+# If no output directory is specified, the current directory will be used.
+
+#OutputDir      /var/lib/httpd/htdocs/usage
+
+# HistoryName allows you to specify the name of the history file produced
+# by the Webalizer.  The history file keeps the data for previous months,
+# and is used for generating the main HTML page (index.html). The default
+# is a file named "webalizer.hist", stored in the output directory being
+# used.  The name can include a path, which will be relative to the output
+# directory unless absolute (starts with a leading '/').
+
+#HistoryName   webalizer.hist
+
+# Incremental processing allows multiple partial log files to be used
+# instead of one huge one.  Useful for large sites that have to rotate
+# their log files more than once a month.  The Webalizer will save its
+# internal state before exiting, and restore it the next time run, in
+# order to continue processing where it left off.  This mode also causes
+# The Webalizer to scan for and ignore duplicate records (records already
+# processed by a previous run).  See the README file for additional
+# information.  The value may be 'yes' or 'no', with a default of 'no'.
+# The file 'webalizer.current' is used to store the current state data,
+# and is located in the output directory of the program (unless changed
+# with the IncrementalName option below).  Please read at least the section
+# on Incremental processing in the README file before you enable this option.
+
+#Incremental   no
+
+# IncrementalName allows you to specify the filename for saving the
+# incremental data in.  It is similar to the HistoryName option where the
+# name is relative to the specified output directory, unless an absolute
+# filename is specified.  The default is a file named "webalizer.current"
+# kept in the normal output directory.  If you don't specify "Incremental"
+# as 'yes' then this option has no meaning.
+
+#IncrementalName       webalizer.current
+
+# ReportTitle is the text to display as the title.  The hostname
+# (unless blank) is appended to the end of this string (seperated with
+# a space) to generate the final full title string.
+# Default is (for english) "Usage Statistics for".
+
+#ReportTitle    Usage Statistics for
+
+# HostName defines the hostname for the report.  This is used in
+# the title, and is prepended to the URL table items.  This allows
+# clicking on URLs in the report to go to the proper location in
+# the event you are running the report on a 'virtual' web server,
+# or for a server different than the one the report resides on.
+# If not specified here, or on the command line, webalizer will
+# try to get the hostname via a uname system call.  If that fails,
+# it will default to "localhost".
+
+#HostName      www.webalizer.org
+
+# HTMLExtension allows you to specify the filename extension to use
+# for generated HTML pages.  Normally, this defaults to "html", but
+# can be changed for sites who need it (like for PHP embeded pages).
+
+#HTMLExtension  html
+
+# PageType lets you tell the Webalizer what types of URLs you
+# consider a 'page'.  Most people consider html and cgi documents
+# as pages, while not images and audio files.  If no types are
+# specified, defaults will be used ('htm*', 'cgi' and HTMLExtension
+# if different for web logs, 'txt' for ftp logs).
+
+PageType       htm*
+PageType       cgi
+#PageType      phtml
+#PageType      php3
+#PageType      pl
+
+# PagePrefix allows all requests with a specified prefix to be
+# considered as 'pages'. If you want everything under /documents
+# to be treated as pages no matter what their extension is. Also
+# useful if you have cgi-scripts with PATH_INFO.
+
+#PagePrefix    /documents
+#PagePrefix    /mycgi/parameters
+
+# OmitPage lets you tell the Webalizer that certain URLs do not
+# contain any pages.  No URL matching an OmitPage value will be
+# counted as a page, even if it matches a PageType above or has
+# no extension (e.g., a directory).  They will still be counted
+# as a hit.
+
+#OmitPage      /render
+
+# UseHTTPS should be used if the analysis is being run on a
+# secure server, and links to urls should use 'https://' instead
+# of the default 'http://'.  If you need this, set it to 'yes'.
+# Default is 'no'.  This only changes the behaviour of the 'Top
+# URLs' table.
+
+#UseHTTPS       no
+
+# HTAccess allows the generation of a default .htaccess file in the
+# output directory.  If enabled, a default .htaccess file will be
+# created (with a single "DirectoryIndex" directive), unless one
+# already exists.  Values may be 'yes' or 'no', with 'no'
+# being the default (don't write .htaccess files).
+
+#HTAccess      no
+
+# StripCGI determines if URL CGI variables should be striped or not.
+# Historically, the Webalizer stripped all CGI variables from the end
+# of URLs to improve accuracy.  Some sites may prefer to keep the CGI
+# variables in place, particularly those with highly dynamic pages.
+# Values may be 'yes' or 'no', with the default being 'yes'.
+
+#StripCGI      yes
+
+# The TrimSquidURL option only has effect on squid type log files.
+# When analyzing a squid log, it is usually desirable to have less
+# granularity on the URLs.  TrimSquidURL = n where n is a number > 0
+# causes all URLs to be truncated after the nth '/' after the http://
+# portion.  Setting TrimSquidURL to one (1) will cause all URLs to be
+# summarized by domain only.  The default is zero (0), which disables
+# any such truncation and preserve the URLs as they are in the log.
+
+# TrimSquidURL 0
+
+# DNSCache specifies the DNS cache filename to use for reverse DNS lookups.
+# This file must be specified if you wish to perform name lookups on any IP
+# addresses found in the log file.  If an absolute path is not given as
+# part of the filename (ie: starts with a leading '/'), then the name is
+# relative to the default output directory.  See the DNS.README file for
+# additional information.
+
+#DNSCache      dns_cache.db
+
+# DNSChildren allows you to specify how many "children" processes are
+# run to perform DNS lookups to create or update the DNS cache file.
+# If a number is specified, the DNS cache file will be created/updated
+# each time the Webalizer is run, immediately prior to normal processing,
+# by running the specified number of "children" processes to perform
+# DNS lookups.  If used, the DNS cache filename MUST be specified as
+# well.  The default value is zero (0), which disables DNS cache file
+# creation/updates at run time.  The number of children processes to
+# run may be anywhere from 1 to 100, however a large number may effect
+# normal system operations.  Reasonable values should be between 5 and
+# 20.  See the DNS.README file for additional information.
+
+#DNSChildren   0
+
+# CacheIPs allows unresolved IP addresses to be cached in the DNS
+# database.  Normally, only resolved addresses are saved.  At some
+# sites, particularly those with a large number of unresolvable IP
+# addresses visiting, it may be useful to enable this feature so
+# those addresses are not constantly looked up each time the program
+# is run.  Values can be 'yes' or 'no', with 'no' being the default.
+
+#CacheIPs      no
+
+# CacheTTL specifies the time to live (TTL) value for cached DNS
+# entries, in days.  This value may be anywhere between 1 and 100
+# with the default being 7 days (1 week).
+
+#CacheTTL      7
+
+# The GeoDB option enables or disabled the use of the native
+# Webalizer GeoDB geolocation services.  This is the preferred
+# geolocation option.  Values may be 'yes' or 'no', with 'no'
+# being the default.
+
+#GeoDB         no
+
+# GeoDBDatabase specifies an alternate database to use.  The
+# default database is /usr/share/GeoDB/GeoDB.dat (however the
+# path may be changed at compile time; use the -vV command
+# line option to determine where).  If a different database is
+# to be used, it may be specified here.  The name is relative
+# to the output directory being used unless an absolute name
+# (ie: starts with a leading '/') is specified.
+
+#GeoDBDatabase /usr/share/GeoDB/GeoDB.dat
+
+# The GeoIP option enables or disables the use of geolocation
+# services provided by the GeoIP library (http://www.maxmind.com),
+# if available.  Values may be 'yes' or 'no, with 'no' being the
+# default.  Note: if GeoDB is enabled, then this option will have
+# no effect (GeoDB will be used regardless of this setting).
+
+#GeoIP         no
+
+# GeoIPDatabase specifies an alternate database filename to use by the
+# GeoIP library.  If an absolute path is not given as part of the name
+# (ie: starts with a leading '/'), then the name is relative to the
+# default output directory. This option should not normally be needed.
+
+#GeoIPDatabase /usr/share/GeoIP/GeoIP.dat
+
+# HTMLPre defines HTML code to insert at the very beginning of the
+# file.  Default is the DOCTYPE line shown below.  Max line length
+# is 80 characters, so use multiple HTMLPre lines if you need more.
+
+#HTMLPre <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+# HTMLHead defines HTML code to insert within the <HEAD></HEAD>
+# block, immediately after the <TITLE> line.  Maximum line length
+# is 80 characters, so use multiple lines if needed.
+
+#HTMLHead <META NAME="author" CONTENT="The Webalizer">
+#HTMLHead <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+
+# HTMLBody defined the HTML code to be inserted, starting with the
+# <BODY> tag.  If not specified, the default is shown below.  If
+# used, you MUST include your own <BODY> tag as the first line.
+# Maximum line length is 80 char, use multiple lines if needed.
+
+#HTMLBody <BODY BGCOLOR="#E8E8E8" TEXT="#000000" LINK="#0000FF" VLINK="#FF0000">
+
+# HTMLPost defines the HTML code to insert immediately before the
+# first <HR> on the document, which is just after the title and
+# "summary period"-"Generated on:" lines.  If anything, this should
+# be used to clean up in case an image was inserted with HTMLBody.
+# As with HTMLHead, you can define as many of these as you want and
+# they will be inserted in the output stream in order of apperance.
+# Max string size is 80 characters.  Use multiple lines if you need to.
+
+#HTMLPost      <BR CLEAR="all">
+
+# HTMLTail defines the HTML code to insert at the bottom of each
+# HTML document, usually to include a link back to your home
+# page or insert a small graphic.  It is inserted as a table
+# data element (ie: <TD> your code here </TD>) and is right
+# alligned with the page.  Max string size is 80 characters.
+
+#HTMLTail <IMG SRC="msfree.png" ALT="100% Micro$oft free!">
+
+# HTMLEnd defines the HTML code to add at the very end of the
+# generated files.  It defaults to what is shown below.  If
+# used, you MUST specify the </BODY> and </HTML> closing tags
+# as the last lines.  Max string length is 80 characters.
+
+#HTMLEnd </BODY></HTML>
+
+# The LinkReferrer option determines if entries in the referrer table
+# should be plain text or a HTML link to the referrer.  Values can be
+# either 'yes' or 'no', with 'no' being the default.
+
+#LinkReferrer  no
+
+# The Quiet option suppresses output messages... Useful when run
+# as a cron job to prevent bogus e-mails.  Values can be either
+# "yes" or "no".  Default is "no".  Note: this does not suppress
+# warnings and errors (which are printed to stderr).
+
+#Quiet         no
+
+# ReallyQuiet will supress all messages including errors and
+# warnings.  Values can be 'yes' or 'no' with 'no' being the
+# default.  If 'yes' is used here, it cannot be overriden from
+# the command line, so use with caution.  A value of 'no' has
+# no effect.
+
+#ReallyQuiet   no
+
+# TimeMe allows you to force the display of timing information
+# at the end of processing.  A value of 'yes' will force the
+# timing information to be displayed.  A value of 'no' has no
+# effect.
+
+#TimeMe                no
+
+# GMTTime allows reports to show GMT (UTC) time instead of local
+# time.  Default is to display the time the report was generated
+# in the timezone of the local machine, such as EDT or PST.  This
+# keyword allows you to have times displayed in UTC instead.  Use
+# only if you really have a good reason, since it will probably
+# screw up the reporting periods by however many hours your local
+# time zone is off of GMT.
+
+#GMTTime       no
+
+# Debug prints additional information for error messages.  This
+# will cause webalizer to dump bad records/fields instead of just
+# telling you it found a bad one.   As usual, the value can be
+# either "yes" or "no".  The default is "no".  It shouldn't be
+# needed unless you start getting a lot of Warning or Error
+# messages and want to see why.  (Note: warning and error messages
+# are printed to stderr, not stdout like normal messages).
+
+#Debug         no
+
+# FoldSeqErr forces the Webalizer to ignore sequence errors.
+# This is useful for Netscape and other web servers that cache
+# the writing of log records and do not guarentee that they
+# will be in chronological order.  The use of the FoldSeqErr
+# option will cause out of sequence log records to be treated
+# as if they had the same time stamp as the last valid record.
+# Default is to ignore out of sequence log records.  The use
+# of this feature is strongly discouraged and rarely needed.
+# (the webalizer already compensates for up to 60 minutes of
+# difference between records).
+
+#FoldSeqErr    no
+
+# VisitTimeout allows you to set the default timeout for a visit
+# (sometimes called a 'session').  The default is 30 minutes,
+# which should be fine for most sites.
+# Visits are determined by looking at the time of the current
+# request, and the time of the last request from the site.  If
+# the time difference is greater than the VisitTimeout value, it
+# is considered a new visit, and visit totals are incremented.
+# Value is the number of seconds to timeout (default=1800=30min)
+
+#VisitTimeout  1800
+
+# IgnoreHist shouldn't be used in a config file, but it is here
+# just because it might be usefull in certain situations.  If the
+# history file is ignored, the main "index.html" file will only
+# report on the current log files contents.  Usefull only when you
+# want to reproduce the reports from scratch.  USE WITH CAUTION!
+# Valid values are "yes" or "no".  Default is "no".
+
+#IgnoreHist    no
+
+# IgnoreState also shouldn't be used, but is here anyway.  It is
+# similar to the IgnoreHist option, but for the incremental data
+# file.  If this is set to 'yes', any existing incrememtal data
+# will be ignored and a new data file will be written at the end
+# of processing.  USE WITH CAUTION.  By ignoring an existing
+# incremental data file, all previous processing for the current
+# month will be lost, and those logs must be re-processed.
+# Valid values are "yes" or "no".  Default is "no".
+
+#IgnoreState   no
+
+# CountryGraph allows the usage by country graph to be disabled.
+# Values can be 'yes' or 'no', default is 'yes'.
+
+#CountryGraph  yes
+
+# CountryFlags allows flags to be displayed in the top country
+# table in monthly reports.  Values can be 'yes' or 'no', with
+# the default being 'no'.
+
+#CountryFlags  no
+
+# FlagDir specifies the location of flag graphics which will be
+# used in the top country table.  If not specified, the default
+# is to look in the 'flags' directory directly under the output
+# directory being used for the reports.  If this option is used,
+# the display of flag graphics will be enabled by default.
+
+#FlagDir       flags
+
+# DailyGraph and DailyStats allows the daily statistics graph
+# and statistics table to be disabled (not displayed).  Values
+# may be "yes" or "no". Default is "yes".
+
+#DailyGraph    yes
+#DailyStats    yes
+
+# HourlyGraph and HourlyStats allows the hourly statistics graph
+# and statistics table to be disabled (not displayed).  Values
+# may be "yes" or "no". Default is "yes".
+
+#HourlyGraph   yes
+#HourlyStats   yes
+
+# GraphLegend allows the color coded legends to be turned on or off
+# in the graphs.  The default is for them to be displayed.  This only
+# toggles the color coded legends, the other legends are not changed.
+# If you think they are hideous and ugly, say 'no' here :)
+
+#GraphLegend   yes
+
+# GraphLines allows you to have index lines drawn behind the graphs.
+# I personally am not crazy about them, but a lot of people requested
+# them and they weren't a big deal to add.  The number represents the
+# number of lines you want displayed.  Default is 2, you can disable
+# the lines by using a value of zero ('0').  [max is 20]
+# Note, due to rounding errors, some values don't work quite right.
+# The lower the better, with 1,2,3,4,6 and 10 producing nice results.
+
+#GraphLines    2
+
+# IndexMonths defines the number of months to display in the main index
+# (yearly summary) table.  Value can be between 12 and 120, with the
+# default being 12 months (1 year).
+
+#IndexMonths   12
+
+# YearHeaders enables/disables the display of year headers in the main
+# index (yearly summary) table.  If enabled, year headers will be shown
+# when the table is displaying more than 16 months worth of data. Values
+# can be 'yes' or 'no', with 'yes' being the default.
+
+#YearHeaders   yes
+
+# YearTotals enables/disables the display of yearly totals in the main
+# index (yearly summary) table.  If enabled, year totals will be shown
+# when the table is displaying more than 16 months worth of data.  Values
+# can be 'yes' or 'no', with 'yes' being the default.
+
+#YearTotals    yes
+
+# GraphMonths defines the number of months to display in the main index
+# (yearly summary) graph.  Value can be between 12 and 72 months, with
+# the default being 12 months.
+
+#GraphMonths   12
+
+# The "Top" options below define the number of entries for each table.
+# Defaults are Sites=30, URLs=30, Referrers=30 and Agents=15, and
+# Countries=30. TopKSites and TopKURLs (by KByte tables) both default
+# to 10, as do the top entry/exit tables (TopEntry/TopExit).  The top
+# search strings and usernames default to 20.  Tables may be disabled
+# by using zero (0) for the value.
+
+#TopSites        30
+#TopKSites       10
+#TopURLs         30
+#TopKURLs        10
+#TopReferrers    30
+#TopAgents       15
+#TopCountries    30
+#TopEntry        10
+#TopExit         10
+#TopSearch       20
+#TopUsers        20
+
+# The All* keywords allow the display of all URLs, Sites, Referrers
+# User Agents, Search Strings and Usernames.  If enabled, a seperate
+# HTML page will be created, and a link will be added to the bottom
+# of the appropriate "Top" table.  There are a couple of conditions
+# for this to occur..  First, there must be more items than will fit
+# in the "Top" table (otherwise it would just be duplicating what is
+# already displayed).  Second, the listing will only show those items
+# that are normally visable, which means it will not show any hidden
+# items.  Grouped entries will be listed first, followed by individual
+# items.  The value for these keywords can be either 'yes' or 'no',
+# with the default being 'no'.  Please be aware that these pages can
+# be quite large in size, particularly the sites page,  and seperate
+# pages are generated for each month, which can consume quite a lot
+# of disk space depending on the traffic to your site.
+
+#AllSites      no
+#AllURLs       no
+#AllReferrers  no
+#AllAgents     no
+#AllSearchStr  no
+#AllUsers       no
+
+# The Webalizer normally strips the string 'index.' off the end of
+# URLs in order to consolidate URL totals.  For example, the URL
+# /somedir/index.html is turned into /somedir/ which is really the
+# same URL.  This option allows you to specify additional strings
+# to treat in the same way.  You don't need to specify 'index.' as
+# it is always scanned for by The Webalizer, this option is just to
+# specify _additional_ strings if needed.  If you don't need any,
+# don't specify any as each string will be scanned for in EVERY
+# log record... A bunch of them will degrade performance.  Also,
+# the string is scanned for anywhere in the URL, so a string of
+# 'home' would turn the URL /somedir/homepages/brad/home.html into
+# just /somedir/ which is probably not what was intended.
+
+#IndexAlias     home.htm
+#IndexAlias    homepage.htm
+
+# The DefaultIndex option is used to enable/disable the use of
+# "index." as the default index name to be stripped off the end of
+# a URL (as described above).  Most sites will not need to use this
+# option, but some may, such as those whose default index file name
+# is different, or those that use "index.php" or similar URLs in a
+# dynamic environment.  Values can be 'yes' or 'no', with the default
+# being 'yes'.  This option does not effect any names added using the
+# IndexAlias option, and those names will still function as described
+# regardless of this setting.
+
+#DefaultIndex  yes
+
+# The Hide*, Group* and Ignore* and Include* keywords allow you to
+# change the way Sites, URLs, Referrers, User Agents and Usernames
+# are manipulated.  The Ignore* keywords will cause The Webalizer to
+# completely ignore records as if they didn't exist (and thus not
+# counted in the main site totals).  The Hide* keywords will prevent
+# things from being displayed in the 'Top' tables, but will still be
+# counted in the main totals.  The Group* keywords allow grouping
+# similar objects as if they were one.  Grouped records are displayed
+# in the 'Top' tables and can optionally be displayed in BOLD and/or
+# shaded. Groups cannot be hidden, and are not counted in the main
+# totals. The Group* options do not, by default, hide all the items
+# that it matches.  If you want to hide the records that match (so just
+# the grouping record is displayed), follow with an identical Hide*
+# keyword with the same value.  (see example below)  In addition,
+# Group* keywords may have an optional label which will be displayed
+# instead of the keywords value.  The label should be seperated from
+# the value by at least one 'white-space' character, such as a space
+# or tab.  If the match string contains whitespace (spaces or tabs),
+# the string should be quoted with either single or double quotes.
+#
+# The value can have either a leading or trailing '*' wildcard
+# character.  If no wildcard is found, a match can occur anywhere
+# in the string. Given a string "www.yourmama.com", the values "your",
+# "*mama.com" and "www.your*" will all match.
+
+# Your own site should be hidden
+#HideSite      *webalizer.org
+#HideSite      localhost
+
+# Your own site gives most referrals
+#HideReferrer  webalizer.org/
+
+# This one hides non-referrers ("-" Direct requests)
+#HideReferrer  Direct Request
+
+# Usually you want to hide these
+HideURL                *.gif
+HideURL                *.GIF
+HideURL                *.jpg
+HideURL                *.JPG
+HideURL                *.png
+HideURL                *.PNG
+HideURL                *.ra
+
+# Hiding agents is kind of futile
+#HideAgent     RealPlayer
+
+# You can also hide based on authenticated username
+#HideUser      root
+#HideUser      admin
+
+# Grouping options
+#GroupURL      /cgi-bin/*      CGI Scripts
+#GroupURL      /images/*       Images
+
+#GroupSite     *.aol.com
+#GroupSite     *.compuserve.com
+
+#GroupReferrer yahoo.com/      Yahoo!
+#GroupReferrer excite.com/     Excite
+#GroupReferrer infoseek.com/   InfoSeek
+#GroupReferrer webcrawler.com/ WebCrawler
+
+#GroupUser      root            Admin users
+#GroupUser      admin           Admin users
+#GroupUser      wheel           Admin users
+
+# The following is a great way to get an overall total
+# for browsers, and not display all the detail records.
+# (You should use MangleAgent to refine further...)
+
+#GroupAgent    Opera/          Opera
+#HideAgent     Opera/
+#GroupAgent    "MSIE 7"        Microsoft Internet Exploder 7
+#HideAgent     MSIE 7
+#GroupAgent    "MSIE 6"        Microsoft Internet Exploder 6
+#HideAgent     MSIE 6
+#GroupAgent    "MSIE "         Older Microsoft Exploders
+#HideAgent     MSIE 
+#GroupAgent    Firefox/2.      Firefox 2
+#HideAgent     Firefox/2.
+#GroupAgent    Firefox/1.      Firefox 1.x
+#HideAgent     Firefox/1.
+#GroupAgent    Konqueror       Konqueror
+#HideAgent     Konqueror
+#GroupAgent    Safari          Safari
+#HideAgent     Safari
+#GroupAgent    Lynx*           Lynx
+#HideAgent     Lynx*
+#GroupAgent    Wget/           WGet
+#HideAgent     Wget/
+#GroupAgent    (compatible;    Other Mozilla Compatibles
+#HideAgent     (compatible;
+#GroupAgent    Mozilla*        Mozilla/Netscape
+#HideAgent     Mozilla*
+
+# HideAllSites allows forcing individual sites to be hidden in the
+# report.  This is particularly useful when used in conjunction
+# with the "GroupDomain" feature, but could be useful in other
+# situations as well, such as when you only want to display grouped
+# sites (with the GroupSite keywords...).  The value for this
+# keyword can be either 'yes' or 'no', with 'no' the default,
+# allowing individual sites to be displayed.
+
+#HideAllSites  no
+
+# The GroupDomains keyword allows you to group individual hostnames
+# into their respective domains.  The value specifies the level of
+# grouping to perform, and can be thought of as 'the number of dots'
+# that will be displayed.  For example, if a visiting host is named
+# cust1.tnt.mia.uu.net, a domain grouping of 1 will result in just
+# "uu.net" being displayed, while a 2 will result in "mia.uu.net".
+# The default value of zero disable this feature.  Domains will only
+# be grouped if they do not match any existing "GroupSite" records,
+# which allows overriding this feature with your own if desired.
+
+#GroupDomains  0
+
+# The GroupShading allows grouped rows to be shaded in the report.
+# Useful if you have lots of groups and individual records that
+# intermingle in the report, and you want to diferentiate the group
+# records a little more.  Value can be 'yes' or 'no', with 'yes'
+# being the default.
+
+#GroupShading  yes
+
+# GroupHighlight allows the group record to be displayed in BOLD.
+# Can be either 'yes' or 'no' with the default 'yes'.
+
+#GroupHighlight        yes
+
+# The Ignore* keywords allow you to completely ignore log records based
+# on hostname, URL, user agent, referrer or username.  I hesitated in
+# adding these, since the Webalizer was designed to generate _accurate_
+# statistics about a web servers performance.  By choosing to ignore
+# records, the accuracy of reports become skewed, negating why I wrote
+# this program in the first place.  However, due to popular demand, here
+# they are.  Use the same as the Hide* keywords, where the value can have
+# a leading or trailing wildcard '*'.  Use at your own risk ;)  Please
+# remember, the use of these will MAKE YOUR STATS INACCURATE and you
+# should consider using an equivalent 'Hide*' keyword instead.
+
+#IgnoreSite    bad.site.net
+#IgnoreURL     /test*
+#IgnoreReferrer        file:/*
+#IgnoreAgent   RealPlayer
+#IgnoreUser     root
+
+# The Include* keywords allow you to force the inclusion of log records
+# based on hostname, URL, user agent, referrer or username.  They take
+# precidence over the Ignore* keywords.  Note: Using Ignore/Include
+# combinations to selectivly process parts of a web site is _extremely
+# inefficent_!!! Avoid doing so if possible (ie: grep the records to a
+# seperate file if you really want that kind of report).
+
+# Example: Only show stats on Joe User's pages...
+#IgnoreURL     *
+#IncludeURL    ~joeuser*
+
+# Or based on an authenticated username
+#IgnoreUser     *
+#IncludeUser    someuser
+
+# The MangleAgents allows you to specify how much, if any, The Webalizer
+# should mangle user agent names.  This allows several levels of detail
+# to be produced when reporting user agent statistics.  There are six
+# levels that can be specified, which define different levels of detail
+# supression.  Level 5 shows only the browser name (MSIE or Mozilla)
+# and the major version number.  Level 4 adds the minor version number
+# (single decimal place).  Level 3 displays the minor version to two
+# decimal places.  Level 2 will add any sub-level designation (such
+# as Mozilla/3.01Gold or MSIE 3.0b).  Level 1 will attempt to also add
+# the system type if it is specified.  The default Level 0 displays the
+# full user agent field without modification and produces the greatest
+# amount of detail.  User agent names that can't be mangled will be
+# left unmodified.
+
+#MangleAgents    0
+
+# The SearchEngine keywords allow specification of search engines and
+# their query strings on the URL.  These are used to locate and report
+# what search strings are used to find your site.  The first word is
+# a substring to match in the referrer field that identifies the search
+# engine, and the second is the URL variable used by that search engine
+# to define it's search terms.
+
+#SearchEngine  .google.        q=
+#SearchEngine  yahoo.com       p=
+#SearchEngine  altavista.com   q=
+#SearchEngine   aolsearch.      query=
+#SearchEngine   ask.co          q=
+#SearchEngine  eureka.com      q=
+#SearchEngine  lycos.com       query=
+#SearchEngine  hotbot.com      MT=
+#SearchEngine  msn.com         q=
+#SearchEngine  infoseek.com    qt=
+#SearchEngine  excite          search=
+#SearchEngine  netscape.com    query=
+#SearchEngine  mamma.com       query=
+#SearchEngine  alltheweb.com   q=
+#SearchEngine  northernlight.com  qr=
+
+# Normally, search strings are converted to lower case in order to
+# increase accuracy.  The SearchCaseI option allows them to maintain
+# case sensitivity, useful for some sites.  The value can be 'yes'
+# or 'no', with 'yes' (case insensitive) being the default.
+
+#SearchCaseI   yes
+
+# The Dump* keywords allow the dumping of Sites, URLs, Referrers
+# User Agents, Usernames and Search strings to seperate tab delimited
+# text files, suitable for import into most database or spreadsheet
+# programs.
+
+# DumpPath specifies the path to dump the files.  If not specified,
+# it will default to the current output directory.  Do not use a
+# trailing slash ('/').
+
+#DumpPath      /var/lib/httpd/logs
+
+# The DumpHeader keyword specifies if a header record should be
+# written to the file.  A header record is the first record of the
+# file, and contains the labels for each field written.  Normally,
+# files that are intended to be imported into a database system
+# will not need a header record, while spreadsheets usually do.
+# Value can be either 'yes' or 'no', with 'no' being the default.
+
+#DumpHeader    no
+
+# DumpExtension allow you to specify the dump filename extension
+# to use.  The default is "tab", but some programs are pickey about
+# the filenames they use, so you may change it here (for example,
+# some people may prefer to use "csv").
+
+#DumpExtension tab
+
+# These control the dumping of each individual table.  The value
+# can be either 'yes' or 'no'.. the default is 'no'.
+
+#DumpSites     no
+#DumpURLs      no
+#DumpReferrers no
+#DumpAgents    no
+#DumpUsers     no
+#DumpSearchStr  no
+
+# The custom graph colors are defined here. Declare them 
+# in the standard hexadecimal way (as HTML, without the '#') 
+# If none are given, you will get the standard default colors.
+
+#ColorHit      00805c
+#ColorFile     0040ff
+#ColorSite     ff8000
+#ColorKbyte    ff0000
+#ColorPage     00e0ff
+#ColorVisit    ffff00
+#ColorMisc      00e0ff
+
+#PieColor1     800080
+#PieColor2     80ffc0
+#PieColor3     ff00ff
+#PieColor4     ffc080
+
+# End of configuration file...  Have a nice day!
diff --git a/wcmgr.1 b/wcmgr.1
new file mode 100644 (file)
index 0000000..8e9668d
--- /dev/null
+++ b/wcmgr.1
@@ -0,0 +1,110 @@
+.TH wcmgr 1 "12-Jul-2008" "Version 1.00" "The Webalizer"
+.SH NAME
+wcmgr - Webalizer (DNS) Cache file Manager
+.SH SYNOPSIS
+.B wcmgr\fP [\fI option ... \fP] \fIcache-file\fP
+.PP
+.SH DESCRIPTION
+\fIwcmgr\fP is a utility program which allows manipulation of the DNS cache
+files used and produced by The \fIWebalizer\fP.  Each record in the cache
+file contains an IP address (either IPv4 or IPv6), a timestamp of when the
+entry was added to the cache, a flag to indicate if the record contains
+a resolved name or not, and either the same IP address or a resolved host
+name.  All records are accessed by their IP address.
+.SH RUNNING WCMGR 
+\fIwcmgr\fP was designed to be run from the Unix shell command line.  This
+facilitates its use in shell scripts and other automated processes.  A
+valid DNS cache file \fBmust\fP be specified.  Command line options are
+optional, and if none are given, the default action is to list the
+contents of the specified cache file.
+.SH COMMAND LINE OPTIONS
+Different functions are selected by using one or more of the following
+command line options.  If no options are given, the default is to display
+the contents of the cache file to the screen (stdout).
+.PP
+.TP 8
+.B \-h
+Display all available command line options and exit.
+.TP 8
+.B \-v
+Be verbose.
+
+.TP 8
+.B \-V
+Display the program version and exit.  Additional program specific
+information will be displayed if \fIverbose\fP mode is also used
+(e.g. '\fI-vV\fP'), which can be useful when submitting bug reports.
+.TP 8
+.B \-a \fIaddress\fP [\fI-n hostname\fP] [\fI-t0\fP]
+Add a new record to the cache file.  The IP \fIaddress\fP will be added to
+the cache file using the current time as the timestamp and with a resolved
+name \fIhostname\fP.  If \fI-t0\fP is specified, the record will be
+considered permanent, and will not be removed (during a purge) or expired.
+If a \fIhostname\fP is not specified with the \fI-n\fP option, then the
+\fIaddress\fP will be used instead, and the record will be flagged as
+unresolved.
+.TP 8
+.B \-c
+Create a new cache file.  If used alone, this option will create a new,
+empty cache file.  If used with the \fIimport\fP option, a new cache
+file will be created before importing the data.  An error will occur
+if the file \fIcache-file\fP already exists.
+.TP 8
+.B \-d \fIaddress\fP
+Delete a record from the cache file using the specified \fIaddress\fP.
+.TP 8
+.B \-f \fIaddress\fP
+Find and display information for \fIaddress\fP from the cache file.
+A single line similar to that produced by the \fI-l\fP option will
+be displayed unless \fIverbose\fP mode is enabled, in which case a
+more detailed listing will be produced.
+.TP 8
+.B \-i \fIname\fP [\fI-c\fP]
+Import data into the cache file from the file \fIname\fP.  The import
+file must be a valid tab delimited text file, such as that created by
+the \fIexport\fP option.  If the imported data contains records already
+present in the cache file, those records will be overwritten by the
+imported data.  The cache file must exist unless the \fI-c\fP option
+is specified, in which case, a new cache file will be created for the
+imported data.
+.TP 8
+.B \-l
+List the contents of the cache file.  This is the default action of the
+program, so does not necessarily need to be specified.  If \fIverbose\fP
+mode is enabled, a report title, column headers and summary totals will
+also be displayed.
+.TP 8
+.B \-p \fInum\fP
+Purge the cache file of entries older than \fInum\fP days.  If \fInum\fP
+is not specified, then a default of \fB7 days\fP will be used.  if
+\fIverbose\fP mode is enabled, each purged record will be printed and
+the total number of purged records will be displayed.
+.TP 8
+.B \-s [\fI-t num\fP]
+Display cache file information/statistics.  If a TTL value (in days) is
+specified using the \fI-t\fP option, it will be used to calculate how
+many records are older than \fInum\fP days, otherwise, the default value
+of \fB7 days\fP will be used.
+.TP 8
+.B \-n \fIname\fP
+Specify the \fIname\fP to use as the resolved hostname when adding records
+to the cache.
+.TP 8
+.B \-t \fInum\fP
+Time to live (TTL) value.  If used along with the \fI-p\fP (purge) option,
+it specifies how many days a record will remain valid.  Any record that is
+older than \fInum\fP days is considered expired and will be purged.  If
+used with the \fI-a\fP (add) option, a zero value will cause the record
+to be considered permanent.
+.TP 8
+.B \-x \fIname\fP
+Export data from a cache file to a tab delimited text file named \fIname\fP.
+If the text file \fIname\fP exists, it will be overwritten.
+.SH BUGS
+Please report bugs to the author.
+.SH COPYRIGHT
+Copyright (C) 1997-2011 by Bradford L. Barrett.  Distributed under
+the GNU GPL.  See the files "\fICOPYING\fP" and "\fICopyright\fP",
+supplied with all distributions for additional information.
+.SH AUTHOR
+Bradford L. Barrett <\fIbrad at mrunix dot net\fP>
diff --git a/wcmgr.c b/wcmgr.c
new file mode 100644 (file)
index 0000000..646094f
--- /dev/null
+++ b/wcmgr.c
@@ -0,0 +1,983 @@
+/*
+    wcmgr - Webalizer (DNS) Cache file Manager
+
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+#ifndef USE_DNS
+
+/* ********************************************************** */
+/* If DNS support is not enabled, then we just compile a stub */
+/* program that displays an appropriate warning when run.     */
+/* ********************************************************** */
+
+int main()
+{
+   printf("********************* NOTICE!! *********************\n");
+   printf("This version of the Webalizer was not compiled with\n");
+   printf("DNS support.  In order to use this program, you must\n");
+   printf("configure the Webalizer at build time with the DNS\n");
+   printf("support enabled (--enable-dns configure option).\n");
+   printf("****************************************************\n\n");
+   exit(1);   /* exit with error code */
+}
+
+#else /* USE_DNS defined */
+
+#include <errno.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <fcntl.h>
+#include <ctype.h>
+#include <sys/utsname.h>
+#include <sys/stat.h>
+
+/* ensure getopt    */
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include <db.h>
+#include "webalizer.h"
+
+/*********************************************/
+/* Forward reference local functions         */
+/*********************************************/
+
+void list_cache(void);
+void stat_cache(void);
+void export_cache(void);
+void import_cache(void);
+void find_rec(void);
+void add_rec(void);
+void del_rec(void);
+void purge_cache(void);
+void create_cache(void);
+static int db_put(char *, char *, int, time_t);
+
+/*********************************************/
+/* GLOBAL VARIABLES                          */
+/*********************************************/
+
+char    *pname       = "WCMGR - Webalizer (DNS) Cache file Manager";
+char    *version     = "1.00";             /* program version             */
+char    *editlvl     = "03";               /* edit level                  */
+char    *moddate     = "12-Jul-2008";      /* modification date           */
+char    *copyright   = "Copyright 2007-2011 by Bradford L. Barrett";
+
+int       action     = 'l';                /* action flag (default=list)  */
+int       create     = 0;                  /* cache creation flag         */
+int       verbose    = 0;                  /* Verbose flag (1=be verbose) */
+int       rec_ttl    = 7;                  /* purge TTL in days           */
+DB        *dns_db    = NULL;               /* DNS cache database          */
+DB        *out_db    = NULL;               /* output cache db if needed   */
+DBC       *cursorp   = NULL;               /* database cursor             */
+DBT       q, r;                            /* query/reply structures      */
+char      *in_file   = NULL;               /* input cache filename        */
+char      out_file[MAXHOST+4];             /* output cache filename       */
+int       dns_fd     = 0;                  /* database file descriptor    */
+time_t    runtime;                         /* runtime for TTL calcs       */
+char      addr[129];                       /* buffer for IP search addr   */
+char      name[MAXHOST+1];                 /* buffer for name value       */
+
+extern char  *optarg;                      /* command line processing     */
+extern int   optind;
+extern int   opterr;
+
+/* dnsRecord structure used in wcmgr */
+struct dnsRec
+       {
+          time_t    timeStamp;             /* Timestamp of resolv data    */
+          int       numeric;               /* 0: Name, 1: IP-address      */
+          char      hostName[MAXHOST+1];   /* Hostname buffer (variable)  */
+       } dns_rec;
+
+/*********************************************/
+/* PRINT_VER - display version information   */
+/*********************************************/
+
+void print_ver()
+{
+   int v,r,l;
+   struct utsname system_info;
+   uname(&system_info);
+   printf("%s V%s-%s\n%s\n",pname,version,editlvl,copyright);
+   if (verbose)
+   {
+      db_version(&v,&r,&l);
+      printf("System  : %s %s (%s)\n",
+             system_info.sysname,
+             system_info.release,
+             system_info.machine);
+      printf("DB Ver. : V%d.%d.%d\n",v,r,l);
+      printf("Mod Date: %s\n",moddate);
+   }
+   printf("\n");
+   exit(0);
+}
+
+/*********************************************/
+/* PRINT_HELP - Command help display         */
+/*********************************************/
+
+void print_help(void)
+{
+   printf("Usage: wcmgr [options] cache-file\n\n");
+   printf("Options:\n");
+   printf(" -h         This help display\n");
+   printf(" -V         Version information\n");
+   printf(" -v         be verbose\n");
+   printf(" -a addr    Add DNS record\n");
+   printf(" -c         Create new cache file\n");
+   printf(" -d addr    Delete DNS record\n");
+   printf(" -f addr    Find DNS record\n");
+   printf(" -i name    Import cache from file\n");
+   printf(" -l         List cache file contents\n");
+   printf(" -n name    hostname (used for add)\n");
+   printf(" -p num     Purge after num days\n");
+   printf(" -s         Display cache file stats/info\n");
+   printf(" -t num     TTL value (for add and stats)\n");
+   printf(" -x name    Export cache to tab file\n");
+   printf("\n");
+   printf("If no options are specified, the default\n");
+   printf("action is to list the cache file contents.\n\n");
+   exit(0);
+}
+
+/*********************************************/
+/* TTL_AGE - format TTL age for printing     */
+/*********************************************/
+
+const char *ttl_age(time_t now, time_t then)
+{
+   static   char our_buffer[32];         /* string return buffer      */
+   time_t   age;                         /* age value in seconds      */
+   int      days, hours, mins;           /* day/hour/min counters     */
+
+   /* get age in seconds */
+   age=now-then;
+
+   /* now calc days/hours/min */
+   days=age/86400;   age=age-(days*86400);
+   hours=age/3600;   age=age-(hours*3600);
+   mins=age/60;
+
+   /* format the string */
+   sprintf(our_buffer,"%02dd:%02dh:%02dm",days, hours, mins);
+
+   /* and return to caller */
+   return our_buffer;
+}
+
+/*********************************************/
+/* MAIN entry point here                     */
+/*********************************************/
+
+int main(int argc, char *argv[])
+{
+   int       i;                          /* gotta have one of these :-)     */
+
+   /* some systems need this */
+   setlocale(LC_CTYPE,"");
+
+   /* initalize name/addr */
+   memset(addr, 0, sizeof(addr));
+   memset(name, 0, sizeof(name));
+   memset(out_file,0,sizeof(out_file));
+
+   /* Get our command line arguments */
+   opterr = 0;
+   while ((i=getopt(argc,argv,"a:cd:f:hi:ln:p::st:vVx:"))!=EOF)
+   {
+      switch (i)
+      {
+         case 'a':  action='a'; strncpy(addr,optarg,sizeof(addr)-1);  break;
+         case 'c':  if (action!='i') action='c'; create=1;            break;
+         case 'd':  action='d'; strncpy(addr,optarg,sizeof(addr)-1);  break;
+         case 'f':  action='f'; strncpy(addr,optarg,sizeof(addr)-1);  break;
+         case 'i':  action='i'; strncpy(out_file,optarg,sizeof(out_file)-1);
+                                                                      break;
+         case 'h':  print_help();                                     break;
+         case 'n':  strncpy(name,optarg,sizeof(name)-1);              break;
+         case 'p':  action='p'; if (optarg!=NULL) rec_ttl=atoi(optarg); break;
+         case 's':  action='s';                                       break;
+         case 't':  rec_ttl=atoi(optarg);                             break;
+         case 'v':  verbose=1;                                        break;
+         case 'V':  print_ver();                                      break;
+         case 'x':  action='x'; strncpy(out_file,optarg,sizeof(out_file)-1);
+                                                                      break;
+         case ':':  /* catch invalid options here */
+         case '?':                                                    break;
+         case 'l':  /* This is the default action */
+         default:   action='l';                                       break;
+      }
+   }
+
+   /* Get cache filename if specified */
+   if (argc - optind == 0) print_help();   /* gots to have a filename!!     */
+   in_file = argv[optind];
+
+   /* Try to create our DB handle */
+   if ( db_create(&dns_db, NULL, 0) )
+   {
+      fprintf(stderr,"Error: unable to create db handle!\n");
+      exit(1);
+   }
+
+   /* force sane TTL value */
+   if (rec_ttl > 99) rec_ttl=99;
+   if (rec_ttl < 0 ) rec_ttl=7;
+
+   /* Branch on 'action' specified   */
+   switch (action)
+   {
+      case 'a': add_rec();                                            break;
+      case 'c': create_cache();                                       break;
+      case 'd': del_rec();                                            break;
+      case 'f': find_rec();                                           break;
+      case 'i': import_cache();                                       break;
+      case 's': stat_cache();                                         break;
+      case 'p': purge_cache();                                        break;
+      case 'x': export_cache();                                       break;
+      case 'l':
+      default:  list_cache();                                         break;
+   }
+   exit(0);
+}
+
+/*********************************************/
+/* LIST_CACHE - Dump out cache contents      */
+/*********************************************/
+
+void list_cache()
+{
+   int       i;
+   char      ip_buf[48];
+   u_int64_t t_rec=0;
+   u_int64_t t_num=0;
+
+   /* open the database (read-only) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* Create a cursor */
+   if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
+   {
+      fprintf(stderr,"Error: Unable to create cursor!\n");
+      exit(1);
+   }
+
+   /* get our runtime for TTL calculations */
+   time(&runtime);
+
+   if (verbose)
+   {
+      printf("Webalizer DNS Cache file listing generated %s\n",ctime(&runtime));
+      printf("IP Address         TTL Age    Hostname\n");
+      printf("--------------- ------------- ------------------------" \
+             "-----------------------\n");
+   }
+      
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* Loop through database */
+   while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+   {
+      /* got a record */
+      t_rec++;
+      memset(ip_buf, 0, sizeof(ip_buf));
+      strncpy(ip_buf, q.data, (q.size>47)?47:q.size);  /* save IP address  */
+      memcpy(&dns_rec, r.data, r.size);          
+      if (dns_rec.numeric) t_num++;
+      printf("%-15s [%s] %s\n",ip_buf,
+             (dns_rec.timeStamp)?
+                ttl_age(runtime, dns_rec.timeStamp):
+                "-permanent-",
+             dns_rec.hostName);
+
+      /* done, clear for next rec */
+      memset(&q, 0, sizeof(DBT));
+      memset(&r, 0, sizeof(DBT));
+   }
+
+   if (verbose)
+   {
+      printf("------------------------------------------------------" \
+             "-----------------------\n");
+      printf("Filename: %s  (%llu records)\n",in_file, t_rec);
+   }
+}
+
+/*********************************************/
+/* PURGE_CACHE - Purge cache of expired recs */
+/*********************************************/
+
+void purge_cache()
+{
+   int       i;
+   char      ip_buf[48];
+   u_int64_t age=0;
+   u_int64_t t_in=0;
+   u_int64_t t_out=0;
+   u_int64_t t_exp=0;
+
+   /* file control struct */
+   struct    flock our_flock;
+
+   if (verbose) printf("Purging records over %d days from '%s'\n",
+                        rec_ttl, in_file);
+
+   /* open the input database (read-write) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* get file descriptor */
+   dns_db->fd(dns_db, &dns_fd);
+
+   /* Try to lock the file */
+   our_flock.l_whence=SEEK_SET;
+   our_flock.l_start=0;
+   our_flock.l_len=0;
+   our_flock.l_type=F_WRLCK;
+
+   if (fcntl(dns_fd,F_SETLK,&our_flock) <0)
+   {
+      /* Error - can't lock file */
+      printf("Error: Unable to lock cache file: %s\n",strerror(errno));
+      exit(1);
+   }
+
+   /* Create a cursor */
+   if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
+   {
+      fprintf(stderr,"Error: Unable to create cursor!\n");
+      exit(1);
+   }
+
+   /* Try to create our output DB handle */
+   if ( db_create(&out_db, NULL, 0) )
+   {
+      fprintf(stderr,"Error: unable to create output db handle!\n");
+      exit(1);
+   }
+
+   /* generate output filename */
+   memset(out_file, 0, sizeof(out_file));
+   sprintf(out_file, "%s.new", in_file);
+
+   /* open the output database (read-write) */
+   if ((i=out_db->open(out_db, NULL, out_file, NULL,
+                  DB_HASH, DB_CREATE|DB_EXCL, 0644)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",out_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* get our runtime for TTL calculations */
+   time(&runtime);
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+
+   /* Loop through database */
+   while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+   {
+      /* got a record */
+      t_in++;
+      memcpy(&dns_rec, r.data, r.size);          
+
+      /* get record ttl age */
+      if (dns_rec.timeStamp==0) age=0;
+      else age = runtime - dns_rec.timeStamp;
+
+      if ( age <= (rec_ttl*86400) )
+      {
+         /* Good record.. insert into new cache file */
+         if ( (i=out_db->put(out_db, NULL, &q, &r, 0)) != 0 )
+         {
+            fprintf(stderr,"Error: db_put fail: %s!\n",db_strerror(i));
+            exit(1);
+         }
+         else t_out++;
+      }
+      else
+      {
+         /* Expired record */
+         t_exp++;
+         if (verbose)
+         {
+            memset(ip_buf, 0, sizeof(ip_buf));
+            strncpy(ip_buf, q.data, (q.size>47)?47:q.size);
+            printf("Purging %-16s [%s]\n",ip_buf,
+               ttl_age(runtime,dns_rec.timeStamp));
+         }
+      }
+
+      /* done, clear for next rec */
+      memset(&q, 0, sizeof(DBT));
+      memset(&r, 0, sizeof(DBT));
+   }
+
+   /* Successful exit! */
+   our_flock.l_type=F_UNLCK;
+   fcntl(dns_fd, F_SETLK, &our_flock);
+   dns_db->close(dns_db, 0);
+   out_db->close(out_db, 0);
+
+   /* rename files */
+   if (rename(out_file, in_file))
+   {
+      fprintf(stderr,"Error renaming file: %s\n",strerror(errno));
+      exit(1);
+   }
+   
+   if (verbose)
+      printf("%llu of %llu records purged from '%s'\n",t_exp,t_in,in_file);
+}
+
+/*********************************************/
+/* STAT_CACHE - Display cache stats/info     */
+/*********************************************/
+
+void stat_cache()
+{
+   /* Define some variables */
+   int        i;
+   time_t     min_age=0;                     /* min/max TTL age in cache   */
+   time_t     max_age=0;
+   u_int64_t  t_rec=0;                       /* Various record totals      */
+   u_int64_t  t_err=0;
+   u_int64_t  t_name=0;
+   u_int64_t  t_num=0;
+   u_int64_t  t_perm=0;
+   u_int64_t  t_old=0;
+   time_t     age;
+
+   /* open the database (read-only) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* Create a cursor */
+   if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
+   {
+      fprintf(stderr,"Error: Unable to create cursor!\n");
+      exit(1);
+   }
+
+   /* get our runtime for TTL calculations */
+   time(&runtime);
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* Loop through database */
+   while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+   {
+      t_rec++;                                               /* add to total */
+      if (r.size >= sizeof(dns_rec)) { t_err++; continue; }  /* size error?  */
+      memcpy(&dns_rec, r.data, r.size);                      /* get record   */
+      if (dns_rec.numeric) t_num++; else t_name++;           /* resolved?    */
+
+      if (dns_rec.timeStamp!=0)                              /* permanent?   */
+      {
+         age=runtime-dns_rec.timeStamp;                      /* calc age     */
+         if ((age < min_age) || (t_rec==1) ) min_age=age;    /* min/max age  */
+         if ( age > max_age ) max_age=age;                   /* if not perm  */
+         if ( age > (rec_ttl*86400)) t_old++;                /* purgable?    */
+      }
+      else t_perm++;                                         /* inc counter  */
+
+      /* done, clear for next rec */
+      memset(&q, 0, sizeof(DBT));
+      memset(&r, 0, sizeof(DBT));
+   }
+
+   /* Print actual record counts */
+   printf("Report generated on: %s",ctime(&runtime));
+   printf("DNS Cache Filename : %s\n",in_file);
+
+   printf("Total Records      : %llu\n",t_rec);
+   printf("Total Resolved     : %llu\n",t_name);
+   printf("Total Unresolved   : %llu\n",t_num);
+   printf("Total Permanent    : %llu\n",t_perm);
+   printf("Newest Record age  : %s\n",ttl_age(min_age,0));
+   printf("Oldest Record age  : %s\n",ttl_age(max_age,0));
+   printf("Total over %02d days : %llu\n",rec_ttl,t_old);
+   if (t_err) printf("Record Size Errors : %llu\n",t_err);
+   printf("\n");
+}
+
+/*********************************************/
+/* FIND_REC - Find IP record in cache        */
+/*********************************************/
+
+void find_rec()
+{
+   int   i;
+   char  ip_buf[48];
+
+   /* open the database (read-only) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* get our runtime for TTL calculations */
+   time(&runtime);
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* search the cache */
+   q.data = &addr;
+   q.size = strlen(addr);
+   if ( (i=dns_db->get(dns_db, NULL, &q, &r, 0)) == 0)
+   {
+      /* We found it! display info */
+      memset(ip_buf, 0, sizeof(ip_buf));
+      strncpy(ip_buf, q.data, (q.size>47)?47:q.size);  /* save IP address  */
+      memcpy(&dns_rec, r.data, r.size);          
+      if (verbose)
+      {
+         /* Verbose display */
+         printf("Address  : %s\n",ip_buf);
+         printf("Hostname : %s\n",dns_rec.hostName);
+         printf("Resolved : %s\n",(dns_rec.numeric)?"No":"Yes");
+         if (dns_rec.timeStamp)
+         {
+            /* Not Permanent */
+            printf("Timestamp: %s",ctime(&dns_rec.timeStamp));
+            printf("TTL age  : %s\n\n",ttl_age(runtime, dns_rec.timeStamp));
+         }
+         else
+         {
+            printf("Timestamp: N/A\n");
+            printf("TTL age  : Permanent\n");
+         }
+      }
+      else
+      {
+         /* Standard 1 line display */
+         printf("%-15s [%s] %s\n",ip_buf,
+             (dns_rec.timeStamp)?
+                 ttl_age(runtime, dns_rec.timeStamp):
+                 "-permanent-",
+             dns_rec.hostName);
+      }
+   }
+   else
+   {
+      if (i==DB_NOTFOUND)
+         printf("%s not found!\n",addr);
+      else
+         printf("Error: %s\n",db_strerror(i));
+   }
+}
+
+/*********************************************/
+/* DEL_REC - Delete record from cache file   */
+/*********************************************/
+
+void del_rec()
+{
+   int   i;
+   char  *cp;
+
+   /* ensure we have addr string */
+   if (addr[0]!='\0') cp=addr;
+   else
+   {
+      fprintf(stderr,"Error: No IP address specified!\n");
+      exit(1);
+   }
+
+   /* ensure IPv6 addresses are lowercase */
+   cp=addr; while (*cp!='\0') *cp++=tolower(*cp);
+
+   /* open the database (read-write) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* search the cache */
+   q.data = &addr;
+   q.size = strlen(addr);
+
+   /* Try to delete the record */
+   if ( (i=dns_db->del(dns_db, NULL, &q, 0)) )
+   {
+      if (i==DB_NOTFOUND)
+      {
+         printf("%s not found in cache!\n",addr);
+         exit(1);
+      }
+      else
+      {
+         fprintf(stderr,"Error: %s\n",db_strerror(i));
+         exit(1);
+      }
+   }
+   dns_db->close(dns_db, 0);
+   if (verbose)
+      printf("%s sucessfully deleted from cache file\n",addr);
+}
+
+/*********************************************/
+/* ADD_REC - Add record to cache file        */
+/*********************************************/
+
+void add_rec()
+{
+   int   i;
+   char  *cp;
+
+   /* ensure we have addr string */
+   if (addr[0]!='\0') cp=addr;
+   else
+   {
+      fprintf(stderr,"Error: No IP address specified!\n");
+      exit(1);
+   }
+
+   /* and check size */
+   if (strlen(addr)>47)
+   {
+      fprintf(stderr,"Error: IP address too long!\n");
+      exit(1);
+   }
+
+   /* ensure everything is lowercase */
+   cp=addr; while (*cp!='\0') *cp++=tolower(*cp);
+   if (name[0]!='\0')
+   {
+      cp=name; while (*cp!='\0') *cp++=tolower(*cp);
+   }
+
+   /* open the database (read-write) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, 0, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* get our runtime for TTL calculations */
+   time(&runtime);
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* search the cache */
+   q.data = &addr;
+   q.size = strlen(addr);
+   if ( (i=dns_db->get(dns_db, NULL, &q, &r, 0)) == 0)
+   {
+      fprintf(stderr,"Error: %s already exists in cache!\n",addr);
+      exit(1);
+   }
+   else
+   {
+      if (i!=DB_NOTFOUND)
+      {
+         fprintf(stderr,"Error: %s\n",db_strerror(i));
+         exit(1);
+      }
+      else
+      {
+         /* check hostname */
+         if (name[0]=='\0')
+            strncpy(name,addr,strlen(addr));
+
+         /* check if perm */
+         if (rec_ttl==0) runtime=0;
+
+         /* put it in the database */
+         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);
+      }
+   }
+}
+
+/*********************************************/
+/* CREATE_CACHE - Create a new cache file    */
+/*********************************************/
+
+void create_cache()
+{
+   int   i;
+
+   /* create the database */
+   if ((i=dns_db->open(dns_db,NULL,in_file,NULL,
+                  DB_HASH,DB_CREATE|DB_EXCL,0644)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+   dns_db->close(dns_db,0);
+   if (verbose) printf("Cache file %s created successfully\n",in_file);
+}
+
+/*********************************************/
+/* IMPORT_CACHE - import cache from tab file */
+/*********************************************/
+
+void import_cache()
+{
+   int       i, flag=0;
+   u_int64_t t_rec=0;
+   FILE      *in_fp;
+   char      ip_buf[48];
+   char      buffer[4096];
+
+   /* open the database (read-write) */
+   if (create) flag=DB_CREATE|DB_EXCL;
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, flag, 0644)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* open our import file */
+   in_fp=fopen(out_file,"r");
+   if (in_fp)
+   {
+      while ((fgets(buffer,4096,in_fp)) != NULL)
+      {
+         memset(&dns_rec, 0, sizeof(dns_rec));
+         memset(&ip_buf, 0, sizeof(ip_buf));
+         i = sscanf(buffer,"%s\t%lu\t%d\t%s",
+                    ip_buf,
+                    &dns_rec.timeStamp,
+                    &dns_rec.numeric,
+                    dns_rec.hostName);
+
+         if (ip_buf[0]=='#') continue;  /* skip comments */
+
+         if (i!=4)
+         {
+            fprintf(stderr,"Error reading tab file %s\n",out_file);
+            exit(1);
+         }
+
+         t_rec++;   /* bump totals */
+
+         /* put it in the database */
+         if (db_put(ip_buf, dns_rec.hostName,
+                    dns_rec.numeric, dns_rec.timeStamp)!=0)
+         {
+            fprintf(stderr,"Error inserting cache record:\n%s\n",buffer);
+            exit(1);
+         }
+      }
+   }
+   else fprintf(stderr,"Error: File not found: %s\n",out_file);
+   dns_db->close(dns_db,0);
+
+   if (verbose) printf("%llu records imported into '%s' from file '%s'\n",
+                       t_rec, in_file, out_file);
+}
+
+/*********************************************/
+/* EXPORT_CACHE - export cache to tab file   */
+/*********************************************/
+
+void export_cache()
+{
+   int       i;
+   u_int64_t t_rec=0;
+   char      ip_buf[48];
+   FILE      *out_fp;
+   struct    stat out_stat;
+
+   /* make sure files are different! */
+   if (!strcmp(in_file,out_file))
+   {
+      fprintf(stderr,"Error: Bad export filename: %s\n",out_file);
+      exit(1);
+   }
+
+   /* open the database (read-only) */
+   if ((i=dns_db->open(dns_db, NULL, in_file, NULL, DB_HASH, DB_RDONLY, 0)))
+   {
+      /* Error opening the cache file.. tell user and exit */
+      fprintf(stderr,"Error: %s: %s\n",in_file,db_strerror(i));
+      exit(1);
+   }
+
+   /* Create a cursor */
+   if ( dns_db->cursor(dns_db, NULL, &cursorp, 0) )
+   {
+      fprintf(stderr,"Error: Unable to create cursor!\n");
+      exit(1);
+   }
+
+   /* stat output file */
+   if ( !(lstat(out_file, &out_stat)) )
+   {
+      /* check if the file is a symlink */
+      if ( S_ISLNK(out_stat.st_mode) )
+      {
+         fprintf(stderr,"%s %s\n","Error: File is a symlink:",out_file);
+         exit(1);
+      }
+   }
+
+   /* open output file */
+   if ( (out_fp=fopen(out_file,"w")) == NULL)
+   {
+      fprintf(stderr,"%s %s\n","Error: Cannot create file:",out_file);
+      exit(1);
+   }
+
+   /* initalize data areas */
+   memset(&q, 0, sizeof(DBT));
+   memset(&r, 0, sizeof(DBT));
+   memset(&dns_rec, 0, sizeof(struct dnsRec));
+
+   /* Loop through database */
+   while (!cursorp->c_get(cursorp, &q, &r, DB_NEXT))
+   {
+      /* got a record */
+      t_rec++;
+      memset(ip_buf, 0, sizeof(ip_buf));
+      strncpy(ip_buf, q.data, (q.size>47)?47:q.size);  /* save IP address  */
+      memcpy(&dns_rec, r.data, r.size);          
+
+      /* Print out tab delimited line          */
+      /* Format: IP timestamp numeric hostname */
+      fprintf(out_fp,"%s\t%lu\t%d\t%s\n",
+              ip_buf,dns_rec.timeStamp,
+              dns_rec.numeric,
+              dns_rec.hostName);
+
+      /* done, clear for next rec */
+      memset(&q, 0, sizeof(DBT));
+      memset(&r, 0, sizeof(DBT));
+   }
+   dns_db->close(dns_db,0);
+   fclose(out_fp);
+
+   if (verbose) printf("%llu records exported from '%s' to file '%s'\n",
+                       t_rec, in_file, out_file);
+}
+
+/*********************************************/
+/* DB_PUT - put key/val in the cache db      */
+/*********************************************/
+
+static int db_put(char *key, char *value, int numeric, time_t ttl)
+{
+
+   /* dnsRecord structure used in database */
+   struct dnsRecord
+   {
+          time_t    timeStamp;             /* Timestamp of resolv data    */
+          int       numeric;               /* 0: Name, 1: IP-address      */
+          char      hostName[1];           /* Hostname buffer (variable)  */
+   };
+
+   int    i;
+   DBT    k, v;
+   struct dnsRecord *recPtr = NULL;
+   int    nameLen = strlen(value)+1;
+
+   /* Align to multiple of eight bytes */
+   int recSize = (sizeof(struct dnsRecord)+nameLen+7) & ~0x7;
+
+   /* make sure we have a db ;) */
+   if(dns_db)
+   {
+      if((recPtr = calloc(1, recSize)))
+      {
+         recPtr->timeStamp = ttl;
+         recPtr->numeric = numeric;
+         memcpy(&recPtr->hostName, value, nameLen);
+         memset(&k, 0, sizeof(k));
+         memset(&v, 0, sizeof(v));
+
+         k.data = key;
+         k.size = strlen(key);
+
+         v.size = recSize;
+         v.data = recPtr;
+
+         if ( (i=dns_db->put(dns_db, NULL, &k, &v, 0)) != 0 )
+            fprintf(stderr,"Error: db_put fail: %s!\n",db_strerror(i));
+         free(recPtr);
+      }
+      else return 1;
+   }
+   else return 1;
+   return i;
+}
+#endif /* USE_DNS */
diff --git a/webalizer.1 b/webalizer.1
new file mode 100644 (file)
index 0000000..7fd9d95
--- /dev/null
@@ -0,0 +1,905 @@
+.TH webalizer 1 "12-Jul-2008" "Version 2.20" "The Webalizer"
+.SH NAME
+webalizer - A web server log file analysis tool.
+.SH SYNOPSIS
+.B webalizer
+[\fI option ... \fP] [\fI log-file \fP]
+.PP
+.B webazolver
+[\fI option ... \fP] [\fI log-file \fP]
+.PP
+.SH DESCRIPTION
+The \fIWebalizer\fP is a web server log file analysis program which produces
+usage statistics in HTML format for viewing with a browser.  The results
+are presented in both columnar and graphical format, which facilitates
+interpretation.  Yearly, monthly, daily and hourly usage statistics are
+presented, along with the ability to display usage by site, URL, referrer,
+user agent (browser), username, search strings, entry/exit pages,  and
+country (some information may not be available if not present in the log
+file being processed).
+.PP
+The \fIWebalizer\fP supports \fBCLF\fP (common log format) log files,
+as well as \fBCombined\fP log formats as defined by NCSA and others,
+and variations of these which it attempts to handle intelligently.  In
+addition, the \fIWebalizer\fP supports \fBxferlog\fP formatted (\fIFTP\fP)
+log files, \fBsquid\fP proxy logs and \fBW3C\fP extended format logs.
+Logs may also be compressed, via \fIgzip\fP (.gz) or, if enabled at compile
+time, \fIbzip2\fP (.bz2).  If a compressed log file is detected, it will be
+automatically uncompressed while it is read.  Compressed logs must have the
+standard \fIgzip\fP extension of \fB.gz\fP or \fIbzip2\fP extension of
+\fB.bz2\fP.
+.PP
+\fIwebazolver\fP is normally just a symbolic link to the \fIWebalizer\fP.
+When run as \fIwebazolver\fP, only DNS file creation/updates are performed,
+and the program will exit once complete.  All normal options and
+configuration directives are available, however many will not be used.
+In addition, a DNS cache file must be specified.  If the number of DNS
+children processes to use are not specified, the \fIwebazolver\fP will
+default to \fB5\fP.
+.PP
+This documentation applies to The Webalizer Version 2.20
+.SH RUNNING THE WEBALIZER
+The \fIWebalizer\fP was designed to be run from a Unix command line prompt or
+as a \fBcrond(8)\fP job. Once executed, the general flow of the program is:
+.TP 8
+.B o
+A default configuration file is scanned for.  A file named
+\fIwebalizer.conf\fP is searched for in the current directory, and if
+found, it's configuration data is parsed.  If the file is not
+present in the current directory,  the file \fI/etc/webalizer.conf\fP
+is searched for and, if found, is used instead.
+.TP 8
+.B o
+Any command line arguments given to the program are parsed.  This
+may include the specification of a configuration file, which is
+processed at the time it is encountered.
+.TP 8
+.B o
+If a log file was specified, it is opened and made ready for
+processing.  If no log file was given, \fISTDIN\fP is used for input.
+If the log filename '\fB-\fP' is specified, \fISTDIN\fP will be forced.
+.TP 8
+.B o
+If an output directory was specified, the program does a \fBchdir(2)\fP to
+that directory in preparation for generating output.  If no output
+directory was given, the current directory is used.
+.TP 8
+.B o
+If a non-zero number of DNS Children processes were specified, they will
+be started, and the specified log file will be processed, creating or
+updating the specified DNS cache file.
+.TP 8
+.B o
+If no hostname was given, the program attempts to get the hostname
+using a \fBuname(2)\fP system call.  If that fails, \fIlocalhost\fP
+is used.
+.TP 8
+.B o
+A history file is searched for in the current directory (output
+directory) and read if found.  This file keeps totals for previous
+months, which is used in the main \fIindex.html\fP HTML document.
+.B Note:
+The file location can now be specified with the \fIHistoryName\fP
+configuration option.
+.TP 8
+.B o
+If incremental processing was specified, a data file is searched for
+and loaded if found, containing the 'internal state' data of the
+program at the end of a previous run.
+.B Note:
+The file location can now be specified with the \fIIncrementalName\fP
+configuration option.
+.TP 8
+.B o
+Main processing begins on the log file.  If the log spans multiple
+months, a separate HTML document is created for each month.
+.TP 8
+.B o
+After main processing, the main \fIindex.html\fP page is created, which
+has totals by month and links to each months HTML document.
+.TP 8
+.B o
+A new history file is saved to disk, which includes totals generated
+by The \fIWebalizer\fP during the current run.
+.TP 8
+.B o
+If incremental processing was specified, a data file is written that
+contains the 'internal state' data at the end of this run.
+.SH INCREMENTAL PROCESSING
+The \fIWebalizer\fP supports incremental run capability.  Simply
+put, this allows processing large log files by breaking them up into
+smaller pieces, and processing these pieces instead.  What this means
+in real terms is that you can now rotate your log files as often as you
+want, and still be able to produce monthly usage statistics without the
+loss of any detail.  Basically, The \fIWebalizer\fP saves and restores all
+internal data in a file named \fIwebalizer.current\fP.  This allows the
+program to 'start where it left off' so to speak, and allows the
+preservation of detail from one run to the next.  The data file is
+placed in the current output directory, and is a plain ASCII text
+file that can be viewed with any standard text editor.  It's location
+and name may be changed using the \fIIncrementalName\fP configuration
+keyword.
+.PP
+Some special precautions need to be taken when using the incremental
+run capability of The \fIWebalizer\fP.  Configuration options should not be
+changed between runs, as that could cause corruption of the internal
+data stored.  For example, changing the \fIMangleAgents\fP level will cause
+different representations of user agents to be stored, producing invalid
+results in the user agents section of the report.  If you need to change
+configuration options, do it at the end of the month after normal
+processing of the previous month and before processing the current month.
+You may also want to delete the \fIwebalizer.current\fP file as well.
+.PP
+The \fIWebalizer\fP also attempts to prevent data duplication by keeping
+track of the timestamp of the last record processed.  This timestamp
+is then compared to current records being processed, and any records
+that were logged previous to that timestamp are ignored.  This, in
+theory, should allow you to re-process logs that have already been
+processed, or process logs that contain a mix of processed/not yet
+processed records, and not produce duplication of statistics.  The
+only time this may break is if you have duplicate timestamps in two
+separate log files... any records in the second log file that do have
+the same timestamp as the last record in the previous log file processed,
+will be discarded as if they had already been processed.  There are
+lots of ways to prevent this however, for example, stopping the web
+server before rotating logs will prevent this situation.  This setup
+also necessitates that you always process logs in chronological order,
+otherwise data loss will occur as a result of the timestamp compare.
+.SH REVERSE DNS LOOKUPS
+The \fIWebalizer\fP fully supports IPv4 and IPv6 DNS lookups, and
+maintains a cache of those lookups to reduce processing the same
+addresses in subsequent runs.  The cache file can be created at
+run-time, or may be created before running the webalizer using either
+the stand alone '\fIwebazolver\fP' program, or The Webalizer (DNS)
+Cache file manager program '\fIwcmgr\fP'.  In order to perform reverse
+lookups, a \fBDNSCache\fP file must be specified, either on the command
+line or in a configuration file.  In order to create/update the cache
+file at run-time, the number of \fBDNSChildren\fP must also be specified,
+and can be anything between 1 and 100.  This specifies the number of
+child processes to be forked, each of which will perform network DNS
+queries in order to lookup up the addresses and update the cache.
+Cached entries that are older than a specified TTL (time to live)
+will be expired, and if encountered again in a log, will be looked
+up at that time in order to 'freshen' them (verify the name is still
+the same and update its timestamp).  The default TTL is 7 days, however
+may be set to anything between 1 and 100 days.  Using the '\fIwcmgr\fP'
+program, entries may also be marked as 'permanent', in which case
+they will persist (with an infinite TTL) in the cache until manually
+removed.  See the file \fBDNS.README\fP for additional information
+and examples.
+.SH GEOLOCATION LOOKUPS
+The \fIWebalizer\fP has the ability to perform geolocation lookups on
+IP addresses using either it's own internal \fIGeoDB\fP database,  or
+optionally the \fIGeoIP\fP database from MaxMind, Inc. (www.maxmind.com).
+If used, unresolved addresses will be searched for in the database and
+its country of origin will be returned if found.  This actually produces
+more accurate \fICountry\fP information than DNS lookups, since the DNS
+address space has additional \fIgcTLDs\fP that do not necessarily map
+to a specific country (such as \fI.net\fP and \fI.com\fP).  It is possible
+to use both DNS lookups and geolocation lookups at the same time, which
+will cause any addresses that could not be resolved using DNS lookups to
+then be looked up in the database, greatly reducing the number of
+\fIUnknown/Unresolved\fP entries in the generated reports.  The native
+\fIGeoDB\fP geolocation database provided by The \fIWebalizer\fP fully
+supports both \fIIPv4\fP and \fIIPv6\fP lookups, is updated regularly and
+is the preferred geolocation method for use with The \fIWebalizer\fP.  The
+most current version of the database can be obtained from our ftp site
+(\fIftp://ftp.mrunix.net/\fP).
+.SH COMMAND LINE OPTIONS
+The \fIWebalizer\fP supports many different configuration options that will
+alter the way the program behaves and generates output.  Most of these
+can be specified on the command line, while some can only be specified
+in a configuration file. The command line options are listed below,
+with references to the corresponding configuration file keywords.
+.PP
+.I General Options
+.TP 8
+.B \-h
+Display all available command line options and exit program.
+.TP 8
+.B \-v
+Be verbose.  Will cause the program to output informational
+and \fIDebug\fP messages at run-time.
+.TP 8
+.B \-V
+Display the program version and exit.  Additional program specific
+information will be displayed if \fIverbose\fP mode is also used
+(e.g. '\fI-vV\fP'), which can be useful when submitting bug reports.
+.TP 8
+.B \-d
+\fBDebug\fP.  Display debugging information for errors and warnings.
+.TP 8
+.B \-i
+\fBIgnoreHist\fP.  Ignore history.  \fBUSE WITH CAUTION\fP. This
+will cause The \fIWebalizer\fP to ignore any previous monthly history
+file only.  Incremental data (if present) is still processed.
+.TP 8
+.B \-b
+\fBIgnoreState\fP.  Ignore incremental data file.  \fBUSE WITH CAUTION\fP.
+This will cause The \fIWebalizer\fP to ignore any existing incremental
+data file.  By ignoring the incremental data file, all previous processing
+for the current month will be lost and those logs must be re-processed.
+.TP 8
+.B \-p
+\fBIncremental\fP.  Preserve internal data between runs.
+.TP 8
+.B \-q
+\fBQuiet\fP.  Suppress informational messages.  Does not suppress
+warnings or errors.
+.TP 8
+.B \-Q
+\fBReallyQuiet\fP.  Suppress all messages including warnings and errors.
+.TP 8
+.B \-T
+\fBTimeMe\fP.  Force display of timing information at end of processing.
+.TP 8
+.B \-c \fIfile\fP
+Use configuration file \fIfile\fP.
+.TP 8
+.B \-n \fIname\fP
+\fBHostName\fP.  Use the hostname \fIname\fP.
+.TP 8
+.B \-o \fIdir\fP
+\fBOutputDir\fP.  Use output directory \fIdir\fP.
+.TP 8
+.B \-t \fIname\fP
+\fBReportTitle\fP.  Use \fIname\fP for report title.
+.TP 8
+.B \-F \fP( \fBc\fPlf | \fBf\fPtp | \fBs\fPquid | \fBw\fP3c )
+\fBLogType\fP.  Specify log type to be processed.  Value can be either
+\fIc\fPlf, \fIf\fPtp, \fIs\fPquid or \fIw\fP3c format.  If not specified,
+will default to \fBCLF\fP format.  \fIFTP\fP logs must be in standard
+wu-ftpd \fIxferlog\fP format.
+.TP 8
+.B \-f
+\fBFoldSeqErr\fP.  Fold out of sequence log records back into analysis,
+by treating as if they were the same date/time as the last good record.
+Normally, out of sequence log records are simply ignored.
+.TP 8
+.B \-Y
+\fBCountryGraph\fP. Suppress country graph.
+.TP 8
+.B \-G
+\fBHourlyGraph\fP.  Suppress hourly graph.
+.TP 8
+.B \-x \fIname\fP
+\fBHTMLExtension\fP.  Defines HTML file extension to use.  If not
+specified, defaults to \fIhtml\fP.  Do not include the leading
+period.
+.TP 8
+.B \-H
+\fBHourlyStats\fP.  Suppress hourly statistics.
+.TP 8
+.B \-K \fInum\fP
+\fBIndexMonths\fP.  Specify how many months should be displayed in the
+main index (yearly summary) table.  Default is 12 months.  Can be set
+to anything between 12 and 120 months (1 to 10 years).
+.TP 8
+.B \-k \fInum\fP
+\fBGraphMonths\fP.  Specify how many months should be displayed in the
+main index (yearly summary) graph.  Default is 12 months.  Can be set
+to anything between 12 and 72 months (1 to 6 years).
+.TP 8
+.B \-L
+\fBGraphLegend\fP.  Suppress color coded graph legends.
+.TP 8
+.B \-l \fInum\fP
+\fBGraphLines\fP.  Specify number of background lines. Default
+is 2.  Use zero ('0') to disable the lines.
+.TP 8
+.B \-P \fIname\fP
+\fBPageType\fP.  Specify file extensions that are considered \fIpages\fP.
+Sometimes referred to as \fIpageviews\fP.
+.TP 8
+.B \-O \fIname\fP
+\fBOmitPage\fP.  Specify URLs to exclude from being counted as \fIpages\fP.
+.TP 8
+.B \-m \fInum\fP
+\fBVisitTimeout\fP.  Specify the Visit timeout period.  Specified in
+number of seconds.  Default is 1800 seconds (30 minutes).
+.TP 8
+.B \-I \fIname\fP
+\fBIndexAlias\fP.  Use the filename \fIname\fP as an additional alias
+for \fIindex.\fP.
+.TP 8
+.B \-M \fInum\fP
+\fBMangleAgents\fP.  Mangle user agent names according to the mangle
+level specified by \fInum\fP.  Mangle levels are:
+.RS
+.TP 12
+.B 5
+Browser name and major version.
+.TP 12
+.B 4
+Browser name, major and minor version.
+.TP 12
+.B 3
+Browser name, major version, minor version to two decimal places.
+.TP 12
+.B 2
+Browser name, major and minor versions and sub-version.
+.TP 12
+.B 1
+Browser name, version and machine type if possible.
+.TP 12
+.B 0
+All information (left unchanged).
+.RE
+.TP 8
+.B \-g \fInum\fP
+\fBGroupDomains\fP. Automatically group sites by domain.  The
+grouping level specified by \fInum\fP can be thought of as 'the
+number of dots' to display in the grouping.  The default value
+of \fB0\fP disables any domain grouping.
+.TP 8
+.B \-D \fIname\fP
+\fBDNSCache\fP.  Use the DNS cache file \fIname\fP.
+.TP 8
+.B \-N \fInum\fP
+\fBDNSChildren\fP.  Use \fInum\fP DNS children processes to perform DNS
+lookups, either creating or updating the DNS cache file.  Specify zero
+(\fB0\fP) to disable cache file creation/updates.  If given, a DNS cache
+filename must be specified.
+.TP 8
+.B \-j
+Enable \fIGeoDB\fP.  This enables the internal GeoDB geolocation services
+provided by The \fIWebalizer\fP.
+.TP 8
+.B \-J \fIname\fP
+\fBGeoDBDatabase\fP.  Use the alternate GeoDB database \fIname\fP.
+.TP 8
+.B \-w
+Enable \fIGeoIP\fP.  Enables GeoIP (by MaxMind Inc.) geolocation services.
+If native \fIGeoDB\fP services are also enabled, then this option
+will have no effect.
+.TP 8
+.B \-W \fIname\fP
+\fBGeoIPDatabase\fP.  Use the alternate GeoIP database \fIname\fP.
+.TP 8
+.B \-z \fIname\fP
+\fBFlagDir\fP.  Specify location of the country flag graphics and
+enable their display in the top country table.  The directory \fIname\fP
+is relative to the output directory being used unless an absolute path
+is given (ie: starts with a leading '/').
+.PP
+.I Hide Options
+.TP 8
+.B \-a \fIname\fP
+\fBHideAgent\fP.  Hide user agents matching \fIname\fP.
+.TP 8
+.B \-r \fIname\fP
+\fBHideReferrer\fP.  Hide referrer matching \fIname\fP.
+.TP 8
+.B \-s \fIname\fP
+\fBHideSite\fP.  Hide site matching \fIname\fP.
+.TP 8
+.B \-X
+\fBHideAllSites\fP.  Hide all individual sites (only display groups).
+.TP 8
+.B \-u \fIname\fP
+\fBHideURL\fP.  Hide URL matching \fIname\fP.
+.PP
+.I Table size options
+.TP 8
+.B \-A \fInum\fP
+\fBTopAgents\fP.  Display the top \fInum\fP user agents table.
+.TP 8
+.B \-R \fInum\fP
+\fBTopReferrers\fP.  Display the top \fInum\fP referrers table.
+.TP 8
+.B \-S \fInum\fP
+\fBTopSites\fP.  Display the top \fInum\fP sites table.
+.TP 8
+.B \-U \fInum\fP
+\fBTopURLs\fP.  Display the top \fInum\fP URLs table.
+.TP 8
+.B \-C \fInum\fP
+\fBTopCountries\fP.  Display the top \fInum\fP countries table.
+.TP 8
+.B \-e \fInum\fP
+\fBTopEntry\fP.  Display the top \fInum\fP entry pages table.
+.TP 8
+.B \-E \fInum\fP
+\fBTopExit\fP.  Display the top \fInum\fP exit pages table.
+.SH CONFIGURATION FILES
+Configuration files are standard \fBASCII(7)\fP text files that may be created
+or edited using any standard editor.  Blank lines and lines that begin
+with a pound sign ('#') are ignored.  Any other lines are considered to
+be configuration lines, and have the form "Keyword Value", where the
+\'Keyword\' is one of the currently available configuration keywords defined
+below, and 'Value' is the value to assign to that particular option.  Any
+text found after the keyword up to the end of the line is considered the
+keyword's value, so you should not include anything after the actual value
+on the line that is not actually part of the value being assigned.  The
+file \fIsample.conf\fP provided with the distribution contains lots of useful
+documentation and examples as well.
+
+.I General Configuration Keywords
+.TP 8
+.B LogFile \fIname\fP
+Use log file named \fIname\fP.  If none specified, \fISTDIN\fP will be used.
+.TP 8
+.B LogType \fIname\fP
+Specify log file type as \fIname\fP. Values can be either \fIclf\fP,
+\fIsquid\fP, \fIftp\fP or \fIw3c\fP, with the default being \fBclf\fP.
+.TP 8
+.B OutputDir \fIdir\fP
+Create output in the directory \fIdir\fP.  If none specified, the current
+directory will be used.
+.TP 8
+.B HistoryName \fIname\fP
+Filename to use for history file.  Relative to output directory unless
+absolute name is given (ie: starts with '/'). Defaults to
+\'\fBwebalizer.hist\fP' in the standard output directory.
+.TP 8
+.B ReportTitle \fIname\fP
+Use the title string \fIname\fP for the report title.  If none
+specified, use the default of (in english) "\fIUsage Statistics for \fP".
+.TP 8
+.B HostName \fIname\fP
+Set the hostname for the report as \fIname\fP.  If none specified, an
+attempt will be made to gather the hostname via a \fBuname(2)\fP system
+call.  If that fails, \fIlocalhost\fP will be used.
+.TP 8
+.B UseHTTPS \fP( yes | \fBno\fP )
+Use \fIhttps://\fP on links to URLS, instead of the default \fIhttp://\fP,
+in the '\fBTop URLs\fP' table.
+.TP 8
+.B HTAccess \fP( yes | \fBno\fP )
+Enables the creation of a default .htaccess file in the output directory.
+.TP 8
+.B Quiet \fP( yes | \fBno\fP )
+Suppress informational messages.  Warning and Error messages will not be
+suppressed.
+.TP 8
+.B ReallyQuiet \fP( yes | \fBno\fP )
+Suppress all messages, including Warning and Error messages.
+.TP 8
+.B Debug \fP( yes | \fBno\fP )
+Print extra debugging information on Warnings and Errors.
+.TP 8
+.B TimeMe \fP( yes | \fBno\fP )
+Force timing information at end of processing.
+.TP 8
+.B GMTTime \fP( yes | \fBno\fP )
+Use \fIGMT \fP(\fIUTC\fP) time instead of local timezone for reports.
+.TP 8
+.B IgnoreHist \fP( yes | \fBno\fP )
+Ignore previous monthly history file.  \fBUSE WITH CAUTION\fP.  Does
+not prevent \fIIncremental\fP file processing.
+.TP 8
+.B IgnoreState \fP( yes | \fBno\fP )
+Ignore incremental data file.  \fBUSE WITH CAUTION\fP.  By ignoring
+the incremental data file, all previous processing for the current
+month will be lost and those logs must be re-processed.
+.TP 8
+.B FoldSeqErr \fP( yes | \fBno\fP )
+Fold out of sequence log records back into analysis by treating them
+as if they had the same date/time as the last good record.  Normally,
+out of sequence log records are ignored.
+.TP 8
+.B CountryGraph \fP( \fByes\fP | no )
+Display Country Usage Graph in output report.
+.TP 8
+.B CountryFlags \fP( yes | \fBno\fP )
+Enable or disable the display of flags in the top country table.
+.TP 8
+.B FlagDir \fIname\fP
+Specifies the directory \fIname\fP where the flag graphics are located.
+If not specified, the default is in the \fIflags\fP directory directly
+under the output directory being used.  If specified, the display of
+country flags will be enabled by default.  Using '\fIFlagDir flags\fP'
+is identical to using '\fICountryFlags yes\fP'.
+.TP 8
+.B DailyGraph \fP( \fByes\fP | no )
+Display Daily Graph in output report.
+.TP 8
+.B DailyStats \fP( \fByes\fP | no )
+Display Daily Statistics in output report.
+.TP 8
+.B HourlyGraph \fP( \fByes\fP | no )
+Display Hourly Graph in output report.
+.TP 8
+.B HourlyStats \fP( \fByes\fP | no )
+Display Hourly Statistics in output report.
+.TP 8
+.B PageType \fIname\fP
+Define the file extensions to consider as a \fIpage\fP.  If a file
+is found to have the same extension as \fIname\fP, it will be counted
+as a \fIpage\fP (sometimes called a \fIpageview\fP).
+.TP 8
+.B PagePrefix \fIname\fP
+Allows URLs with the prefix \fIname\fP to be counted as a \fIpage\fP
+type regardless of actual file type.  This allows you to treat contents
+under specified directories as pages no matter what their extension is.  
+.TP 8
+.B OmitPage \fIname\fP
+Specifies URLs which should not be counted as pages, regardless of their
+extension (or lack thereof).
+.TP 8
+.B GraphLegend \fP( \fByes\fP | no )
+Allows the color coded graph legends to be enabled/disabled.
+.TP 8
+.B GraphLines \fInum\fP
+Specify the number of background reference lines displayed on the
+graphs produced.  Disable by using zero ('\fB0\fP'), default is \fB2\fP.
+.TP 8
+.B IndexMonths \fInum\fP
+Specify the number of months to display in the main index (yearly summary)
+table.  Default is 12 months.  Can be set to anything between 12 and 120
+months (1 to 10 years).
+.TP 8
+.B YearHeaders \fP( \fByes\fP | no )
+Enable/disable the display of year headers in the main index (yearly
+summary) table.  If enabled, year headers will be shown when the table
+is displaying more than 16 months worth of data.  Values can be 'yes'
+or 'no'.  Default is 'yes'.
+.TP 8
+.B YearTotals \fP( \fByes\fP | no )
+Enable/disable the display of year totals in the main index (yearly
+summary) table.  If enabled, year totals will be shown when the table
+is displaying more than 16 months worth of data.  Values can be 'yes'
+or 'no'.  Default is 'yes'.
+.TP 8
+.B GraphMonths \fInum\fP
+Specify the number of months to display in the main index (yearly
+summary) graph.  Default is 12 months.  Can be set to anything between
+12 and 72 months (1 to 6 years).
+.TP 8
+.B VisitTimeout \fInum\fP
+Specifies the visit timeout value.  Default is \fI1800 seconds\fP (30
+minutes).  A visit is determined by looking at the difference in time
+between the current and last request from a specific site.  If the
+difference is greater or equal to the timeout value, the request is
+counted as a new visit.  Specified in seconds.
+.TP 8
+.B IndexAlias \fIname\fP
+Use \fIname\fP as an additional alias for \fIindex.*\fP.
+.TP 8
+.B DefaultIndex \fP( \fByes\fP | no )
+Enables or disables the use of '\fBindex.\fP' as a default index name
+to be stripped from the end of URLs.  This does not effect any index
+names that may be defined with the \fIIndexAlias\fP option.
+.TP 8
+.B MangleAgents \fInum\fP
+Mangle user agent names based on mangle level \fInum\fP.  See the
+\fI-M\fP command line switch for mangle levels and their meaning.
+The default is \fB0\fP, which doesn't mangle user agents at all.
+.TP 8
+.B StripCGI \fP( \fByes\fP | no )
+Determines if URL CGI variables should be stripped from the end of
+URLs.  Values may be 'yes' or 'no', with the default being 'yes'.
+.TP 8
+.B TrimSquidURL \fInum\fP
+Allows squid log URLs to be reduced in granularity by truncating
+them after \fInum\fP slashes ('/') after the http:// prefix.  A
+setting of one (1) will cause all URLs to be summarized by domain
+only.  The default value is zero (0), which will disable any URL
+modifications and leave them exactly as found in the log file.
+.TP 8
+.B SearchEngine\fP \fIname\fP \fIvariable\fP
+Allows the specification of search engines and their query strings.
+The \fIname\fP is the name to match against the referrer string for
+a given search engine.  The \fIvariable\fP is the cgi variable that
+the search engine uses for queries.  See the \fBsample.conf\fP file
+for example usage with common search engines.
+.TP 8
+.B SearchCaseI\fP ( \fByes\fP | no )
+Determines if search strings should be treated case insensitive or
+not.  The default is 'yes', which lowercases all search strings
+(treat as case insensitive).
+.TP 8
+.B Incremental \fP( yes | \fBno\fP )
+Enable Incremental mode processing.
+.TP 8
+.B IncrementalName \fIname\fP
+Filename to use for incremental data.  Relative to output directory unless
+an absolute name is given (ie: starts with '/').  Defaults to 
+\'\fBwebalizer.current\fP' in the standard output directory.
+.TP 8
+.B DNSCache \fIname\fP
+Filename to use for the DNS cache.  Relative to output directory unless
+an absolute name is given (ie: starts with '/').
+.TP 8
+.B DNSChildren \fInum\fP
+Number of children DNS processes to run in order to create/update the
+DNS cache file.  Specify zero (\fB0\fP) to disable.
+.TP 8
+.B CacheIPs \fP( yes | \fBno\fP )
+Cache unresolved IP addresses in the DNS database.  Default is '\fBno\fP'.
+.TP 8
+.B CacheTTL \fInum\fP
+DNS cache entry time to live (TTL) in days.  Default is 7 days.  May
+be any value between 1 and 100.
+.TP 8
+.B GeoDB \fP( yes | \fBno\fP )
+Allows native GeoDB geolocation services to be enabled or disabled.
+Default value is '\fBno\fP'.
+.TP 8
+.B GeoDBDatabase \fIname\fP
+Allows the use of an alternate GeoDB database \fIname\fP.  If not
+specified, the default database will be used.
+.TP 8
+.B GeoIP \fP( yes | \fBno\fP )
+Allows GeoIP (by MaxMind Inc.) geolocation services to be enabled or
+disabled.  Default is '\fBno\fP'.  If native \fIGeoDB\fP geolocation
+services are also enabled, then this option will have no effect (and
+the native \fIGeoDB\fP services will be used).
+.TP 8
+.B GeoIPDatabase \fIname\fP
+Allows the use of an alternate GeoIP database \fIname\fP.  If not
+specified, the default database will be used.
+.PP
+.I Top Table Keywords
+.TP 8
+.B TopAgents \fInum\fP
+Display the top \fInum\fP User Agents table. Use zero to disable.
+.TP 8
+.B AllAgents \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP User Agents.
+.TP 8
+.B TopReferrers \fInum\fP
+Display the top \fInum\fP Referrers table. Use zero to disable.
+.TP 8
+.B AllReferrers \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP Referrers.
+.TP 8
+.B TopSites \fInum\fP
+Display the top \fInum\fP Sites table. Use zero to disable.
+.TP 8
+.B TopKSites \fInum\fP
+Display the top \fInum\fP Sites (by KByte) table.  Use zero to disable.
+.TP 8
+.B AllSites \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP Sites.
+.TP 8
+.B TopURLs \fInum\fP
+Display the top \fInum\fP URLs table. Use zero to disable.
+.TP 8
+.B TopKURLs \fInum\fP
+Display the top \fInum\fP URLs (by KByte) table.  Use zero to disable.
+.TP 8
+.B AllURLs \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP URLs.
+.TP 8
+.B TopCountries \fInum\fP
+Display the top \fInum\fP Countries in the table. Use zero to disable.
+.TP 8
+.B TopEntry \fInum\fP
+Display the top \fInum\fP Entry Pages in the table.  Use zero to disable.
+.TP 8
+.B TopExit \fInum\fP
+Display the top \fInum\fP Exit Pages in the table.  Use zero to disable.
+.TP 8
+.B TopSearch \fInum\fP
+Display the top \fInum\fP Search Strings in the table.  Use zero to disable.
+.TP 8
+.B AllSearchStr \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP Search Strings.
+.TP 8
+.B TopUsers \fInum\fP
+Display the top \fInum\fP Usernames in the table.  Use zero to disable.
+Usernames are only available if using http based authentication.
+.TP 8
+.B AllUsers \fP( yes | \fBno\fP )
+Create separate HTML page with \fBAll\fP Usernames.
+.PP
+.I Hide/Ignore/Group/Include Keywords
+.TP 8
+.B HideAgent \fIname\fP
+Hide User Agents that match \fIname\fP.
+.TP 8
+.B HideReferrer \fIname\fP
+Hide Referrers that match \fIname\fP.
+.TP 8
+.B HideSite \fIname\fP
+Hide Sites that match \fIname\fP.
+.TP 8
+.B HideAllSites \fP( yes | \fBno\fP )
+Hide all individual sites.  This causes only grouped sites to be displayed.
+.TP 8
+.B HideURL \fIname\fP
+Hide URLs that match \fIname\fP.
+.TP 8
+.B HideUser \fIname\fP
+Hide Usernames that match \fIname\fP.
+.TP 8
+.B IgnoreAgent \fIname\fP
+Ignore User Agents that match \fIname\fP.
+.TP 8
+.B IgnoreReferrer \fIname\fP
+Ignore Referrers that match \fIname\fP.
+.TP 8
+.B IgnoreSite \fIname\fP
+Ignore Sites that match \fIname\fP.
+.TP 8
+.B IgnoreURL \fIname\fP
+Ignore URLs that match \fIname\fP.
+.TP 8
+.B IgnoreUser \fIname\fP
+Ignore Usernames that match \fIname\fP.
+.TP 8
+.B GroupAgent \fIname\fP [\fILabel\fP]
+Group User Agents that match \fIname\fP.  Display \fILabel\fP in 'Top Agent'
+table if given (instead of \fIname\fP).  \fIname\fP may be enclosed in quotes.
+.TP 8
+.B GroupReferrer \fIname\fP [\fILabel\fP]
+Group Referrers that match \fIname\fP.  Display \fILabel\fP in 'Top Referrer'
+table if given (instead of \fIname\fP).  \fIname\fP may be enclosed in quotes.
+.TP 8
+.B GroupSite \fIname\fP [\fILabel\fP]
+Group Sites that match \fIname\fP.  Display \fILabel\fP in 'Top Site'
+table if given (instead of \fIname\fP).  \fIname\fP may be enclosed in quotes.
+.TP 8
+.B GroupDomains \fInum\fP
+Automatically group sites by domain.  The value \fInum\fP specifies the
+level of grouping, and can be thought of as the 'number of dots' to
+be displayed.  The default value of \fB0\fP disables domain grouping.
+.TP 8
+.B GroupURL \fIname\fP [\fILabel\fP]
+Group URLs that match \fIname\fP.  Display \fILabel\fP in 'Top URL'
+table if given (instead of \fIname\fP).  \fIname\fP may be enclosed in quotes.
+.TP 8
+.B GroupUser \fIname\fP [\fILabel\fP]
+Group Usernames that match \fIname\fP.  Display \fILabel\fP in 'Top
+Usernames' table if given (instead of \fIname\fP).  \fIname\fP may be
+enclosed in quotes.
+.TP 8
+.B IncludeSite \fIname\fP
+Force inclusion of sites that match \fIname\fP.  Takes precedence
+over \fBIgnore*\fP keywords.
+.TP 8
+.B IncludeURL \fIname\fP
+Force inclusion of URLs that match \fIname\fP.  Takes precedence
+over \fBIgnore*\fP keywords.
+.TP 8
+.B IncludeReferrer \fIname\fP
+Force inclusion of Referrers that match \fIname\fP.  Takes precedence
+over \fBIgnore*\fP keywords.
+.TP 8
+.B IncludeAgent \fIname\fP
+Force inclusion of User Agents that match \fIname\fP.  Takes precedence
+over \fBIgnore*\fP keywords.
+.TP 8
+.B IncludeUser \fIname\fP
+Force inclusion of Usernames that match \fIname\fP.  Takes precedence
+over \fBIgnore*\fP keywords.
+.PP
+.I HTML Generation Keywords
+.TP 8
+.B HTMLExtension \fItext\fP
+Defines the HTML file extension to use.  Default is \fIhtml\fP.  Do not
+include the leading period!
+.TP 8
+.B HTMLPre \fItext\fP
+Insert \fItext\fP at the very beginning of the generated HTML file.
+Defaults to a standard html 3.2 \fIDOCTYPE\fP record.
+.TP 8
+.B HTMLHead \fItext\fP
+Insert \fItext\fP within the <HEAD></HEAD> block of the HTML file.
+.TP 8
+.B HTMLBody \fItext\fP
+Insert \fItext\fP in HTML page, starting with the <BODY> tag.  If used, the
+first line must be a \fI<BODY ...>\fP tag.  Multiple lines may be specified.
+.TP 8
+.B HTMLPost \fItext\fP
+Insert \fItext\fP at top (before horiz. rule) of HTML pages.  Multiple lines
+may be specified.
+.TP 8
+.B HTMLTail \fItext\fP
+Insert \fItext\fP at bottom of the HTML page.  The \fItext\fP is top and
+right aligned within a table column at the end of the report.
+.TP 8
+.B HTMLEnd \fItext\fP
+Insert \fItext\fP at the very end of the HTML page.  If not specified,
+the default is to insert the ending </BODY> and </HTML> tags.  If used,
+you \fImust\fP supply these tags yourself.
+.TP 8
+.B LinkReferrer \fP( yes | \fBno\fP )
+Determines if the referrers listed in the top referrers table should be
+displayed as plain text, or as a link to the referrer URL.
+.TP 8
+.B ColorHit \fP( rrggbb | \fB00805c\fP )
+Sets the graph's hit-color to the specified html color (no '#').
+.TP 8
+.B ColorFile \fP( rrggbb | \fB0040ff\fP )
+Sets the graph's file-color to the specified html color (no '#').
+.TP 8
+.B ColorSite \fP( rrggbb | \fBff8000\fP )
+Sets the graph's site-color to the specified html color (no '#').
+.TP 8
+.B ColorKbyte \fP( rrggbb | \fBff0000\fP )
+Sets the graph's kilobyte-color to the specified html color (no '#').
+.TP 8
+.B ColorPage \fP( rrggbb | \fB00e0ff\fP )
+Sets the graph's page-color to the specified html color (no '#').
+.TP 8
+.B ColorVisit \fP( rrggbb | \fBffff00\fP )
+Sets the graph's visit-color to the specified html color (no '#').
+.TP 8
+.B ColorMisc \fP( rrggbb | \fB00e0ff\fP )
+Sets the 'miscellaneous' color for table headers (not graphs) to
+the specified html color (no '#').
+.TP 8
+.B PieColor1 \fP( rrggbb | \fB800080\fP )
+Sets the pie's first optional color to the specified html color (no '#').
+.TP 8
+.B PieColor2 \fP( rrggbb | \fB80ffc0\fP )
+Sets the pie's second optional color to the specified html color (no '#').
+.TP 8
+.B PieColor3 \fP( rrggbb | \fBff00ff\fP )
+Sets the pie's third optional color to the specified html color (no '#').
+.TP 8
+.B PieColor4 \fP( rrggbb | \fBffc480\fP )
+Sets the pie's fourth optional color to the specified html color (no '#').
+.PP
+.I Dump Object Keywords
+.PP
+The \fIWebalizer\fP allows you to export processed data to other programs by
+using \fItab delimited\fP text files.  The \fIDump*\fP commands specify
+which files are to be written, and where.
+.TP 8
+.B DumpPath \fIname\fP
+Save dump files in directory \fIname\fP.  If not specified, the default
+output directory will be used.  Do not specify a trailing slash ('/').
+.TP 8
+.B DumpExtension \fIname\fP
+Use \fIname\fP as the filename extension for dump files.  If not given,
+the default of \fBtab\fP will be used.
+.TP 8
+.B DumpHeader \fP( yes | \fBno\fP )
+Print a column header as the first record of the file.
+.TP 8
+.B DumpSites \fP( yes | \fBno\fP )
+Dump the sites data to a tab delimited file.
+.TP 8
+.B DumpURLs \fP( yes | \fBno\fP )
+Dump the url data to a tab delimited file.
+.TP 8
+.B DumpReferrers \fP( yes | \fBno\fP )
+Dump the referrer data to a tab delimited file.  This data is only
+available if using a log that contains referrer information
+(ie: a combined format web log).
+.TP 8
+.B DumpAgents \fP( yes | \fBno\fP )
+Dump the user agent data to a tab delimited file.  This data is only
+available if using a log that contains user agent information
+(ie: a combined format web log).
+.TP 8
+.B DumpUsers \fP( yes | \fBno\fP )
+Dump the username data to a tab delimited file.  This data is only available
+if processing a wu-ftpd xferlog or a web log that contains http authentication
+information.
+.TP 8
+.B DumpSearchStr \fP( yes | \fBno\fP )
+Dump the search string data to a tab delimited file.  This data is only
+available if processing a web log that contains referrer information and
+had search string information present.
+.SH FILES
+.TP 20
+.I webalizer.conf
+Default configuration file.  Is searched for in the current directory
+and if not found, in the \fI/etc/\fP directory.
+.TP 20
+.I webalizer.hist
+Monthly history file for previous months.  (can be changed)
+.TP 20
+.I webalizer.current
+Current state data file (Incremental processing).  (can be changed)
+.TP 20
+.I xxxxx_YYYYMM.html
+Various monthly \fIHTML\fP output files produced. (extension can be changed)
+.TP 20
+.I xxxxx_YYYYMM.png
+Various monthly image files used in the reports.
+.TP 20
+.I xxxxx_YYYYMM.tab
+Monthly tab delimited text files.  (extension can be changed)
+.SH BUGS
+Please report bugs to the author.
+.SH COPYRIGHT
+Copyright (C) 1997-2011 by Bradford L. Barrett.  Distributed under
+the GNU GPL.  See the files "\fICOPYING\fP" and "\fICopyright\fP",
+supplied with all distributions for additional information.
+.SH AUTHOR
+Bradford L. Barrett <\fIbrad at mrunix dot net\fP>
diff --git a/webalizer.LSM b/webalizer.LSM
new file mode 100644 (file)
index 0000000..f975c40
--- /dev/null
@@ -0,0 +1,26 @@
+Begin3
+Title:         The Webalizer 
+Version:       2.20
+Entered-date:  01JUN2008
+Description:   A fast, free web server log file analysis program.  Produces
+               HTML output for viewing with a web browser.  Written in C on
+               a Linux platform, however designed to be as ANSI/POSIX
+               compliant as possible so porting to other UNIX platforms should
+               be painless.  Binary distributions for most popular platforms
+               are available.  Features multiple language support, incremental
+               processing capabilities, reverse DNS lookup support, native
+               geolocation support as well as geolocation support via the
+               optional GeoIP library and database from MaxMind Inc., data
+               export via tab delimited ASCII files to popular databases and
+               spreadsheets, and much more.  Supports all standard CLF and
+               combined web logs, wu-ftpd xferlog, squid proxy and extended
+               W3C format logs, all of which can be either in standard text
+               format or compressed using gzip or bzip2.
+Keywords:      Web Analysis, Log Analysis, Linux, Unix, apache, wcmgr, GeoDB
+Author:        Bradford L. Barrett 
+Maintained-by: Bradford L. Barrett 
+Primary-site:  http://www.webalizer.org/
+Original-site: ftp://ftp.webalizer.org/pub/webalizer/
+Platforms:     Linux/Unix, OS/2, Win32, MacOSX, POSIX
+Copying-policy: GPL
+End
diff --git a/webalizer.c b/webalizer.c
new file mode 100644 (file)
index 0000000..702c532
--- /dev/null
@@ -0,0 +1,2479 @@
+/*
+    webalizer - a web server log analysis program
+
+    Copyright (C) 1997-2011  Bradford L. Barrett
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version, and provided that the above
+    copyright and permission notice is included with all distributed
+    copies of this or derived software.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+*/
+
+/*********************************************/
+/* STANDARD INCLUDES                         */
+/*********************************************/
+
+/* Fix broken Zlib 64 bitness */
+#if _FILE_OFFSET_BITS == 64
+#ifndef _LARGEFILE64_SOURCE
+#define _LARGEFILE64_SOURCE 1
+#endif
+#endif
+
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>                           /* normal stuff             */
+#include <locale.h>
+#include <ctype.h>
+#include <sys/utsname.h>
+#include <zlib.h>
+#include <sys/stat.h>
+
+/* ensure getopt */
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+/* ensure sys/types */
+#ifndef _SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+/* Need socket header? */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/* some systems need this */
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#ifdef USE_DNS
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <db.h>
+#endif  /* USE_DNS */
+
+#ifdef USE_GEOIP
+#include <GeoIP.h>
+#endif
+
+#ifdef USE_BZIP
+#include <bzlib.h>
+int bz2_rewind(void **, char *, char *);
+#endif
+
+#include "webalizer.h"                         /* main header              */
+#include "output.h"
+#include "parser.h"
+#include "preserve.h"
+#include "hashtab.h"
+#include "linklist.h"
+#include "webalizer_lang.h"                    /* lang. support            */
+#ifdef USE_DNS
+#include "dns_resolv.h"
+#endif
+
+/* internal function prototypes */
+
+void    clear_month();                              /* clear monthly stuff */
+char    *unescape(char *);                          /* unescape URLs       */
+void    print_opts(char *);                         /* print options       */
+void    print_version();                            /* duhh...             */
+int     isurlchar(unsigned char, int);              /* valid URL char fnc. */
+void    get_config(char *);                         /* Read a config file  */
+static  char *save_opt(char *);                     /* save conf option    */
+void    srch_string(char *);                        /* srch str analysis   */
+char   *get_domain(char *);                        /* return domain name  */
+void    agent_mangle(char *);                       /* reformat user agent */
+char    *our_gzgets(void *, char *, int);           /* our gzgets          */
+int     ouricmp(char *, char *);                    /* case ins. compare   */
+int     isipaddr(char *);                           /* is IP address test  */
+
+/*********************************************/
+/* GLOBAL VARIABLES                          */
+/*********************************************/
+
+char    *version     = "2.23";                /* program version          */
+char    *editlvl     = "05";                  /* edit level               */
+char    *moddate     = "14-Apr-2011";         /* modification date        */
+char    *copyright   = "Copyright 1997-2011 by Bradford L. Barrett";
+
+int     verbose      = 2;                     /* 2=verbose,1=err, 0=none  */ 
+int     debug_mode   = 0;                     /* debug mode flag          */
+int     time_me      = 0;                     /* timing display flag      */
+int     local_time   = 1;                     /* 1=localtime 0=GMT (UTC)  */
+int     hist_gap     = 0;                     /* 1=error w/hist, save bkp */
+int     ignore_hist  = 0;                     /* history flag (1=skip)    */
+int     ignore_state = 0;                     /* state flag (1=skip)      */
+int     default_index= 1;                     /* default index. (1=yes)   */
+int     hourly_graph = 1;                     /* hourly graph display     */
+int     hourly_stats = 1;                     /* hourly stats table       */
+int     daily_graph  = 1;                     /* daily graph display      */
+int     daily_stats  = 1;                     /* daily stats table        */
+int     ctry_graph   = 1;                     /* country graph display    */
+int     shade_groups = 1;                     /* Group shading 0=no 1=yes */
+int     hlite_groups = 1;                     /* Group hlite 0=no 1=yes   */
+int     mangle_agent = 0;                     /* mangle user agents       */
+int     incremental  = 0;                     /* incremental mode 1=yes   */
+int     use_https    = 0;                     /* use 'https://' on URLs   */
+int     htaccess     = 0;                     /* create .htaccess? (0=no) */
+int     stripcgi     = 1;                     /* strip url cgi (0=no)     */
+int     normalize    = 1;                     /* normalize CLF URL (0=no) */
+int     trimsquid    = 0;                     /* trim squid urls (0=no)   */
+int     searchcasei  = 1;                     /* case insensitive search  */
+int     visit_timeout= 1800;                  /* visit timeout (seconds)  */
+int     graph_legend = 1;                     /* graph legend (1=yes)     */
+int     graph_lines  = 2;                     /* graph lines (0=none)     */
+int     fold_seq_err = 0;                     /* fold seq err (0=no)      */
+int     log_type     = LOG_CLF;               /* log type (default=CLF)   */
+int     group_domains= 0;                     /* Group domains 0=none     */
+int     hide_sites   = 0;                     /* Hide ind. sites (0=no)   */
+int     link_referrer= 0;                     /* Link referrers (0=no)    */
+char    *hname       = NULL;                  /* hostname for reports     */
+char    *state_fname = "webalizer.current";   /* run state file name      */
+char    *hist_fname  = "webalizer.hist";      /* name of history file     */
+char    *html_ext    = "html";                /* HTML file suffix         */
+char    *dump_ext    = "tab";                 /* Dump file suffix         */
+char    *conf_fname  = NULL;                  /* name of config file      */
+char    *log_fname   = NULL;                  /* log file pointer         */
+char    *out_dir     = NULL;                  /* output directory         */
+char    *blank_str   = "";                    /* blank string             */
+char    *geodb_fname = NULL;                  /* GeoDB database filename  */
+char    *dns_cache   = NULL;                  /* DNS cache file name      */
+int     dns_children = 0;                     /* DNS children (0=don't do)*/
+int     cache_ips    = 0;                     /* CacheIPs in DB (0=no)    */
+int     cache_ttl    = 7;                     /* DNS Cache TTL (days)     */
+int     geodb        = 0;                     /* Use GeoDB (0=no)         */
+int     graph_mths   = 12;                    /* # months in index graph  */
+int     index_mths   = 12;                    /* # months in index table  */
+int     year_hdrs    = 1;                     /* index year seperators    */
+int     year_totals  = 1;                     /* index year subtotals     */
+int     use_flags    = 0;                     /* Show flags in ctry table */
+char    *flag_dir    = "flags";               /* location of flag icons   */
+
+#ifdef USE_GEOIP
+int     geoip        = 0;                     /* Use GeoIP (0=no)         */
+char    *geoip_db    = NULL;                  /* GeoIP database filename  */
+GeoIP   *geo_fp      = NULL;                  /* GeoIP database handle    */
+#endif
+
+int     ntop_sites   = 30;                    /* top n sites to display   */
+int     ntop_sitesK  = 10;                    /* top n sites (by kbytes)  */
+int     ntop_urls    = 30;                    /* top n url's to display   */
+int     ntop_urlsK   = 10;                    /* top n url's (by kbytes)  */
+int     ntop_entry   = 10;                    /* top n entry url's        */
+int     ntop_exit    = 10;                    /* top n exit url's         */
+int     ntop_refs    = 30;                    /* top n referrers ""       */
+int     ntop_agents  = 15;                    /* top n user agents ""     */
+int     ntop_ctrys   = 30;                    /* top n countries   ""     */
+int     ntop_search  = 20;                    /* top n search strings     */
+int     ntop_users   = 20;                    /* top n users to display   */
+
+int     all_sites    = 0;                     /* List All sites (0=no)    */
+int     all_urls     = 0;                     /* List All URLs  (0=no)    */
+int     all_refs     = 0;                     /* List All Referrers       */
+int     all_agents   = 0;                     /* List All User Agents     */
+int     all_search   = 0;                     /* List All Search Strings  */
+int     all_users    = 0;                     /* List All Usernames       */
+
+int     dump_sites   = 0;                     /* Dump tab delimited sites */
+int     dump_urls    = 0;                     /* URLs                     */
+int     dump_refs    = 0;                     /* Referrers                */
+int     dump_agents  = 0;                     /* User Agents              */
+int     dump_users   = 0;                     /* Usernames                */
+int     dump_search  = 0;                     /* Search strings           */
+int     dump_header  = 0;                     /* Dump header as first rec */
+char    *dump_path   = NULL;                  /* Path for dump files      */
+
+int        cur_year=0, cur_month=0,           /* year/month/day/hour      */
+           cur_day=0, cur_hour=0,             /* tracking variables       */
+           cur_min=0, cur_sec=0;
+
+u_int64_t  cur_tstamp=0;                      /* Timestamp...             */
+u_int64_t  rec_tstamp=0;  
+u_int64_t  req_tstamp=0;
+u_int64_t  epoch;                             /* used for timestamp adj.  */
+
+int        check_dup=0;                       /* check for dup flag       */
+int        gz_log=COMP_NONE;                  /* gziped log? (0=no)       */
+
+double     t_xfer=0.0;                        /* monthly total xfer value */
+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    */
+
+u_int64_t  tm_hit[31], tm_file[31],           /* daily total arrays       */
+           tm_site[31], tm_page[31],
+           tm_visit[31];
+
+u_int64_t  dt_site;                           /* daily 'sites' total      */
+
+u_int64_t  ht_hit=0, mh_hit=0;                /* hourly hits totals       */
+
+u_int64_t  th_hit[24], th_file[24],           /* hourly total arrays      */
+           th_page[24];
+
+double     th_xfer[24];
+
+int        f_day,l_day;                       /* first/last day vars      */
+
+struct     utsname system_info;               /* system info structure    */
+
+u_int64_t  ul_bogus =0;                       /* Dummy counter for groups */
+
+struct     log_struct log_rec;                /* expanded log storage     */
+
+void       *zlog_fp;                          /* compressed logfile ptr   */
+FILE       *log_fp;                           /* regular logfile pointer  */
+
+char       buffer[BUFSIZE];                   /* log file record buffer   */
+char       tmp_buf[BUFSIZE];                  /* used to temp save above  */
+
+CLISTPTR   *top_ctrys    = NULL;              /* Top countries table      */
+
+#define    GZ_BUFSIZE 16384                   /* our_getfs buffer size    */
+char       f_buf[GZ_BUFSIZE];                 /* our_getfs buffer         */
+char       *f_cp=f_buf+GZ_BUFSIZE;            /* pointer into the buffer  */
+int        f_end=0;                           /* count to end of buffer   */ 
+
+char    hit_color[]   = "#00805c";            /* graph hit color          */
+char    file_color[]  = "#0040ff";            /* graph file color         */
+char    site_color[]  = "#ff8000";            /* graph site color         */
+char    kbyte_color[] = "#ff0000";            /* graph kbyte color        */
+char    page_color[]  = "#00e0ff";            /* graph page color         */
+char    visit_color[] = "#ffff00";            /* graph visit color        */
+char    misc_color[]  = "#00e0ff";            /* graph misc color         */
+char    pie_color1[]  = "#800080";            /* pie additionnal color 1  */
+char    pie_color2[]  = "#80ffc0";            /* pie additionnal color 2  */
+char    pie_color3[]  = "#ff00ff";            /* pie additionnal color 3  */
+char    pie_color4[]  = "#ffc080";            /* pie additionnal color 4  */
+
+/*********************************************/
+/* MAIN - start here                         */
+/*********************************************/
+
+int main(int argc, char *argv[])
+{
+   int      i;                           /* generic counter             */
+   char     *cp1, *cp2, *cp3;            /* generic char pointers       */
+   char     host_buf[MAXHOST+1];         /* used to save hostname       */
+
+   NLISTPTR lptr;                        /* generic list pointer        */
+
+   extern char *optarg;                  /* used for command line       */
+   extern int optind;                    /* parsing routine 'getopt'    */
+   extern int opterr;
+
+   time_t start_time, end_time;          /* program timers              */
+   float  temp_time;                     /* temporary time storage      */
+
+   int    rec_year,rec_month=1,rec_day,rec_hour,rec_min,rec_sec;
+
+   int       good_rec    =0;             /* 1 if we had a good record   */
+   u_int64_t total_rec   =0;             /* Total Records Processed     */
+   u_int64_t total_ignore=0;             /* Total Records Ignored       */
+   u_int64_t total_bad   =0;             /* Total Bad Records           */
+
+   int    max_ctry;                      /* max countries defined       */
+
+   /* month names used for parsing logfile (shouldn't be lang specific) */
+   char *log_month[12]={ "jan", "feb", "mar",
+                         "apr", "may", "jun",
+                         "jul", "aug", "sep",
+                         "oct", "nov", "dec"};
+
+   /* stat struct for files */
+   struct stat log_stat;
+
+   /* Assume that LC_CTYPE is what the user wants for non-ASCII chars   */
+   setlocale(LC_CTYPE,"");
+
+   /* initalize epoch */
+   epoch=jdate(1,1,1970);                /* used for timestamp adj.     */
+
+   sprintf(tmp_buf,"%s/webalizer.conf",ETCDIR);
+   /* check for default config file */
+   if (!access("webalizer.conf",F_OK))
+      get_config("webalizer.conf");
+   else if (!access(tmp_buf,F_OK))
+      get_config(tmp_buf);
+
+   /* get command line options */
+   opterr = 0;     /* disable parser errors */
+   while ((i=getopt(argc,argv,"a:A:bc:C:dD:e:E:fF:g:GhHiI:jJ:k:K:l:Lm:M:n:N:o:O:pP:qQr:R:s:S:t:Tu:U:vVwW:x:XYz:Z"))!=EOF)
+   {
+      switch (i)
+      {
+        case 'a': add_nlist(optarg,&hidden_agents); break; /* Hide agents   */
+        case 'A': ntop_agents=atoi(optarg);  break;  /* Top agents          */
+        case 'b': ignore_state=1;            break;  /* Ignore state file   */
+        case 'c': get_config(optarg);        break;  /* Config file         */
+        case 'C': ntop_ctrys=atoi(optarg);   break;  /* Top countries       */
+        case 'd': debug_mode=1;              break;  /* Debug               */
+       case 'D': dns_cache=optarg;          break;  /* DNS Cache filename  */
+        case 'e': ntop_entry=atoi(optarg);   break;  /* Top entry pages     */
+        case 'E': ntop_exit=atoi(optarg);    break;  /* Top exit pages      */
+        case 'f': fold_seq_err=1;            break;  /* Fold sequence errs  */
+        case 'F': log_type=(tolower(optarg[0])=='f')?
+                   LOG_FTP:(tolower(optarg[0])=='s')?
+                   LOG_SQUID:(tolower(optarg[0])=='w')?
+                   LOG_W3C:LOG_CLF;          break;  /* define log type     */
+       case 'g': group_domains=atoi(optarg); break; /* GroupDomains (0=no) */
+        case 'G': hourly_graph=0;            break;  /* no hourly graph     */
+        case 'h': print_opts(argv[0]);       break;  /* help                */
+        case 'H': hourly_stats=0;            break;  /* no hourly stats     */
+        case 'i': ignore_hist=1;             break;  /* Ignore history      */
+        case 'I': add_nlist(optarg,&index_alias); break; /* Index alias     */
+        case 'j': geodb=1;                   break;  /* Enable GeoDB        */
+        case 'J': geodb_fname=optarg;        break;  /* GeoDB db filename   */
+        case 'k': graph_mths=atoi(optarg);   break;  /* # months idx graph  */
+        case 'K': index_mths=atoi(optarg);   break;  /* # months idx table  */
+        case 'l': graph_lines=atoi(optarg);  break;  /* Graph Lines         */
+        case 'L': graph_legend=0;            break;  /* Graph Legends       */
+        case 'm': visit_timeout=atoi(optarg); break; /* Visit Timeout       */
+        case 'M': mangle_agent=atoi(optarg); break;  /* mangle user agents  */
+        case 'n': hname=optarg;              break;  /* Hostname            */
+        case 'N': dns_children=atoi(optarg); break;  /* # of DNS children   */
+        case 'o': out_dir=optarg;            break;  /* Output directory    */
+        case 'O': add_nlist(optarg,&omit_page); break; /* pages not counted */
+        case 'p': incremental=1;             break;  /* Incremental run     */
+        case 'P': add_nlist(optarg,&page_type); break; /* page view types   */
+        case 'q': verbose=1;                 break;  /* Quiet (verbose=1)   */
+        case 'Q': verbose=0;                 break;  /* Really Quiet        */
+        case 'r': add_nlist(optarg,&hidden_refs);   break; /* Hide referrer */
+        case 'R': ntop_refs=atoi(optarg);    break;  /* Top referrers       */
+        case 's': add_nlist(optarg,&hidden_sites);  break; /* Hide site     */
+        case 'S': ntop_sites=atoi(optarg);   break;  /* Top sites           */
+        case 't': msg_title=optarg;          break;  /* Report title        */
+        case 'T': time_me=1;                 break;  /* TimeMe              */
+        case 'u': add_nlist(optarg,&hidden_urls);   break; /* hide URL      */
+        case 'U': ntop_urls=atoi(optarg);    break;  /* Top urls            */
+        case 'v': verbose=2; debug_mode=1;   break;  /* Verbose             */
+        case 'V': print_version();           break;  /* Version             */
+#ifdef USE_GEOIP
+        case 'w': geoip=1;                   break;  /* Enable GeoIP        */
+        case 'W': geoip_db=optarg;           break;  /* GeoIP database name */
+#endif
+        case 'x': html_ext=optarg;           break;  /* HTML file extension */
+        case 'X': hide_sites=1;              break;  /* Hide ind. sites     */
+        case 'Y': ctry_graph=0;              break;  /* Supress ctry graph  */
+        case 'Z': normalize=0;               break;  /* Dont normalize URLs */
+        case 'z': use_flags=1; flag_dir=optarg; break; /* Ctry flag dir     */
+      }
+   }
+
+   if (argc - optind != 0) log_fname = argv[optind];
+   if ( log_fname && (log_fname[0]=='-')) log_fname=NULL; /* force STDIN?   */
+
+   /* check for gzipped file - .gz */
+   if (log_fname) if (!strcmp((log_fname+strlen(log_fname)-3),".gz"))
+      gz_log=COMP_GZIP;
+
+#ifdef USE_BZIP
+   /* check for bzip file - .bz2 */
+   if (log_fname) if (!strcmp((log_fname+strlen(log_fname)-4),".bz2"))
+      gz_log=COMP_BZIP;
+#endif
+
+   /* setup our internal variables */
+   init_counters();                      /* initalize (zero) main counters  */
+   memset(hist, 0, sizeof(hist));        /* initalize (zero) history array  */
+
+   /* add default index. alias if needed */
+   if (default_index) add_nlist("index.",&index_alias);
+
+   if (page_type==NULL)                  /* check if page types present     */
+   {
+      if ((log_type==LOG_CLF)||(log_type==LOG_SQUID)||(log_type==LOG_W3C))
+      {
+         add_nlist("htm*"  ,&page_type); /* if no page types specified, we  */
+         add_nlist("cgi"   ,&page_type); /* use the default ones here...    */
+         if (!isinlist(page_type,html_ext)) add_nlist(html_ext,&page_type);
+      }
+      else add_nlist("txt" ,&page_type); /* FTP logs default to .txt        */
+   }
+
+   for (max_ctry=0;ctry[max_ctry].desc;max_ctry++);
+   if (ntop_ctrys > max_ctry) ntop_ctrys = max_ctry;   /* force upper limit */
+   if (graph_lines> 20)       graph_lines= 20;         /* keep graphs sane! */
+   if (graph_mths<12)         graph_mths=12;
+   if (graph_mths>GRAPHMAX)   graph_mths=GRAPHMAX;
+   if (index_mths<12)         index_mths=12;
+   if (index_mths>HISTSIZE)   index_mths=HISTSIZE;
+
+   if (log_type == LOG_FTP)
+   {
+      /* disable stuff for ftp logs */
+      ntop_entry=ntop_exit=0;
+      ntop_search=0;
+   }
+   else
+   {
+      if (search_list==NULL)
+      {
+         /* If no search engines defined, define some :) */
+         add_glist(".google.       q="      ,&search_list);
+         add_glist("yahoo.com      p="      ,&search_list);
+         add_glist("altavista.com  q="      ,&search_list);
+         add_glist("aolsearch.     query="  ,&search_list);
+         add_glist("ask.co         q="      ,&search_list);
+         add_glist("eureka.com     q="      ,&search_list);
+         add_glist("lycos.com      query="  ,&search_list);
+         add_glist("hotbot.com     MT="     ,&search_list);
+         add_glist("msn.com        q="      ,&search_list);
+         add_glist("infoseek.com   qt="     ,&search_list);
+         add_glist("webcrawler searchText=" ,&search_list);
+         add_glist("excite         search=" ,&search_list);
+         add_glist("netscape.com   query="  ,&search_list);
+         add_glist("mamma.com      query="  ,&search_list);
+         add_glist("alltheweb.com  q="      ,&search_list);
+         add_glist("northernlight.com qr="  ,&search_list);
+      }
+   }
+
+   /* ensure entry/exits don't exceed urls */
+   i=(ntop_urls>ntop_urlsK)?ntop_urls:ntop_urlsK;
+   if (ntop_entry>i) ntop_entry=i;
+   if (ntop_exit>i)  ntop_exit=i;
+
+   for (i=0;i<MAXHASH;i++)
+   {
+      sm_htab[i]=sd_htab[i]=NULL;        /* initalize hash tables           */
+      um_htab[i]=NULL;
+      rm_htab[i]=NULL;
+      am_htab[i]=NULL;
+      sr_htab[i]=NULL;
+   }
+
+   /* Be polite and announce yourself... */
+   if (verbose>1)
+   {
+      uname(&system_info);
+      printf("Webalizer V%s-%s (%s %s %s) %s\n", version,editlvl,
+              system_info.sysname, system_info.release,
+              system_info.machine,language);
+   }
+
+#ifndef USE_DNS
+   if (strstr(argv[0],"webazolver")!=0)
+      /* DNS support not present, aborting... */
+      { printf("%s\n",msg_dns_abrt); exit(1); }
+#else
+   /* Force sane values for cache TTL */
+   if (cache_ttl<1)   cache_ttl=1;
+   if (cache_ttl>100) cache_ttl=100;
+#endif  /* USE_DNS */
+
+   /* open log file */
+   if (log_fname)
+   {
+      /* stat the file */
+      if ( !(lstat(log_fname, &log_stat)) )
+      {
+         /* check if the file a symlink */
+         if ( S_ISLNK(log_stat.st_mode) )
+         {
+            if (verbose)
+            fprintf(stderr,"%s %s (symlink)\n",msg_log_err,log_fname);
+            exit(EBADF);
+         }
+      }
+
+      if (gz_log)
+      {
+         /* open compressed file */
+#ifdef USE_BZIP
+         if (gz_log==COMP_BZIP)
+            zlog_fp = BZ2_bzopen(log_fname,"rb");
+         else
+#endif
+         zlog_fp = gzopen(log_fname, "rb");
+         if (zlog_fp==Z_NULL)
+         {
+            /* Error: Can't open log file ... */
+            fprintf(stderr, "%s %s (%d)\n",msg_log_err,log_fname,ENOENT);
+            exit(ENOENT);
+         }
+      }
+      else
+      {
+         /* open regular file */
+         log_fp = fopen(log_fname,"r");
+         if (log_fp==NULL)
+         {
+            /* Error: Can't open log file ... */
+            fprintf(stderr, "%s %s\n",msg_log_err,log_fname);
+            exit(1);
+         }
+      }
+   }
+
+   /* Using logfile ... */
+   if (verbose>1)
+   {
+      printf("%s %s (",msg_log_use,log_fname?log_fname:"STDIN");
+      if (gz_log==COMP_GZIP) printf("gzip-");
+#ifdef USE_BZIP
+      if (gz_log==COMP_BZIP) printf("bzip-");
+#endif
+      switch (log_type)
+      {
+         /* display log file type hint */
+         case LOG_CLF:   printf("clf)\n");   break;
+         case LOG_FTP:   printf("ftp)\n");   break;
+         case LOG_SQUID: printf("squid)\n"); break;
+         case LOG_W3C:   printf("w3c)\n");   break;
+      }
+   }
+
+   /* switch directories if needed */
+   if (out_dir)
+   {
+      if (chdir(out_dir) != 0)
+      {
+         /* Error: Can't change directory to ... */
+         fprintf(stderr, "%s %s\n",msg_dir_err,out_dir);
+         exit(1);
+      }
+   }
+
+#ifdef USE_DNS
+   if (strstr(argv[0],"webazolver")!=0)
+   {
+      if (!dns_children) dns_children=5;  /* default dns children if needed */
+      if (!dns_cache)
+      {
+         /* No cache file specified, aborting... */
+         fprintf(stderr,"%s\n",msg_dns_nocf);     /* Must have a cache file */
+         exit(1);
+      }
+   }
+
+   if (dns_cache && dns_children)    /* run-time resolution */
+   {
+      if (dns_children > MAXCHILD) dns_children=MAXCHILD;
+      /* DNS Lookup (#children): */
+      if (verbose>1) printf("%s (%d): ",msg_dns_rslv,dns_children);
+      fflush(stdout);
+      (gz_log)?dns_resolver(zlog_fp):dns_resolver(log_fp);
+#ifdef USE_BZIP
+      (gz_log==COMP_BZIP)?bz2_rewind(&zlog_fp, log_fname, "rb"):
+#endif
+      (gz_log==COMP_GZIP)?gzrewind(zlog_fp):
+      (log_fname)?rewind(log_fp):exit(0);
+   }
+
+   if (strstr(argv[0],"webazolver")!=0) exit(0);   /* webazolver exits here */
+
+   if (dns_cache)
+   {
+      if (!open_cache()) { dns_cache=NULL; dns_db=NULL; }
+      else
+      {
+         /* Using DNS cache file <filaneme> */
+         if (verbose>1) printf("%s %s\n",msg_dns_usec,dns_cache);
+      }
+   }
+
+   /* Open GeoDB? */
+   if (geodb)
+   {
+      geo_db=geodb_open(geodb_fname);
+      if (geo_db==NULL)
+      {
+         if (verbose) printf("%s: %s\n",msg_geo_open,
+            (geodb_fname)?geodb_fname:msg_geo_dflt);
+         if (verbose) printf("GeoDB %s\n",msg_geo_nolu);
+         geodb=0;
+      }
+      else if (verbose>1) printf("%s %s\n",
+         msg_geo_use,geodb_ver(geo_db,buffer));
+#ifdef USE_GEOIP
+      if (geoip) geoip=0;   /* Disable GeoIP if using GeoDB */
+#endif
+   }
+#endif  /* USE_DNS */
+
+#ifdef USE_GEOIP
+   /* open GeoIP database */
+   if (geoip)
+   {
+      if (geoip_db!=NULL)
+         geo_fp=GeoIP_open(geoip_db, GEOIP_MEMORY_CACHE);
+      else
+         geo_fp=GeoIP_new(GEOIP_MEMORY_CACHE);
+
+      /* Did we open one? */
+      if (geo_fp==NULL)
+      {
+         /* couldn't open.. warn user */
+         if (verbose) printf("GeoIP %s\n",msg_geo_nolu);
+         geoip=0;
+      }
+      else if (verbose>1) printf("%s %s (%s)\n",msg_geo_use,
+         GeoIPDBDescription[(int)geo_fp->databaseType],
+         (geoip_db==NULL)?msg_geo_dflt:geo_fp->file_path);
+   }
+#endif /* USE_GEOIP */
+
+   /* Creating output in ... */
+   if (verbose>1)
+      printf("%s %s\n",msg_dir_use,out_dir?out_dir:msg_cur_dir);
+
+   /* prep hostname */
+   if (!hname)
+   {
+      if (uname(&system_info)) hname="localhost";
+      else hname=system_info.nodename;
+   }
+
+   /* Hostname for reports is ... */
+   if (strlen(hname)) if (verbose>1) printf("%s '%s'\n",msg_hostname,hname);
+
+   /* get past history */
+   if (ignore_hist) { if (verbose>1) printf("%s\n",msg_ign_hist); }
+   else get_history();
+
+   if (incremental)                      /* incremental processing?         */
+   {
+      if ((i=restore_state()))           /* restore internal data structs   */
+      {
+         /* Error: Unable to restore run data (error num) */
+         /* if (verbose) fprintf(stderr,"%s (%d)\n",msg_bad_data,i); */
+         fprintf(stderr,"%s (%d)\n",msg_bad_data,i);
+         exit(1);
+      }
+   }
+
+   /* Allocate memory for our TOP countries array */
+   if (ntop_ctrys  != 0)
+   { if ( (top_ctrys=calloc(ntop_ctrys,sizeof(CLISTPTR))) == NULL)
+    /* Can't get memory, Top Countries disabled! */
+    {if (verbose) fprintf(stderr,"%s\n",msg_nomem_tc); ntop_ctrys=0;}}
+
+   /* get processing start time */
+   start_time = time(NULL);
+
+   /*********************************************/
+   /* MAIN PROCESS LOOP - read through log file */
+   /*********************************************/
+
+   while ( (gz_log)?(our_gzgets(zlog_fp,buffer,BUFSIZE) != Z_NULL):
+           (fgets(buffer,BUFSIZE,log_fname?log_fp:stdin) != NULL))
+   {
+      total_rec++;
+      if (strlen(buffer) == (BUFSIZE-1))
+      {
+         if (verbose)
+         {
+            fprintf(stderr,"%s",msg_big_rec);
+            if (debug_mode) fprintf(stderr,":\n%s",buffer);
+            else fprintf(stderr,"\n");
+         }
+
+         total_bad++;                     /* bump bad record counter      */
+
+         /* get the rest of the record */
+         while ( (gz_log)?(our_gzgets(zlog_fp,buffer,BUFSIZE)!=Z_NULL):
+                 (fgets(buffer,BUFSIZE,log_fname?log_fp:stdin)!=NULL))
+         {
+            if (strlen(buffer) < BUFSIZE-1)
+            {
+               if (debug_mode && verbose) fprintf(stderr,"%s\n",buffer);
+               break;
+            }
+            if (debug_mode && verbose) fprintf(stderr,"%s",buffer);
+         }
+         continue;                        /* go get next record if any    */
+      }
+
+      /* got a record... */
+      strcpy(tmp_buf, buffer);            /* save buffer in case of error */
+      if (parse_record(buffer))           /* parse the record             */
+      {
+         /*********************************************/
+         /* PASSED MINIMAL CHECKS, DO A LITTLE MORE   */
+         /*********************************************/
+
+         /* convert month name to lowercase */
+         for (i=4;i<7;i++)
+            log_rec.datetime[i]=tolower(log_rec.datetime[i]);
+
+         /* lowercase sitename/IPv6 addresses */
+         cp1=log_rec.hostname;
+         while (*cp1++!='\0') *cp1=tolower(*cp1);
+
+         /* get year/month/day/hour/min/sec values    */
+         for (i=0;i<12;i++)
+         {
+            if (strncmp(log_month[i],&log_rec.datetime[4],3)==0)
+               { rec_month = i+1; break; }
+         }
+
+         rec_year=atoi(&log_rec.datetime[8]);    /* get year number (int)   */
+         rec_day =atoi(&log_rec.datetime[1]);    /* get day number          */
+         rec_hour=atoi(&log_rec.datetime[13]);   /* get hour number         */
+         rec_min =atoi(&log_rec.datetime[16]);   /* get minute number       */
+         rec_sec =atoi(&log_rec.datetime[19]);   /* get second number       */
+
+         /* Kludge for Netscape server time (0-24?) error                   */
+         if (rec_hour>23) rec_hour=0;
+
+         /* minimal sanity check on date */
+         if ((i>=12)||(rec_min>59)||(rec_sec>60)||(rec_year<1990))
+         {
+            total_bad++;                /* if a bad date, bump counter      */
+            if (verbose)
+            {
+               fprintf(stderr,"%s: %s [%llu]",
+                 msg_bad_date,log_rec.datetime,total_rec);
+               if (debug_mode) fprintf(stderr,":\n%s\n",tmp_buf);
+               else fprintf(stderr,"\n");
+            }
+            continue;                   /* and ignore this record           */
+         }
+
+         /*********************************************/
+         /* GOOD RECORD, CHECK INCREMENTAL/TIMESTAMPS */
+         /*********************************************/
+
+         /* Flag as a good one */
+         good_rec = 1;
+
+         /* get current records timestamp (seconds since epoch) */
+         req_tstamp=cur_tstamp;
+         rec_tstamp=((jdate(rec_day,rec_month,rec_year)-epoch)*86400)+
+                     (rec_hour*3600)+(rec_min*60)+rec_sec;
+
+         /* Do we need to check for duplicate records? (incremental mode)   */
+         if (check_dup)
+         {
+            /* check if less than/equal to last record processed            */
+            if ( rec_tstamp <= cur_tstamp )
+            {
+               /* if it is, assume we have already processed and ignore it  */
+               total_ignore++;
+               continue;
+            }
+            else
+            {
+               /* if it isn't.. disable any more checks this run            */
+               check_dup=0;
+               /* now check if it's a new month                             */
+               if ( (cur_month != rec_month) || (cur_year != rec_year) )
+               {
+                  clear_month();
+                  cur_sec   = rec_sec;          /* set current counters     */
+                  cur_min   = rec_min;
+                  cur_hour  = rec_hour;
+                  cur_day   = rec_day;
+                  cur_month = rec_month;
+                  cur_year  = rec_year;
+                  cur_tstamp= rec_tstamp;
+                  f_day=l_day=rec_day;          /* reset first and last day */
+               }
+            }
+         }
+
+         /* check for out of sequence records */
+         if (rec_tstamp/3600 < cur_tstamp/3600)
+         {
+            if (!fold_seq_err && ((rec_tstamp+SLOP_VAL)/3600<cur_tstamp/3600) )
+               { total_ignore++; continue; }
+            else
+            {
+               rec_sec   = cur_sec;             /* if folding sequence      */
+               rec_min   = cur_min;             /* errors, just make it     */
+               rec_hour  = cur_hour;            /* look like the last       */
+               rec_day   = cur_day;             /* good records timestamp   */
+               rec_month = cur_month;
+               rec_year  = cur_year;
+               rec_tstamp= cur_tstamp;
+            }
+         }
+         cur_tstamp=rec_tstamp;                 /* update current timestamp */
+
+         /*********************************************/
+         /* DO SOME PRE-PROCESS FORMATTING            */
+         /*********************************************/
+
+         /* un-escape URL */
+         unescape(log_rec.url);
+
+         /* fix URL field */
+         cp1 = cp2 = log_rec.url;
+         /* handle null '-' case here... */
+         if (*++cp1 == '-') strcpy(log_rec.url,"/INVALID-URL");
+         else
+         {
+            /* strip actual URL out of request */
+            while  ( (*cp1 != ' ') && (*cp1 != '\0') ) cp1++;
+            if (*cp1 != '\0')
+            {
+               /* scan to begin of actual URL field */
+               while ((*cp1 == ' ') && (*cp1 != '\0')) cp1++;
+               /* remove duplicate / if needed */
+               while (( *cp1=='/') && (*(cp1+1)=='/')) cp1++;
+               while (( *cp1!='\0')&&(*cp1!='"')) *cp2++=*cp1++;
+               *cp2='\0';
+            }
+         }
+
+         /* strip query portion of cgi scripts */
+         cp1 = log_rec.url;
+         while (*cp1 != '\0')
+           if (!isurlchar(*cp1, stripcgi)) { *cp1 = '\0'; break; }
+           else cp1++;
+         if (log_rec.url[0]=='\0')
+           { log_rec.url[0]='/'; log_rec.url[1]='\0'; }
+
+         /* Normalize URL */
+         if (log_type==LOG_CLF && log_rec.resp_code!=RC_NOTFOUND && normalize)
+         {
+            if ( ((cp2=strstr(log_rec.url,"://"))!=NULL)&&(cp2<log_rec.url+6) )
+            {
+               cp1=cp2+3;
+               /* see if a '/' is present after it  */
+               if ( (cp2=strchr(cp1,(int)'/'))==NULL) cp1--;
+               else cp1=cp2;
+               /* Ok, now shift url string          */
+               cp2=log_rec.url; while (*cp1!='\0') *cp2++=*cp1++; *cp2='\0';
+            }
+            /* extra sanity checks on URL string */
+            while ((cp2=strstr(log_rec.url,"/./")))
+               { cp1=cp2+2; while (*cp1!='\0') *cp2++=*cp1++; *cp2='\0'; }
+            if (log_rec.url[0]!='/')
+            {
+               if ( log_rec.resp_code==RC_OK             ||
+                    log_rec.resp_code==RC_PARTIALCONTENT ||
+                    log_rec.resp_code==RC_NOMOD)
+               {
+                  if (debug_mode)
+                     fprintf(stderr,"Converted URL '%s' to '/'\n",log_rec.url);
+                  log_rec.url[0]='/';
+                  log_rec.url[1]='\0';
+               }
+               else
+               {
+                  if (debug_mode)
+                     fprintf(stderr,"Invalid URL: '%s'\n",log_rec.url);
+                  strcpy(log_rec.url,"/INVALID-URL");
+               }
+            }
+            while ( log_rec.url[ (i=strlen(log_rec.url)-1) ] == '?' )
+               log_rec.url[i]='\0';   /* drop trailing ?s if any */
+         }
+         else
+         {
+            /* check for service (ie: http://) and lowercase if found */
+            if (((cp2=strstr(log_rec.url,"://"))!= NULL)&&(cp2<log_rec.url+6))
+            {
+               cp1=log_rec.url;
+               while (cp1!=cp2)
+               {
+                  if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';
+                  cp1++;
+               }
+            }
+         }
+
+         /* strip off index.html (or any aliases) */
+         lptr=index_alias;
+         while (lptr!=NULL)
+         {
+            if ((cp1=strstr(log_rec.url,lptr->string))!=NULL)
+            {
+               if (*(cp1-1)=='/')
+               {
+                  if ( !stripcgi && (cp2=strchr(cp1,'?'))!=NULL )
+                  { while(*cp2) *cp1++=*cp2++; *cp1='\0'; }
+                  else *cp1='\0';
+                  break;
+               }
+            }
+            lptr=lptr->next;
+         }
+
+         /* unescape referrer */
+         unescape(log_rec.refer);
+
+         /* fix referrer field */
+         cp1 = log_rec.refer;
+         cp3 = cp2 = cp1++;
+         if ( (*cp2 != '\0') && (*cp2 == '"') )
+         {
+            while ( *cp1 != '\0' )
+            {
+               cp3=cp2;
+               if (((unsigned char)*cp1<32&&(unsigned char)*cp1>0) ||
+                    *cp1==127 || (unsigned char)*cp1=='<') *cp1=0;
+               else *cp2++=*cp1++;
+            }
+            *cp3 = '\0';
+         }
+
+         /* get query portion of cgi referrals */
+         cp1 = log_rec.refer;
+         if (*cp1 != '\0')
+         {
+            while (*cp1 != '\0')
+            {
+               if (!isurlchar(*cp1, 1))
+               {
+                  /* Save query portion in log.rec.srchstr */
+                  strncpy(log_rec.srchstr,(char *)cp1,MAXSRCH);
+                  *cp1++='\0';
+                  break;
+               }
+               else cp1++;
+            }
+            /* handle null referrer */
+            if (log_rec.refer[0]=='\0')
+              { log_rec.refer[0]='-'; log_rec.refer[1]='\0'; }
+         }
+
+         /* if HTTP request, lowercase http://sitename/ portion */
+         cp1 = log_rec.refer;
+         if ( (*cp1=='h') || (*cp1=='H'))
+         {
+            while ( (*cp1!='/') && (*cp1!='\0'))
+            {
+               if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';
+               cp1++;
+            }
+            /* now do hostname */
+            if ( (*cp1=='/') && ( *(cp1+1)=='/')) {cp1++; cp1++;}
+            while ( (*cp1!='/') && (*cp1!='\0'))
+            {
+               if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';
+               cp1++;
+            }
+         }
+
+         /* Do we need to mangle? */
+         if (mangle_agent) agent_mangle(log_rec.agent);
+
+         /* if necessary, shrink referrer to fit storage */
+         if (strlen(log_rec.refer)>=MAXREFH)
+         {
+            if (verbose) fprintf(stderr,"%s [%llu]\n",
+                msg_big_ref,total_rec);
+            log_rec.refer[MAXREFH-1]='\0';
+         }
+
+         /* if necessary, shrink URL to fit storage */
+         if (strlen(log_rec.url)>=MAXURLH)
+         {
+            if (verbose) fprintf(stderr,"%s [%llu]\n",
+                msg_big_req,total_rec);
+            log_rec.url[MAXURLH-1]='\0';
+         }
+
+         /* fix user agent field */
+         cp1 = log_rec.agent;
+         cp3 = cp2 = cp1++;
+         if ( (*cp2 != '\0') && ((*cp2 == '"')||(*cp2 == '(')) )
+         {
+            while (*cp1 != '\0') { cp3 = cp2; *cp2++ = *cp1++; }
+            *cp3 = '\0';
+         }
+         cp1 = log_rec.agent;    /* CHANGE !!! */
+         while (*cp1 != 0)       /* get rid of more common _bad_ chars ;)   */
+         {
+            if ( ((unsigned char)*cp1 < 32) ||
+                 ((unsigned char)*cp1==127) ||
+                 (*cp1=='<') || (*cp1=='>') )
+               { *cp1='\0'; break; }
+            else cp1++;
+         }
+
+         /* fix username if needed */
+         if (log_rec.ident[0]==0)
+          {  log_rec.ident[0]='-'; log_rec.ident[1]='\0'; }
+         else
+         {
+            cp3=log_rec.ident;
+            while ((unsigned char)*cp3>=32 && *cp3!='"') cp3++;
+            *cp3='\0';
+         }
+         /* unescape user name */
+         unescape(log_rec.ident);
+
+         /********************************************/
+         /* PROCESS RECORD                           */
+         /********************************************/
+
+         /* first time through? */
+         if (cur_month == 0)
+         {
+             /* if yes, init our date vars */
+             cur_month=rec_month; cur_year=rec_year;
+             cur_day=rec_day; cur_hour=rec_hour;
+             cur_min=rec_min; cur_sec=rec_sec;
+             f_day=rec_day;
+         }
+
+         /* adjust last day processed if different */
+         if (rec_day > l_day) l_day = rec_day;
+         /* update min/sec stuff */
+         if (cur_sec != rec_sec) cur_sec = rec_sec;
+         if (cur_min != rec_min) cur_min = rec_min;
+
+         /* check for hour change  */
+         if (cur_hour != rec_hour)
+         {
+            /* if yes, init hourly stuff */
+            if (ht_hit > mh_hit) mh_hit = ht_hit;
+            ht_hit = 0;
+            cur_hour = rec_hour;
+         }
+
+         /* check for day change   */
+         if (cur_day != rec_day)
+         {
+            /* if yes, init daily stuff */
+            tm_site[cur_day-1]=dt_site; dt_site=0;
+            tm_visit[cur_day-1]=tot_visit(sd_htab);
+            del_hlist(sd_htab);
+            cur_day = rec_day;
+         }
+
+         /* check for month change */
+         if ( (cur_month != rec_month) || (cur_year != rec_year) )
+         {
+            /* if yes, do monthly stuff */
+            t_visit=tot_visit(sm_htab);
+            month_update_exit(req_tstamp);    /* process exit pages      */
+            update_history();
+            write_month_html();               /* generate HTML for month */
+            clear_month();
+            cur_month = rec_month;            /* update our flags        */
+            cur_year  = rec_year;
+            f_day=l_day=rec_day;
+         }
+
+         /* save hostname for later */
+         strncpy(host_buf, log_rec.hostname, sizeof(log_rec.hostname));
+
+#ifdef USE_DNS
+         /* Resolve IP address if needed */
+         if (dns_db)
+         {
+            struct addrinfo hints, *ares;
+            memset(&hints, 0, sizeof(hints));
+            hints.ai_family = AF_UNSPEC;
+            hints.ai_socktype = SOCK_STREAM;
+            hints.ai_flags = AI_NUMERICHOST;
+            if (0 == getaddrinfo(log_rec.hostname, "0", &hints, &ares))
+            {
+               freeaddrinfo(ares);
+               resolve_dns(&log_rec);
+            }
+         }
+#endif
+         /* lowercase hostname and validity check */
+         cp1 = log_rec.hostname; i=0;
+
+         if ( (!isalnum((unsigned char)*cp1)) && (*cp1!=':') )
+            strncpy(log_rec.hostname, "Invalid", 8);
+         else
+         {
+            while (*cp1 != '\0')  /* loop through string */
+            {
+               if ( (*cp1>='A') && (*cp1<='Z') )
+                  { *cp1++ += 'a'-'A'; continue; }
+               if ( *cp1=='.' ) i++;
+               if ( (isalnum((unsigned char)*cp1)) ||
+                    (*cp1=='.')||(*cp1=='-')       ||
+                    (*cp1==':')||((*cp1=='_')&&(i==0)) ) cp1++;
+               else
+               {
+                  /* Invalid hostname found! */
+                  if (strcmp(log_rec.hostname, host_buf))
+                     strcpy(log_rec.hostname, host_buf);
+                  else strncpy(log_rec.hostname,"Invalid",8);
+                  break;
+               }
+            }
+            if (*cp1 == '\0')   /* did we make it to the end? */
+            {
+               if (!isalnum((unsigned char)*(cp1-1)))
+                  strncpy(log_rec.hostname,"Invalid",8);
+            }
+         }
+
+         /* Catch blank hostnames here */
+         if (log_rec.hostname[0]=='\0')
+            strncpy(log_rec.hostname,"Unknown",8);
+
+         /* Ignore/Include check */
+         if ( (isinlist(include_sites,log_rec.hostname)==NULL) &&
+              (isinlist(include_urls,log_rec.url)==NULL)       &&
+              (isinlist(include_refs,log_rec.refer)==NULL)     &&
+              (isinlist(include_agents,log_rec.agent)==NULL)   &&
+              (isinlist(include_users,log_rec.ident)==NULL)    )
+         {
+            if (isinlist(ignored_sites,log_rec.hostname)!=NULL)
+              { total_ignore++; continue; }
+            if (isinlist(ignored_urls,log_rec.url)!=NULL)
+              { total_ignore++; continue; }
+            if (isinlist(ignored_agents,log_rec.agent)!=NULL)
+              { total_ignore++; continue; }
+            if (isinlist(ignored_refs,log_rec.refer)!=NULL)
+              { total_ignore++; continue; }
+            if (isinlist(ignored_users,log_rec.ident)!=NULL)
+              { total_ignore++; continue; }
+         }
+
+         /* Bump response code totals */
+         switch (log_rec.resp_code) {
+          case RC_CONTINUE:         i=IDX_CONTINUE;         break;
+          case RC_SWITCHPROTO:      i=IDX_SWITCHPROTO;      break;
+          case RC_OK:               i=IDX_OK;               break;
+          case RC_CREATED:          i=IDX_CREATED;          break;
+          case RC_ACCEPTED:         i=IDX_ACCEPTED;         break;
+          case RC_NONAUTHINFO:      i=IDX_NONAUTHINFO;      break;
+          case RC_NOCONTENT:        i=IDX_NOCONTENT;        break;
+          case RC_RESETCONTENT:     i=IDX_RESETCONTENT;     break;
+          case RC_PARTIALCONTENT:   i=IDX_PARTIALCONTENT;   break;
+          case RC_MULTIPLECHOICES:  i=IDX_MULTIPLECHOICES;  break;
+          case RC_MOVEDPERM:        i=IDX_MOVEDPERM;        break;
+          case RC_MOVEDTEMP:        i=IDX_MOVEDTEMP;        break;
+          case RC_SEEOTHER:         i=IDX_SEEOTHER;         break;
+          case RC_NOMOD:            i=IDX_NOMOD;            break;
+          case RC_USEPROXY:         i=IDX_USEPROXY;         break;
+         case RC_MOVEDTEMPORARILY: i=IDX_MOVEDTEMPORARILY; break;
+          case RC_BAD:              i=IDX_BAD;              break;
+          case RC_UNAUTH:           i=IDX_UNAUTH;           break;
+          case RC_PAYMENTREQ:       i=IDX_PAYMENTREQ;       break;
+          case RC_FORBIDDEN:        i=IDX_FORBIDDEN;        break;
+          case RC_NOTFOUND:         i=IDX_NOTFOUND;         break;
+          case RC_METHODNOTALLOWED: i=IDX_METHODNOTALLOWED; break;
+          case RC_NOTACCEPTABLE:    i=IDX_NOTACCEPTABLE;    break;
+          case RC_PROXYAUTHREQ:     i=IDX_PROXYAUTHREQ;     break;
+          case RC_TIMEOUT:          i=IDX_TIMEOUT;          break;
+          case RC_CONFLICT:         i=IDX_CONFLICT;         break;
+          case RC_GONE:             i=IDX_GONE;             break;
+          case RC_LENGTHREQ:        i=IDX_LENGTHREQ;        break;
+          case RC_PREFAILED:        i=IDX_PREFAILED;        break;
+          case RC_REQENTTOOLARGE:   i=IDX_REQENTTOOLARGE;   break;
+          case RC_REQURITOOLARGE:   i=IDX_REQURITOOLARGE;   break;
+          case RC_UNSUPMEDIATYPE:   i=IDX_UNSUPMEDIATYPE;   break;
+         case RC_RNGNOTSATISFIABLE:i=IDX_RNGNOTSATISFIABLE;break;
+         case RC_EXPECTATIONFAILED:i=IDX_EXPECTATIONFAILED;break;
+          case RC_SERVERERR:        i=IDX_SERVERERR;        break;
+          case RC_NOTIMPLEMENTED:   i=IDX_NOTIMPLEMENTED;   break;
+          case RC_BADGATEWAY:       i=IDX_BADGATEWAY;       break;
+          case RC_UNAVAIL:          i=IDX_UNAVAIL;          break;
+          case RC_GATEWAYTIMEOUT:   i=IDX_GATEWAYTIMEOUT;   break;
+          case RC_BADHTTPVER:       i=IDX_BADHTTPVER;       break;
+          default:                  i=IDX_UNDEFINED;        break;
+         }
+         response[i].count++;
+
+         /* now save in the various hash tables... */
+         if (log_rec.resp_code==RC_OK || log_rec.resp_code==RC_PARTIALCONTENT)
+            i=1; else i=0;
+         
+         /* URL/ident hash table (only if valid response code) */
+         if ((log_rec.resp_code==RC_OK)||(log_rec.resp_code==RC_NOMOD)||
+             (log_rec.resp_code==RC_PARTIALCONTENT))
+         {
+            /* 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))
+            {
+               if (verbose)
+               /* Error adding URL node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_u, log_rec.url);
+            }
+
+            /* ident (username) hash table */
+            if (put_inode(log_rec.ident,OBJ_REG,
+                1,(u_int64_t)i,log_rec.xfer_size,&t_user,
+                0,rec_tstamp,im_htab))
+            {
+               if (verbose)
+               /* Error adding ident node, skipping .... */
+               fprintf(stderr,"%s %s\n", msg_nomem_i, log_rec.ident);
+            }
+         }
+
+         /* referrer hash table */
+         if (ntop_refs)
+         {
+            if (log_rec.refer[0]!='\0')
+             if (put_rnode(log_rec.refer,OBJ_REG,(u_int64_t)1,&t_ref,rm_htab))
+             {
+              if (verbose)
+              fprintf(stderr,"%s %s\n", msg_nomem_r, log_rec.refer);
+             }
+         }
+
+         /* hostname (site) hash table - daily */
+         if (put_hnode(log_rec.hostname,OBJ_REG,
+             1,(u_int64_t)i,log_rec.xfer_size,&dt_site,
+             0,rec_tstamp,"",sd_htab))
+         {
+            if (verbose)
+            /* Error adding host node (daily), skipping .... */
+            fprintf(stderr,"%s %s\n",msg_nomem_dh, log_rec.hostname);
+         }
+
+         /* hostname (site) hash table - monthly */
+         if (put_hnode(log_rec.hostname,OBJ_REG,
+             1,(u_int64_t)i,log_rec.xfer_size,&t_site,
+             0,rec_tstamp,"",sm_htab))
+         {
+            if (verbose)
+            /* Error adding host node (monthly), skipping .... */
+            fprintf(stderr,"%s %s\n", msg_nomem_mh, log_rec.hostname);
+         }
+
+         /* user agent hash table */
+         if (ntop_agents)
+         {
+            if (log_rec.agent[0]!='\0')
+             if (put_anode(log_rec.agent,OBJ_REG,(u_int64_t)1,&t_agent,am_htab))
+             {
+              if (verbose)
+              fprintf(stderr,"%s %s\n", msg_nomem_a, log_rec.agent);
+             }
+         }
+
+         /* 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     */
+         tm_hit[rec_day-1]++;                       /* daily hits total     */
+         th_xfer[rec_hour] += log_rec.xfer_size;    /* hourly xfer total    */
+         th_hit[rec_hour]++;                        /* hourly hits total    */
+   
+         /* if RC_OK, increase file counters */
+         if (log_rec.resp_code == RC_OK)
+         {
+            t_file++;
+            tm_file[rec_day-1]++;
+            th_file[rec_hour]++;
+         }
+
+         /* Pages (pageview) calculation */
+         if (ispage(log_rec.url))
+         {
+            t_page++;
+            tm_page[rec_day-1]++;
+            th_page[rec_hour]++;
+
+            /* do search string stuff if needed     */
+            if (ntop_search) srch_string(log_rec.srchstr);
+         }
+
+         /*********************************************/
+         /* RECORD PROCESSED - DO GROUPS HERE         */ 
+         /*********************************************/
+
+         /* URL Grouping */
+         if ( (cp1=isinglist(group_urls,log_rec.url))!=NULL)
+         {
+            if (put_unode(cp1,OBJ_GRP,(u_int64_t)1,log_rec.xfer_size,
+                &ul_bogus,(u_int64_t)0,(u_int64_t)0,um_htab))
+            {
+               if (verbose)
+               /* Error adding URL node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_u, cp1);
+            }
+         }
+
+         /* Site Grouping */
+         if ( (cp1=isinglist(group_sites,log_rec.hostname))!=NULL)
+         {
+            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))
+            {
+               if (verbose)
+               /* Error adding Site node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_mh, cp1);
+            }
+         }
+         else
+         {
+            /* Domain Grouping */
+            if (group_domains)
+            {
+               cp1 = get_domain(log_rec.hostname);
+               if (cp1 != NULL)
+               {
+                  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))
+                  {
+                     if (verbose)
+                     /* Error adding Site node, skipping ... */
+                     fprintf(stderr,"%s %s\n", msg_nomem_mh, cp1);
+                  }
+               }
+            }
+         }
+
+         /* Referrer Grouping */
+         if ( (cp1=isinglist(group_refs,log_rec.refer))!=NULL)
+         {
+            if (put_rnode(cp1,OBJ_GRP,(u_int64_t)1,&ul_bogus,rm_htab))
+            {
+               if (verbose)
+               /* Error adding Referrer node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_r, cp1);
+            }
+         }
+
+         /* User Agent Grouping */
+         if ( (cp1=isinglist(group_agents,log_rec.agent))!=NULL)
+         {
+            if (put_anode(cp1,OBJ_GRP,(u_int64_t)1,&ul_bogus,am_htab))
+            {
+               if (verbose)
+               /* Error adding User Agent node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_a, cp1);
+            }
+         }
+
+         /* Ident (username) Grouping */
+         if ( (cp1=isinglist(group_users,log_rec.ident))!=NULL)
+         {
+            if (put_inode(cp1,OBJ_GRP,1,
+                          (u_int64_t)(log_rec.resp_code==RC_OK)?1:0,
+                          log_rec.xfer_size,&ul_bogus,
+                          0,rec_tstamp,im_htab))
+            {
+               if (verbose)
+               /* Error adding Username node, skipping ... */
+               fprintf(stderr,"%s %s\n", msg_nomem_i, cp1);
+            }
+         }
+      }
+
+      /*********************************************/
+      /* BAD RECORD                                */
+      /*********************************************/
+
+      else
+      {
+         /* If first record, check if stupid Netscape header stuff      */
+         if ( (total_rec==1) && (strncmp(buffer,"format=",7)==0) )
+         {
+            /* Skipping Netscape header record */
+            if (verbose>1) printf("%s\n",msg_ign_nscp);
+            /* count it as ignored... */
+            total_ignore++;
+         }
+         else
+         {
+            /* Check if it's a W3C header or IIS Null-Character line */
+            if ((buffer[0]=='\0') || (buffer[0]=='#'))
+            {
+               total_ignore++;
+            }
+            else
+            {
+               /* really bad record... */
+               total_bad++;
+               if (verbose)
+               {
+                  fprintf(stderr,"%s (%llu)",msg_bad_rec,total_rec);
+                  if (debug_mode) fprintf(stderr,":\n%s\n",tmp_buf);
+                  else fprintf(stderr,"\n");
+               }
+            }
+         }
+      }
+   }
+
+   /*********************************************/
+   /* DONE READING LOG FILE - final processing  */
+   /*********************************************/
+
+   /* close log file if needed */
+#ifdef USE_BZIP
+   if (gz_log) (gz_log==COMP_BZIP)?BZ2_bzclose(zlog_fp):gzclose(zlog_fp);
+#else
+   if (gz_log) gzclose(zlog_fp);
+#endif
+   else if (log_fname) fclose(log_fp);
+
+   if (good_rec)                             /* were any good records?   */
+   {
+      tm_site[cur_day-1]=dt_site;            /* If yes, clean up a bit   */
+      tm_visit[cur_day-1]=tot_visit(sd_htab);
+      t_visit=tot_visit(sm_htab);
+      if (ht_hit > mh_hit) mh_hit = ht_hit;
+
+      if (total_rec > (total_ignore+total_bad)) /* did we process any?   */
+      {
+         if (incremental)
+         {
+            if (save_state())                /* incremental stuff        */
+            {
+               /* Error: Unable to save current run data */
+               if (verbose) fprintf(stderr,"%s\n",msg_data_err);
+               unlink(state_fname);
+            }
+         }
+         month_update_exit(rec_tstamp);      /* calculate exit pages     */
+         update_history();
+         write_month_html();                 /* write monthly HTML file  */
+         put_history();                      /* write history            */
+      }
+      if (hist[0].month!=0) write_main_index(); /* write main HTML file  */
+
+      /* get processing end time */
+      end_time = time(NULL);
+
+      /* display end of processing statistics */
+      if (time_me || (verbose>1))
+      {
+         printf("%llu %s ",total_rec, msg_records);
+         if (total_ignore)
+         {
+            printf("(%llu %s",total_ignore,msg_ignored);
+            if (total_bad) printf(", %llu %s) ",total_bad,msg_bad);
+               else        printf(") ");
+         }
+         else if (total_bad) printf("(%llu %s) ",total_bad,msg_bad);
+
+         /* totoal processing time in seconds */
+         temp_time = difftime(end_time, start_time);
+         if (temp_time==0) temp_time=1;
+         printf("%s %.0f %s", msg_in, temp_time, msg_seconds);
+
+         /* calculate records per second */
+         if (temp_time)
+           i=( (int)( (float)total_rec/temp_time ) );
+         else i=0;
+
+         if ( (i>0) && (i<=total_rec) ) printf(", %d/sec\n", i);
+            else  printf("\n");
+      }
+
+#ifdef USE_DNS
+      /* Close DNS cache file */
+      if (dns_db) close_cache();
+      /* Close GeoDB database */
+      if (geo_db) geodb_close(geo_db);
+#endif
+
+#ifdef USE_GEOIP
+      /* Close GeoIP database */
+      if (geo_fp) GeoIP_delete(geo_fp);
+#endif
+
+      /* Whew, all done! Exit with completion status (0) */
+      exit(0);
+   }
+   else
+   {
+      /* No valid records found... exit with error (1) */
+      if (verbose) printf("%s\n",msg_no_vrec);
+      if (hist[0].month!=0) write_main_index(); /* write main HTML file     */
+      exit(1);
+   }
+}
+
+/*********************************************/
+/* GET_CONFIG - get configuration file info  */
+/*********************************************/
+
+void get_config(char *fname)
+{
+   char *kwords[]= { "Undefined",         /* 0 = undefined keyword       0  */
+                     "OutputDir",         /* Output directory            1  */
+                     "LogFile",           /* Log file to use for input   2  */
+                     "ReportTitle",       /* Title for reports           3  */
+                     "HostName",          /* Hostname to use             4  */
+                     "IgnoreHist",        /* Ignore history file         5  */
+                     "Quiet",             /* Run in quiet mode           6  */
+                     "TimeMe",            /* Produce timing results      7  */
+                     "Debug",             /* Produce debug information   8  */
+                     "HourlyGraph",       /* Hourly stats graph          9  */
+                     "HourlyStats",       /* Hourly stats table         10  */
+                     "TopSites",          /* Top sites                  11  */
+                     "TopURLs",           /* Top URLs                   12  */
+                     "TopReferrers",      /* Top Referrers              13  */
+                     "TopAgents",         /* Top User Agents            14  */
+                     "TopCountries",      /* Top Countries              15  */
+                     "HideSite",          /* Sites to hide              16  */
+                     "HideURL",           /* URLs to hide               17  */
+                     "HideReferrer",      /* Referrers to hide          18  */
+                     "HideAgent",         /* User Agents to hide        19  */
+                     "IndexAlias",        /* Aliases for index.html     20  */
+                     "HTMLHead",          /* HTML Top1 code             21  */
+                     "HTMLPost",          /* HTML Top2 code             22  */
+                     "HTMLTail",          /* HTML Tail code             23  */
+                     "MangleAgents",      /* Mangle User Agents         24  */
+                     "IgnoreSite",        /* Sites to ignore            25  */
+                     "IgnoreURL",         /* Url's to ignore            26  */
+                     "IgnoreReferrer",    /* Referrers to ignore        27  */
+                     "IgnoreAgent",       /* User Agents to ignore      28  */
+                     "ReallyQuiet",       /* Dont display ANY messages  29  */
+                     "GMTTime",           /* Local or UTC time?         30  */
+                     "GroupURL",          /* Group URLs                 31  */
+                     "GroupSite",         /* Group Sites                32  */
+                     "GroupReferrer",     /* Group Referrers            33  */
+                     "GroupAgent",        /* Group Agents               34  */
+                     "GroupShading",      /* Shade Grouped entries      35  */
+                     "GroupHighlight",    /* BOLD Grouped entries       36  */
+                     "Incremental",       /* Incremental runs           37  */
+                     "IncrementalName",   /* Filename for state data    38  */
+                     "HistoryName",       /* Filename for history data  39  */
+                     "HTMLExtension",     /* HTML filename extension    40  */
+                     "HTMLPre",           /* HTML code at beginning     41  */
+                     "HTMLBody",          /* HTML body code             42  */
+                     "HTMLEnd",           /* HTML code at end           43  */
+                     "UseHTTPS",          /* Use https:// on URLs       44  */
+                     "IncludeSite",       /* Sites to always include    45  */
+                     "IncludeURL",        /* URLs to always include     46  */
+                     "IncludeReferrer",   /* Referrers to include       47  */
+                     "IncludeAgent",      /* User Agents to include     48  */
+                     "PageType",          /* Page Type (pageview)       49  */
+                     "VisitTimeout",      /* Visit timeout (seconds)    50  */
+                     "GraphLegend",       /* Graph Legends (yes/no)     51  */
+                     "GraphLines",        /* Graph Lines (0=none)       52  */
+                     "FoldSeqErr",        /* Fold sequence errors       53  */
+                     "CountryGraph",      /* Display ctry graph (0=no)  54  */
+                     "TopKSites",         /* Top sites (by KBytes)      55  */
+                     "TopKURLs",          /* Top URLs  (by KBytes)      56  */
+                     "TopEntry",          /* Top Entry Pages            57  */
+                     "TopExit",           /* Top Exit Pages             58  */
+                     "TopSearch",         /* Top Search Strings         59  */
+                     "LogType",           /* Log Type (clf/ftp/squid)   60  */
+                     "SearchEngine",      /* SearchEngine strings       61  */
+                     "GroupDomains",      /* Group domains (n=level)    62  */
+                     "HideAllSites",      /* Hide ind. sites (0=no)     63  */
+                     "AllSites",          /* List all sites?            64  */
+                     "AllURLs",           /* List all URLs?             65  */
+                     "AllReferrers",      /* List all Referrers?        66  */
+                     "AllAgents",         /* List all User Agents?      67  */
+                     "AllSearchStr",      /* List all Search Strings?   68  */
+                     "AllUsers",          /* List all Users?            69  */
+                     "TopUsers",          /* Top Usernames to show      70  */
+                     "HideUser",          /* Usernames to hide          71  */
+                     "IgnoreUser",        /* Usernames to ignore        72  */
+                     "IncludeUser",       /* Usernames to include       73  */
+                     "GroupUser",         /* Usernames to group         74  */
+                     "DumpPath",          /* Path for dump files        75  */
+                     "DumpExtension",     /* Dump filename extension    76  */
+                     "DumpHeader",        /* Dump header as first rec?  77  */
+                     "DumpSites",         /* Dump sites tab file        78  */
+                     "DumpURLs",          /* Dump urls tab file         79  */
+                     "DumpReferrers",     /* Dump referrers tab file    80  */
+                     "DumpAgents",        /* Dump user agents tab file  81  */
+                     "DumpUsers",         /* Dump usernames tab file    82  */
+                     "DumpSearchStr",     /* Dump search str tab file   83  */
+                     "DNSCache",          /* DNS Cache file name        84  */
+                     "DNSChildren",       /* DNS Children (0=no DNS)    85  */
+                     "DailyGraph",        /* Daily Graph (0=no)         86  */
+                     "DailyStats",        /* Daily Stats (0=no)         87  */
+                     "LinkReferrer",      /* Link referrer (0=no)       88  */
+                     "PagePrefix",        /* PagePrefix - treat as page 89  */
+                     "ColorHit",          /* Hit Color   (def=00805c)   90  */
+                     "ColorFile",         /* File Color  (def=0040ff)   91  */
+                     "ColorSite",         /* Site Color  (def=ff8000)   92  */
+                     "ColorKbyte",        /* Kbyte Color (def=ff0000)   93  */
+                     "ColorPage",         /* Page Color  (def=00e0ff)   94  */
+                     "ColorVisit",        /* Visit Color (def=ffff00)   95  */
+                     "ColorMisc",         /* Misc Color  (def=00e0ff)   96  */
+                     "PieColor1",         /* Pie Color 1 (def=800080)   97  */
+                     "PieColor2",         /* Pie Color 2 (def=80ffc0)   98  */
+                     "PieColor3",         /* Pie Color 3 (def=ff00ff)   99  */
+                     "PieColor4",         /* Pie Color 4 (def=ffc080)   100 */
+                     "CacheIPs",          /* Cache IPs in DNS DB (0=no) 101 */
+                     "CacheTTL",          /* DNS Cache entry TTL (days) 102 */
+                     "GeoDB",             /* GeoDB lookups (0=no)       103 */
+                     "GeoDBDatabase",     /* GeoDB database filename    104 */
+                     "StripCGI",          /* Strip CGI in URLS (0=no)   105 */
+                     "TrimSquidURL",      /* Trim squid URLs (0=none)   106 */
+                     "OmitPage",          /* URLs not counted as pages  107 */
+                     "HTAccess",          /* Write .httaccess files?    108 */
+                     "IgnoreState",       /* Ignore state file (0=no)   109 */
+                     "DefaultIndex",      /* Default index.* (1=yes)    110 */
+                     "GeoIP",             /* Use GeoIP? (1=yes)         111 */
+                     "GeoIPDatabase",     /* Database to use for GeoIP  112 */
+                     "NormalizeURL",      /* Normalize CLF URLs (1=yes) 113 */
+                     "IndexMonths",       /* # months for main page     114 */
+                     "GraphMonths",       /* # months for yearly graph  115 */
+                     "YearHeaders",       /* use year headers? (1=yes)  116 */
+                     "YearTotals",        /* show year subtotals (0=no) 117 */
+                     "CountryFlags",      /* show country flags? (0-no) 118 */
+                     "FlagDir",           /* directory w/flag images    119 */
+                     "SearchCaseI"        /* srch str case insensitive  120 */
+                   };
+
+   FILE *fp;
+
+   char buffer[BUFSIZE];
+   char keyword[MAXKWORD];
+   char value[MAXKVAL];
+   char *cp1, *cp2;
+   int  i,key,count;
+   int num_kwords=sizeof(kwords)/sizeof(char *);
+
+   if ( (fp=fopen(fname,"r")) == NULL)
+   {
+      if (verbose)
+      fprintf(stderr,"%s %s\n",msg_bad_conf,fname);
+      return;
+   }
+
+   while ( (fgets(buffer,BUFSIZE,fp)) != NULL)
+   {
+      /* skip comments and blank lines */
+      if ( (buffer[0]=='#') || isspace((unsigned char)buffer[0]) ) continue;
+
+      /* Get keyword */
+      cp1=buffer;cp2=keyword;count=MAXKWORD-1;
+      while ( (isalnum((unsigned char)*cp1)) && count )
+         { *cp2++ = *cp1++; count--; }
+      *cp2='\0';
+
+      /* Get value */
+      cp2=value; count=MAXKVAL-1;
+      while ((*cp1!='\n')&&(*cp1!='\0')&&(isspace((unsigned char)*cp1))) cp1++;
+      while ((*cp1!='\n')&&(*cp1!='\0')&&count ) { *cp2++ = *cp1++; count--; }
+      *cp2--='\0';
+      while ((isspace((unsigned char)*cp2)) && (cp2 != value) ) *cp2--='\0';
+
+      /* check if blank keyword/value */
+      if ( (keyword[0]=='\0') || (value[0]=='\0') ) continue;
+
+      key=0;
+      for (i=0;i<num_kwords;i++)
+         if (!ouricmp(keyword,kwords[i])) { key=i; break; }
+
+      if (key==0) { printf("%s '%s' (%s)\n",       /* Invalid keyword       */
+                    msg_bad_key,keyword,fname);
+                    continue;
+                  }
+
+      switch (key)
+      {
+        case 1:  out_dir=save_opt(value);          break; /* OutputDir      */
+        case 2:  log_fname=save_opt(value);        break; /* LogFile        */
+        case 3:  msg_title=save_opt(value);        break; /* ReportTitle    */
+        case 4:  hname=save_opt(value);            break; /* HostName       */
+        case 5:  ignore_hist=
+                    (tolower(value[0])=='y')?1:0;  break; /* IgnoreHist     */
+        case 6:  verbose=
+                    (tolower(value[0])=='y')?1:2;  break; /* Quiet          */
+        case 7:  time_me=
+                    (tolower(value[0])=='n')?0:1;  break; /* TimeMe         */
+        case 8:  debug_mode=
+                    (tolower(value[0])=='y')?1:0;  break; /* Debug          */
+        case 9:  hourly_graph=
+                    (tolower(value[0])=='n')?0:1;  break; /* HourlyGraph    */
+        case 10: hourly_stats=
+                    (tolower(value[0])=='n')?0:1;  break; /* HourlyStats    */
+        case 11: ntop_sites = atoi(value);         break; /* TopSites       */
+        case 12: ntop_urls = atoi(value);          break; /* TopURLs        */
+        case 13: ntop_refs = atoi(value);          break; /* TopRefs        */
+        case 14: ntop_agents = atoi(value);        break; /* TopAgents      */
+        case 15: ntop_ctrys = atoi(value);         break; /* TopCountries   */
+        case 16: add_nlist(value,&hidden_sites);   break; /* HideSite       */
+        case 17: add_nlist(value,&hidden_urls);    break; /* HideURL        */
+        case 18: add_nlist(value,&hidden_refs);    break; /* HideReferrer   */
+        case 19: add_nlist(value,&hidden_agents);  break; /* HideAgent      */
+        case 20: add_nlist(value,&index_alias);    break; /* IndexAlias     */
+        case 21: add_nlist(value,&html_head);      break; /* HTMLHead       */
+        case 22: add_nlist(value,&html_post);      break; /* HTMLPost       */
+        case 23: add_nlist(value,&html_tail);      break; /* HTMLTail       */
+        case 24: mangle_agent=atoi(value);         break; /* MangleAgents   */
+        case 25: add_nlist(value,&ignored_sites);  break; /* IgnoreSite     */
+        case 26: add_nlist(value,&ignored_urls);   break; /* IgnoreURL      */
+        case 27: add_nlist(value,&ignored_refs);   break; /* IgnoreReferrer */
+        case 28: add_nlist(value,&ignored_agents); break; /* IgnoreAgent    */
+        case 29: if (tolower(value[0])=='y')
+                    verbose=0;                     break; /* ReallyQuiet    */
+        case 30: local_time=
+                    (tolower(value[0])=='y')?0:1;  break; /* GMTTime        */
+        case 31: add_glist(value,&group_urls);     break; /* GroupURL       */
+        case 32: add_glist(value,&group_sites);    break; /* GroupSite      */
+        case 33: add_glist(value,&group_refs);     break; /* GroupReferrer  */
+        case 34: add_glist(value,&group_agents);   break; /* GroupAgent     */
+        case 35: shade_groups=
+                    (tolower(value[0])=='n')?0:1;  break; /* GroupShading   */
+        case 36: hlite_groups=
+                    (tolower(value[0])=='n')?0:1;  break; /* GroupHighlight */
+        case 37: incremental=
+                    (tolower(value[0])=='y')?1:0;  break; /* Incremental    */
+        case 38: state_fname=save_opt(value);      break; /* State FName    */
+        case 39: hist_fname=save_opt(value);       break; /* History FName  */
+        case 40: html_ext=save_opt(value);         break; /* HTML extension */
+        case 41: add_nlist(value,&html_pre);       break; /* HTML Pre code  */
+        case 42: add_nlist(value,&html_body);      break; /* HTML Body code */
+        case 43: add_nlist(value,&html_end);       break; /* HTML End code  */
+        case 44: use_https=
+                    (tolower(value[0])=='y')?1:0;  break; /* Use https://   */
+        case 45: add_nlist(value,&include_sites);  break; /* IncludeSite    */
+        case 46: add_nlist(value,&include_urls);   break; /* IncludeURL     */
+        case 47: add_nlist(value,&include_refs);   break; /* IncludeReferrer*/
+        case 48: add_nlist(value,&include_agents); break; /* IncludeAgent   */
+        case 49: add_nlist(value,&page_type);      break; /* PageType       */
+        case 50: visit_timeout=atoi(value);        break; /* VisitTimeout   */
+        case 51: graph_legend=
+                    (tolower(value[0])=='n')?0:1;  break; /* GraphLegend    */
+        case 52: graph_lines = atoi(value);        break; /* GraphLines     */
+        case 53: fold_seq_err=
+                    (tolower(value[0])=='y')?1:0;  break; /* FoldSeqErr     */
+        case 54: ctry_graph=
+                    (tolower(value[0])=='n')?0:1;  break; /* CountryGraph   */
+        case 55: ntop_sitesK = atoi(value);        break; /* TopKSites (KB) */
+        case 56: ntop_urlsK  = atoi(value);        break; /* TopKUrls (KB)  */
+        case 57: ntop_entry  = atoi(value);        break; /* Top Entry pgs  */
+        case 58: ntop_exit   = atoi(value);        break; /* Top Exit pages */
+        case 59: ntop_search = atoi(value);        break; /* Top Search pgs */
+        case 60: log_type=(tolower(value[0])=='f')?
+                 LOG_FTP:((tolower(value[0])=='s')?
+                 LOG_SQUID:((tolower(value[0])=='w')?
+                 LOG_W3C:LOG_CLF));                break; /* LogType        */
+        case 61: add_glist(value,&search_list);    break; /* SearchEngine   */
+        case 62: group_domains=atoi(value);        break; /* GroupDomains   */
+        case 63: hide_sites=
+                    (tolower(value[0])=='y')?1:0;  break; /* HideAllSites   */
+        case 64: all_sites=
+                    (tolower(value[0])=='y')?1:0;  break; /* All Sites?     */
+        case 65: all_urls=
+                    (tolower(value[0])=='y')?1:0;  break; /* All URLs?      */
+        case 66: all_refs=
+                    (tolower(value[0])=='y')?1:0;  break; /* All Refs       */
+        case 67: all_agents=
+                    (tolower(value[0])=='y')?1:0;  break; /* All Agents?    */
+        case 68: all_search=
+                    (tolower(value[0])=='y')?1:0;  break; /* All Srch str   */
+        case 69: all_users=
+                    (tolower(value[0])=='y')?1:0;  break; /* All Users?     */
+        case 70: ntop_users=atoi(value);           break; /* TopUsers       */
+        case 71: add_nlist(value,&hidden_users);   break; /* HideUser       */
+        case 72: add_nlist(value,&ignored_users);  break; /* IgnoreUser     */
+        case 73: add_nlist(value,&include_users);  break; /* IncludeUser    */
+        case 74: add_glist(value,&group_users);    break; /* GroupUser      */
+        case 75: dump_path=save_opt(value);        break; /* DumpPath       */
+        case 76: dump_ext=save_opt(value);         break; /* Dumpfile ext   */
+        case 77: dump_header=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpHeader?    */
+        case 78: dump_sites=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpSites?     */
+        case 79: dump_urls=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpURLs?      */
+        case 80: dump_refs=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpReferrers? */
+        case 81: dump_agents=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpAgents?    */
+        case 82: dump_users=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpUsers?     */
+        case 83: dump_search=
+                    (tolower(value[0])=='y')?1:0;  break; /* DumpSrchStrs?  */
+#ifdef USE_DNS
+        case 84: dns_cache=save_opt(value);        break; /* DNSCache fname */
+        case 85: dns_children=atoi(value);         break; /* DNSChildren    */
+#else
+        case 84: /* Disable DNSCache and DNSChildren if DNS is not enabled  */
+        case 85: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break;
+#endif  /* USE_DNS */
+        case 86: daily_graph=
+                    (tolower(value[0])=='n')?0:1;  break; /* HourlyGraph    */
+        case 87: daily_stats=
+                    (tolower(value[0])=='n')?0:1;  break; /* HourlyStats    */
+        case 88: link_referrer=
+                    (tolower(value[0])=='y')?1:0;  break; /* LinkReferrer   */
+        case 89: add_nlist(value,&page_prefix);    break; /* PagePrefix     */
+        case 90: strncpy(hit_color+1,  value, 6);  break; /* ColorHit       */
+        case 91: strncpy(file_color+1, value, 6);  break; /* ColorFile      */
+        case 92: strncpy(site_color+1, value, 6);  break; /* ColorSite      */
+        case 93: strncpy(kbyte_color+1,value, 6);  break; /* ColorKbyte     */
+        case 94: strncpy(page_color+1, value, 6);  break; /* ColorPage      */
+        case 95: strncpy(visit_color+1,value, 6);  break; /* ColorVisit     */
+        case 96: strncpy(misc_color+1, value, 6);  break; /* ColorMisc      */
+        case 97: strncpy(pie_color1+1, value, 6);  break; /* PieColor1      */
+        case 98: strncpy(pie_color2+1, value, 6);  break; /* PieColor2      */
+        case 99: strncpy(pie_color3+1, value, 6);  break; /* PieColor3      */
+        case 100:strncpy(pie_color4+1, value, 6);  break; /* PieColor4      */
+#ifdef USE_DNS
+        case 101: cache_ips=
+                    (tolower(value[0])=='y')?1:0;  break; /* CacheIPs       */
+        case 102: cache_ttl=atoi(value);           break; /* CacheTTL days  */
+        case 103: geodb=
+                    (tolower(value[0])=='y')?1:0;  break; /* GeoDB          */
+        case 104: geodb_fname=save_opt(value);     break; /* GeoDBDatabase  */
+#else
+        case 101: /* Disable CacheIPs/CacheTTL/GeoDB/GeoDBDatabase if none  */
+        case 102: 
+        case 103:
+        case 104: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break;
+#endif  /* USE_DNS */
+        case 105: stripcgi=
+                    (tolower(value[0])=='n')?0:1;  break; /* StripCGI       */
+        case 106: trimsquid=atoi(value);           break; /* TrimSquidURL   */
+        case 107: add_nlist(value,&omit_page);     break; /* OmitPage       */
+        case 108: htaccess=
+                    (tolower(value[0])=='y')?1:0;  break; /* HTAccess       */
+        case 109: ignore_state=
+                    (tolower(value[0])=='y')?1:0;  break; /* IgnoreState    */
+        case 110: default_index=
+                    (tolower(value[0])=='n')?0:1;  break; /* DefaultIndex   */
+#ifdef USE_GEOIP
+        case 111: geoip=
+                    (tolower(value[0])=='y')?1:0;  break; /* GeoIP          */
+        case 112: geoip_db=save_opt(value);        break; /* GeoIPDatabase  */
+#else
+        case 111: /* Disable GeoIP and GeoIPDatabase if not enabled         */
+        case 112: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break;
+#endif
+        case 113: normalize=
+                    (tolower(value[0])=='n')?0:1;  break; /* NormalizeURL   */
+        case 114: index_mths=atoi(value);          break; /* IndexMonths    */
+        case 115: graph_mths=atoi(value);          break; /* GraphMonths    */
+        case 116: year_hdrs=
+                    (tolower(value[0])=='n')?0:1;  break; /* YearHeaders    */
+        case 117: year_totals=
+                    (tolower(value[0])=='n')?0:1;  break; /* YearTotals     */
+        case 118: use_flags=
+                    (tolower(value[0])=='y')?1:0;  break; /* CountryFlags   */
+        case 119: use_flags=1; flag_dir=save_opt(value); break; /* FlagDir  */
+        case 120: searchcasei=
+                    (tolower(value[0])=='n')?0:1;  break; /* SearchCaseI    */
+      }
+   }
+   fclose(fp);
+}
+
+/*********************************************/
+/* SAVE_OPT - save option from config file   */
+/*********************************************/
+
+static char *save_opt(char *str)
+{
+   char *cp1;
+
+   if ( (cp1=malloc(strlen(str)+1))==NULL) return NULL;
+
+   strcpy(cp1,str);
+   return cp1;
+}
+
+/*********************************************/
+/* CLEAR_MONTH - initalize monthly stuff     */
+/*********************************************/
+
+void clear_month()
+{
+   int i;
+
+   init_counters();                  /* reset monthly counters  */
+   del_htabs();                      /* clear hash tables       */
+   if (ntop_ctrys!=0 ) for (i=0;i<ntop_ctrys;i++)  top_ctrys[i]=NULL;
+}
+
+/*********************************************/
+/* INIT_COUNTERS - prep counters for use     */
+/*********************************************/
+
+void init_counters()
+{
+   int i;
+   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_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;
+   }
+   for (i=0;ctry[i].desc;i++) /* country totals */
+   {
+      ctry[i].count=0;
+      ctry[i].files=0;
+      ctry[i].xfer=0;
+   }
+   t_hit=t_file=t_site=t_url=t_ref=t_agent=t_page=t_visit=t_user=0;
+   t_xfer=0.0;
+   mh_hit = dt_site = 0;
+   f_day=l_day=1;
+}
+
+/*********************************************/
+/* PRINT_OPTS - print command line options   */
+/*********************************************/
+
+void print_opts(char *pname)
+{
+   int i;
+
+   printf("%s: %s %s\n",h_usage1,pname,h_usage2);
+   for (i=0;h_msg[i];i++) printf("%s\n",h_msg[i]);
+   exit(1);
+}
+
+/*********************************************/
+/* PRINT_VERSION                             */
+/*********************************************/
+
+void print_version()
+{
+   char buf[128]="";
+   uname(&system_info);
+
+   printf("Webalizer V%s-%s (%s %s %s) %s\n%s\n",
+      version,editlvl,
+      system_info.sysname,system_info.release,system_info.machine,
+      language,copyright);
+
+#ifdef USE_DNS
+   strncpy(&buf[strlen(buf)],"DNS/GeoDB ",11);
+#endif
+#ifdef USE_BZIP
+   strncpy(&buf[strlen(buf)],"BZip2 ",7);
+#endif
+#ifdef USE_GEOIP
+   strncpy(&buf[strlen(buf)],"GeoIP ",7);
+#endif
+
+   if (debug_mode)
+   {
+      printf("Mod date: %s  Options: ",moddate);
+      if (buf[0]!=0) printf("%s",buf);
+      else           printf("none");
+      printf("\n");
+#if USE_DNS
+      printf("Default GeoDB dir : %s\n",GEODB_LOC);
+#endif
+      printf("Default config dir: %s\n",ETCDIR);
+      printf("\n");
+   }
+   else printf("\n");
+   exit(1);
+}
+
+/*********************************************/
+/* CUR_TIME - return date/time as a string   */
+/*********************************************/
+
+char *cur_time()
+{
+   time_t     now;
+   static     char timestamp[48];
+
+   /* get system time */
+   now = time(NULL);
+   /* convert to timestamp string */
+   if (local_time)
+      strftime(timestamp,sizeof(timestamp),"%d-%b-%Y %H:%M %Z",
+            localtime(&now));
+   else
+      strftime(timestamp,sizeof(timestamp),"%d-%b-%Y %H:%M GMT",
+            gmtime(&now));
+
+   return timestamp;
+}
+
+/*********************************************/
+/* ISPAGE - determine if an HTML page or not */
+/*********************************************/
+
+int ispage(char *str)
+{
+   NLISTPTR t;
+   char *cp1, *cp2;
+
+   if (isinlist(omit_page,str)!=NULL) return 0;
+
+   cp1=cp2=str;
+   while (*cp1!='\0') { if (*cp1=='.') cp2=cp1; cp1++; }
+   if ((cp2++==str)||(*(--cp1)=='/')) return 1;
+   t=page_prefix;
+   while(t!=NULL)
+   {
+      /* Check if a PagePrefix matches */
+      if(strncmp(str,t->string,strlen(t->string))==0) return 1;
+      t=t->next;
+   }
+   return (isinlist(page_type,cp2)!=NULL);
+}
+
+/*********************************************/
+/* ISURLCHAR - checks for valid URL chars    */
+/*********************************************/
+
+int isurlchar(unsigned char ch, int flag)
+{
+   if (isalnum(ch)) return 1;                /* allow letters, numbers...    */
+   if (ch > 127)    return 1;                /* allow extended chars...      */
+   if (flag)                                 /* and filter some others       */
+      return (strchr(":/\\.,' *!-+_@~()[]!",ch)!=NULL);    /* strip cgi vars */
+   else
+      return (strchr(":/\\.,' *!-+_@~()[]!;?&=",ch)!=NULL); /* keep cgi vars */
+}
+
+/*********************************************/
+/* CTRY_IDX - create unique # from TLD       */
+/*********************************************/
+
+u_int64_t ctry_idx(char *str)
+{
+   int       i=strlen(str),j=0;
+   u_int64_t idx=0;
+   char      *cp=str+i;
+
+   for (;i>0;i--) { idx+=((*--cp-'a'+1)<<j); j+=(j==0)?7:5; }
+   return idx;
+}
+
+/*********************************************/
+/* UN_IDX - get TLD from index #             */
+/*********************************************/
+
+char *un_idx(u_int64_t idx)
+{
+   int    i,j;
+   char   *cp;
+   static char buf[8];
+
+   memset(buf, 0, sizeof(buf));
+   if (idx<=0) return buf;
+   if ((j=(idx&0x7f))>32) /* only for a1, a2 and o1 */
+      { buf[0]=(idx>>7)+'a'; buf[1]=j-32; return buf; }
+
+   for (i=5;i>=0;i--)
+      buf[i]=(i==5)?(idx&0x7f)+'a'-1:(j=(idx>>(((5-i)*5)+2))&0x1f)?j+'a'-1:' ';
+   cp=buf; while (*cp==' ') { for (i=0;i<6;i++) buf[i]=buf[i+1]; } return buf;
+}
+
+/*********************************************/
+/* FROM_HEX - convert hex char to decimal    */
+/*********************************************/
+
+char from_hex(char c)                           /* convert hex to dec      */
+{
+   c = (c>='0'&&c<='9')?c-'0':                  /* 0-9?                    */
+       (c>='A'&&c<='F')?c-'A'+10:               /* A-F?                    */
+       c - 'a' + 10;                            /* lowercase...            */
+   return (c<0||c>15)?0:c;                      /* return 0 if bad...      */
+}
+
+/*********************************************/
+/* UNESCAPE - convert escape seqs to chars   */
+/*********************************************/
+
+char *unescape(char *str)
+{
+   unsigned char *cp1=(unsigned char *)str;     /* force unsigned so we    */
+   unsigned char *cp2=cp1;                      /* can do > 127            */
+
+   if (!str) return NULL;                       /* make sure strings valid */
+
+   while (*cp1)
+   {
+      if (*cp1=='%')                            /* Found an escape?        */
+      {
+         cp1++;
+         if (isxdigit(*cp1))                    /* ensure a hex digit      */
+         {
+            if (*cp1) *cp2=from_hex(*cp1++)*16; /* convert hex to an ASCII */
+            if (*cp1) *cp2+=from_hex(*cp1);     /* (hopefully) character   */
+            if ((*cp2<32)||(*cp2==127)) *cp2='_'; /* make '_' if its bad   */
+            if (*cp1) { cp2++; cp1++; }
+         }
+         else *cp2++='%';
+      }
+      else *cp2++ = *cp1++;                     /* if not, just continue   */
+   }
+   *cp2=*cp1;                                   /* don't forget terminator */
+   return str;                                  /* return the string       */
+}
+
+/*********************************************/
+/* OURICMP - Case insensitive string compare */
+/*********************************************/
+
+int ouricmp(char *str1, char *str2)
+{
+   while((*str1!=0) &&
+    (tolower((unsigned char)*str1)==tolower((unsigned char)*str2)))
+    { str1++;str2++; }
+   if (*str1==0) return 0; else return 1;
+}
+
+/*********************************************/
+/* SRCH_STRING - get search strings from ref */
+/*********************************************/
+
+void srch_string(char *ptr)
+{
+   /* ptr should point to unescaped query string */
+   char tmpbuf[BUFSIZE];
+   char srch[80]="";
+   unsigned char *cp1, *cp2, *cps;
+   int  sp_flg=0;
+
+   /* Check if search engine referrer or return  */
+   if ( (cps=(unsigned char *)isinglist(search_list,log_rec.refer))==NULL)
+      return; 
+
+   /* Try to find query variable */
+   srch[0]='?'; srch[sizeof(srch)-1] = '\0';
+   strncpy(&srch[1],(char *)cps,sizeof(srch)-2);   /* First, try "?..."      */
+   if ((cp1=(unsigned char *)strstr(ptr,srch))==NULL)
+   {
+      srch[0]='&';                                 /* Next, try "&..."       */
+      if ((cp1=(unsigned char *)strstr(ptr,srch))==NULL) return;
+   }
+   cp2=(unsigned char *)tmpbuf;
+   while (*cp1!='=' && *cp1!=0) cp1++; if (*cp1!=0) cp1++;
+   while (*cp1!='&' && *cp1!=0)
+   {
+      if (*cp1=='"' || *cp1==',' || *cp1=='?')
+          { cp1++; continue; }                         /* skip bad ones..    */
+      else
+      {
+         if (*cp1=='+') *cp1=' ';                      /* change + to space  */
+         if (sp_flg && *cp1==' ') { cp1++; continue; } /* compress spaces    */
+         if (*cp1==' ') sp_flg=1; else sp_flg=0;       /* (flag spaces here) */
+         if (searchcasei)
+            *cp2++=tolower(*cp1++);                    /* normal character   */
+         else *cp2++=*cp1++;
+      }
+   }
+   *cp2=0; cp2=(unsigned char *)tmpbuf;
+   if (tmpbuf[0]=='?') tmpbuf[0]=' ';                  /* format fix ?       */
+   while( *cp2!=0 && isspace((unsigned char)*cp2) ) cp2++;     /* skip sps.  */
+   if (*cp2==0) return;
+
+   /* any trailing spaces? */
+   cp1=cp2+strlen((char *)cp2)-1;
+   while (cp1!=cp2) if (isspace((unsigned char)*cp1)) *cp1--='\0'; else break;
+
+   /* strip invalid chars */
+   cp1=cp2;
+   while (*cp1!=0) { if ((*cp1<32)||(*cp1==127)) *cp1='_'; cp1++; }
+
+   if (put_snode((char *)cp2,(u_int64_t)1,sr_htab))
+   {
+      if (verbose)
+      /* Error adding search string node, skipping .... */
+      fprintf(stderr,"%s %s\n", msg_nomem_sc, tmpbuf);
+   }
+   return;
+}
+
+/*********************************************/
+/* GET_DOMAIN - Get domain portion of host   */
+/*********************************************/
+
+char *get_domain(char *str)
+{
+   char *cp;
+   int  i=group_domains+1;
+
+   if (isipaddr(str)) return NULL;
+   cp = str+strlen(str)-1;
+
+   while (cp!=str)
+   {
+      if (*cp=='.')
+         if (!(--i)) return ++cp;
+      cp--;
+   }
+   return cp;
+}
+
+/*********************************************/
+/* AGENT_MANGLE - Re-format user agent       */
+/*********************************************/
+
+void agent_mangle(char *str)
+{
+   char *cp1, *cp2, *cp3;
+
+   str=cp2=log_rec.agent;
+   cp1=strstr(str,"ompatible"); /* check known fakers */
+   if (cp1!=NULL)
+   {
+      while (*cp1!=';'&&*cp1!='\0') cp1++;
+      /* kludge for Mozilla/3.01 (compatible;) */
+      if (*cp1++==';' && strcmp(cp1,")\""))  /* success! */
+      {
+         /* Opera can hide as MSIE */
+         cp3=strstr(str,"Opera");
+         if (cp3!=NULL)
+         {
+            while (*cp3!='.'&&*cp3!='\0')
+            {
+               if(*cp3=='/') *cp2++=' ';
+               else *cp2++=*cp3;
+               cp3++;
+            }
+            cp1=cp3;
+         }
+         else
+         {
+            while (*cp1 == ' ') cp1++; /* eat spaces */
+            while (*cp1!='.'&&*cp1!='\0'&&*cp1!=';') *cp2++=*cp1++;
+         }
+         if (mangle_agent<5)
+         {
+            while (*cp1!='.'&&*cp1!=';'&&*cp1!='\0') *cp2++=*cp1++;
+            if (*cp1!=';'&&*cp1!='\0') { *cp2++=*cp1++; *cp2++=*cp1++; }
+         }
+         if (mangle_agent<4)
+            if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;
+         if (mangle_agent<3)
+            while (*cp1!=';'&&*cp1!='\0'&&*cp1!='('&&*cp1!=' ') *cp2++=*cp1++;
+         if (mangle_agent<2)
+         {
+            /* Level 1 - try to get OS */
+            cp1=strstr(cp1,")");
+            if (cp1!=NULL)
+            {
+               *cp2++=' ';
+               *cp2++='(';
+               while (*cp1!=';'&&*cp1!='('&&cp1!=str) cp1--;
+               if (cp1!=str&&*cp1!='\0') cp1++;
+               while (*cp1==' '&&*cp1!='\0') cp1++;
+               while (*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++;
+               *cp2++=')';
+            }
+         }
+         *cp2='\0';
+      }
+      else
+      {
+         /* nothing after "compatible", should we mangle? */
+         /* not for now */
+      }
+   }
+   else
+   {
+      cp1=strstr(str,"Opera");  /* Opera flavor         */
+      if (cp1!=NULL)
+      {
+         while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++;
+         while (*cp1!='.'&&*cp1!='\0')
+         {
+            if(*cp1=='/') *cp2++=' ';
+            else *cp2++=*cp1;
+            cp1++;
+         }
+         if (mangle_agent<5)
+         {
+            while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;
+            *cp2++=*cp1++;
+            *cp2++=*cp1++;
+         }
+         if (mangle_agent<4)
+            if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;
+         if (mangle_agent<3)
+            while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++;
+         if (mangle_agent<2)
+         {
+            cp1=strstr(cp1,"(");
+            if (cp1!=NULL)
+            {
+               cp1++;
+               *cp2++=' ';
+               *cp2++='(';
+               while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++;
+               *cp2++=')';
+            }
+         }
+         *cp2='\0';
+      }
+      else
+      { 
+         cp1=strstr(str,"Mozilla");  /* Netscape flavor      */
+         if (cp1!=NULL)
+         {
+            while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++;
+            if (*cp1==' ') *cp1='/';
+            while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;
+            if (mangle_agent<5)
+            {
+               while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;
+               *cp2++=*cp1++;
+               *cp2++=*cp1++;
+            }
+            if (mangle_agent<4)
+               if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;
+            if (mangle_agent<3)
+               while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++;
+            if (mangle_agent<2)
+            {
+               /* Level 1 - Try to get OS */
+               cp1=strstr(cp1,"(");
+               if (cp1!=NULL)
+               {
+                  cp1++;
+                  *cp2++=' ';
+                  *cp2++='(';
+                  while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++;
+                  *cp2++=')';
+               }
+            }
+            *cp2='\0';
+         }
+      }
+   }
+}
+
+/*********************************************/
+/* OUR_GZGETS - enhanced gzgets for log only */
+/*********************************************/
+
+char *our_gzgets(void *fp, char *buf, int size)
+{
+   char *out_cp=buf;      /* point to output */
+   while (1)
+   {
+      if (f_cp>(f_buf+f_end-1))     /* load? */
+      {
+#ifdef USE_BZIP
+         f_end=(gz_log==COMP_BZIP)?
+            BZ2_bzread(fp, f_buf, GZ_BUFSIZE):
+            gzread(fp, f_buf, GZ_BUFSIZE);
+#else
+         f_end=gzread(fp, f_buf, GZ_BUFSIZE);
+#endif
+         if (f_end<=0) return Z_NULL;
+         f_cp=f_buf;
+      }
+
+      if (--size)                   /* more? */
+      {
+         *out_cp++ = *f_cp;
+         if (*f_cp++ == '\n') { *out_cp='\0'; return buf; }
+      }
+      else { *out_cp='\0'; return buf; }
+   }
+}
+
+#ifdef USE_BZIP
+/*********************************************/
+/* bz2_rewind - our 'rewind' for bz2 files   */
+/*********************************************/
+
+int bz2_rewind( void **fp, char *fname, char *mode )
+{
+   BZ2_bzclose( *fp );
+   *fp = BZ2_bzopen( fname, "rb");
+   f_cp=f_buf+GZ_BUFSIZE; f_end=0;   /* reset buffer counters */
+   memset(f_buf, 0, sizeof(f_buf));
+   if (*fp == Z_NULL) return -1;
+   else return 0;
+}
+#endif /* USE_BZIP */
+
+/*********************************************/
+/* ISIPADDR - Determine if str is IP address */
+/*********************************************/
+
+int isipaddr(char *str)
+{
+   int  i=1,j=0;
+   char *cp;   /* generic ptr  */
+
+   if (strchr(str,':')!=NULL)
+   {
+      /* Possible IPv6 Address */
+      cp=str;
+      while (strchr(":.abcdef0123456789",*cp)!=NULL && *cp!='\0')
+      {
+         if (*cp=='.')   j++;
+         if (*cp++==':') i++;
+      }
+
+      if (*cp!='\0') return -1;                   /* bad hostname (has ':') */
+      if (i>1 && j) return 2;                     /* IPv4/IPv6    */
+      return 3;                                   /* IPv6         */
+   }
+   else
+   {
+      /* Not an IPv6 address, check for IPv4 */
+      cp=str;
+      while (strchr(".0123456789",*cp)!=NULL && *cp!='\0')
+      {
+         if (*cp++=='.') i++;
+      }
+      if (*cp!='\0') return 0;                    /* hostname     */
+      if (i!=4) return -1;                        /* bad hostname */
+      return 1;                                   /* IPv4         */
+   }
+}
+
+/*****************************************************************/
+/*                                                               */
+/* JDATE  - Julian date calculator                               */
+/*                                                               */
+/* Calculates the number of days since Jan 1, 0000.              */
+/*                                                               */
+/* Originally written by Bradford L. Barrett (03/17/1988)        */
+/* Returns an unsigned long value representing the number of     */
+/* days since January 1, 0000.                                   */
+/*                                                               */
+/* Note: Due to the changes made by Pope Gregory XIII in the     */
+/*       16th Centyry (Feb 24, 1582), dates before 1583 will     */
+/*       not return a truely accurate number (will be at least   */
+/*       10 days off).  Somehow, I don't think this will         */
+/*       present much of a problem for most situations :)        */
+/*                                                               */
+/* Usage: days = jdate(day, month, year)                         */
+/*                                                               */
+/* The number returned is adjusted by 5 to facilitate day of     */
+/* week calculations.  The mod of the returned value gives the   */
+/* day of the week the date is.  (ie: dow = days % 7 ) where     */
+/* dow will return 0=Sunday, 1=Monday, 2=Tuesday, etc...         */
+/*                                                               */
+/*****************************************************************/
+
+u_int64_t jdate( int day, int month, int year )
+{
+   u_int64_t days;                      /* value returned */
+   int mtable[] = {0,31,59,90,120,151,181,212,243,273,304,334};
+
+   /* First, calculate base number including leap and Centenial year stuff */
+
+   days=(((u_int64_t)year*365)+day+mtable[month-1]+
+           ((year+4)/4) - ((year/100)-(year/400)));
+
+   /* now adjust for leap year before March 1st */
+
+   if ((year % 4 == 0) && !((year % 100 == 0) &&
+       (year % 400 != 0)) && (month < 3))
+   --days;
+
+   /* done, return with calculated value */
+
+   return(days+5);
+}
diff --git a/webalizer.h b/webalizer.h
new file mode 100644 (file)
index 0000000..7a3941c
--- /dev/null
@@ -0,0 +1,302 @@
+#ifndef _WEBALIZER_H
+#define _WEBALIZER_H
+
+#define PCENT(val,max) ((val)?((double)val/(double)max)*100.0 : 0.0)
+#define IDX_2C(c1,c2)       (((c1-'a'+1)<<7)+(c2-'a'+1) )
+#define IDX_3C(c1,c2,c3)    (((c1-'a'+1)<<12)+((c2-'a'+1)<<7)+(c3-'a'+1) )
+#define IDX_4C(c1,c2,c3,c4) (((c1-'a'+1)<<17)+((c2-'a'+1)<<12)+((c3-'a'+1)<<7)+(c4-'a'+1) )
+#define IDX_5C(c1,c2,c3,c4,c5) (((c1-'a'+1)<<22)+((c2-'a'+1)<<17)+((c3-'a'+1)<<12)+((c4-'a'+1)<<7)+(c5-'a'+1) )
+#define IDX_6C(c1,c2,c3,c4,c5,c6) (((c1-'a'+1)<<27)+((c2-'a'+1)<<22)+((c3-'a'+1)<<17)+((c4-'a'+1)<<12)+((c5-'a'+1)<<7)+(c6-'a'+1) )
+
+#ifndef MAX
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+#define MAXHASH  4096                  /* Size of our hash tables          */
+#define BUFSIZE  4096                  /* Max buffer size for log record   */
+#define MAXHOST  128                   /* Max hostname buffer size         */
+#define MAXURL   4096                  /* Max HTTP request/URL field size  */
+#define MAXURLH  512                   /* Max URL field size in htab       */
+#define MAXREF   1024                  /* Max referrer field size          */
+#define MAXREFH  256                   /* Max referrer field size in htab  */
+#define MAXAGENT 128                   /* Max user agent field size        */
+#define MAXCTRY  48                    /* Max country name size            */
+#define MAXSRCH  256                   /* Max size of search string buffer */
+#define MAXSRCHH 128                   /* Max size of search str in htab   */
+#define MAXIDENT 64                    /* Max size of ident string (user)  */
+#define MAXKWORD 32                    /* Max size of config keyword       */
+#define MAXKVAL  132                   /* Max size of config value         */
+#define HISTSIZE 120                   /* Size of history in months        */
+#define GRAPHMAX 72                    /* Max months in index graph        */
+
+#define SLOP_VAL 3600                  /* out of sequence slop (seconds)   */
+
+/* Log types */
+#define LOG_CLF   0                    /* CLF/combined log type            */
+#define LOG_FTP   1                    /* wu-ftpd xferlog type             */
+#define LOG_SQUID 2                    /* squid proxy log                  */
+#define LOG_W3C   3                    /* W3C extended log format          */
+
+/* compression */
+#define COMP_NONE 0
+#define COMP_GZIP 1
+#define COMP_BZIP 2
+
+/* Response code defines as per draft ietf HTTP/1.1 rev 6 */
+#define RC_CONTINUE           100
+#define RC_SWITCHPROTO        101
+#define RC_OK                 200
+#define RC_CREATED            201
+#define RC_ACCEPTED           202
+#define RC_NONAUTHINFO        203
+#define RC_NOCONTENT          204
+#define RC_RESETCONTENT       205
+#define RC_PARTIALCONTENT     206
+#define RC_MULTIPLECHOICES    300
+#define RC_MOVEDPERM          301
+#define RC_MOVEDTEMP          302
+#define RC_SEEOTHER           303
+#define RC_NOMOD              304
+#define RC_USEPROXY           305
+#define RC_MOVEDTEMPORARILY   307
+#define RC_BAD                400
+#define RC_UNAUTH             401
+#define RC_PAYMENTREQ         402
+#define RC_FORBIDDEN          403
+#define RC_NOTFOUND           404
+#define RC_METHODNOTALLOWED   405
+#define RC_NOTACCEPTABLE      406
+#define RC_PROXYAUTHREQ       407
+#define RC_TIMEOUT            408
+#define RC_CONFLICT           409
+#define RC_GONE               410
+#define RC_LENGTHREQ          411
+#define RC_PREFAILED          412
+#define RC_REQENTTOOLARGE     413
+#define RC_REQURITOOLARGE     414
+#define RC_UNSUPMEDIATYPE     415
+#define RC_RNGNOTSATISFIABLE  416
+#define RC_EXPECTATIONFAILED  417
+#define RC_SERVERERR          500
+#define RC_NOTIMPLEMENTED     501
+#define RC_BADGATEWAY         502
+#define RC_UNAVAIL            503
+#define RC_GATEWAYTIMEOUT     504
+#define RC_BADHTTPVER         505
+
+/* Index defines for RC codes */
+#define IDX_UNDEFINED          0
+#define IDX_CONTINUE           1
+#define IDX_SWITCHPROTO        2
+#define IDX_OK                 3
+#define IDX_CREATED            4 
+#define IDX_ACCEPTED           5 
+#define IDX_NONAUTHINFO        6 
+#define IDX_NOCONTENT          7  
+#define IDX_RESETCONTENT       8 
+#define IDX_PARTIALCONTENT     9 
+#define IDX_MULTIPLECHOICES    10 
+#define IDX_MOVEDPERM          11 
+#define IDX_MOVEDTEMP          12 
+#define IDX_SEEOTHER           13 
+#define IDX_NOMOD              14 
+#define IDX_USEPROXY           15 
+#define IDX_MOVEDTEMPORARILY   16
+#define IDX_BAD                17 
+#define IDX_UNAUTH             18 
+#define IDX_PAYMENTREQ         19 
+#define IDX_FORBIDDEN          20 
+#define IDX_NOTFOUND           21 
+#define IDX_METHODNOTALLOWED   22 
+#define IDX_NOTACCEPTABLE      23 
+#define IDX_PROXYAUTHREQ       24 
+#define IDX_TIMEOUT            25 
+#define IDX_CONFLICT           26 
+#define IDX_GONE               27 
+#define IDX_LENGTHREQ          28 
+#define IDX_PREFAILED          29 
+#define IDX_REQENTTOOLARGE     30 
+#define IDX_REQURITOOLARGE     31 
+#define IDX_UNSUPMEDIATYPE     32
+#define IDX_RNGNOTSATISFIABLE  33
+#define IDX_EXPECTATIONFAILED  34 
+#define IDX_SERVERERR          35 
+#define IDX_NOTIMPLEMENTED     36 
+#define IDX_BADGATEWAY         37 
+#define IDX_UNAVAIL            38 
+#define IDX_GATEWAYTIMEOUT     39 
+#define IDX_BADHTTPVER         40 
+#define TOTAL_RC               41
+
+#ifdef USE_DNS
+#include <netinet/in.h>       /* needed for in_addr structure definition   */
+#ifndef INADDR_NONE
+#define INADDR_NONE 0xFFFFFFFF
+#endif  /* INADDR_NONE */
+#endif
+
+/* Response code structure */
+struct response_code {     char    *desc;         /* code description     */
+                      u_int64_t    count; };      /* hit counter          */
+
+/* Country code structure */
+struct country_code {u_int64_t idx;              /* TLD index number     */
+                           char *desc;            /* TLD description      */
+                      u_int64_t count;            /* hit counter          */
+                      u_int64_t files;            /* file counter         */
+                         double xfer; };          /* xfer amt counter     */
+
+typedef struct country_code *CLISTPTR;
+
+/* log record structure */
+struct  log_struct  {  char   hostname[MAXHOST];  /* hostname             */
+                       char   datetime[29];       /* raw timestamp        */
+                       char   url[MAXURL];        /* raw request field    */
+                        int   resp_code;          /* response code        */
+                  u_int64_t   xfer_size;          /* xfer size in bytes   */
+                       char   refer[MAXREF];      /* referrer             */
+                       char   agent[MAXAGENT];    /* user agent (browser) */
+                       char   srchstr[MAXSRCH];   /* search string        */
+                       char   ident[MAXIDENT]; }; /* ident string (user)  */
+
+extern struct log_struct log_rec;
+
+extern char    *version     ;                 /* program version          */
+extern char    *editlvl     ;                 /* edit level               */
+extern char    *moddate     ;                 /* modification date        */
+extern char    *copyright   ;
+
+extern int     verbose      ;                 /* 2=verbose,1=err, 0=none  */ 
+extern int     debug_mode   ;                 /* debug mode flag          */
+extern int     time_me      ;                 /* timing display flag      */
+extern int     local_time   ;                 /* 1=localtime 0=GMT (UTC)  */
+extern int     hist_gap     ;                 /* hist error, save backup  */
+extern int     ignore_hist  ;                 /* history flag (1=skip)    */
+extern int     ignore_state ;                 /* state fiag (1=skip)      */
+extern int     hourly_graph ;                 /* hourly graph display     */
+extern int     hourly_stats ;                 /* hourly stats table       */
+extern int     daily_graph  ;                 /* daily graph display      */
+extern int     daily_stats  ;                 /* daily stats table        */
+extern int     ctry_graph   ;                 /* country graph display    */
+extern int     shade_groups ;                 /* Group shading 0=no 1=yes */
+extern int     hlite_groups ;                 /* Group hlite 0=no 1=yes   */
+extern int     mangle_agent ;                 /* mangle user agents       */
+extern int     incremental  ;                 /* incremental mode 1=yes   */
+extern int     use_https    ;                 /* use 'https://' on URLs   */
+extern int     htaccess     ;                 /* create .htaccess? (0=no) */
+extern int     visit_timeout;                 /* visit timeout (30 min)   */
+extern int     graph_legend ;                 /* graph legend (1=yes)     */
+extern int     graph_lines  ;                 /* graph lines (0=none)     */
+extern int     fold_seq_err ;                 /* fold seq err (0=no)      */
+extern int     log_type     ;                 /* (0=clf, 1=ftp, 2=squid)  */
+extern int     group_domains;                 /* Group domains 0=none     */
+extern int     hide_sites   ;                 /* Hide ind. sites (0=no)   */
+extern int     graph_mths   ;                 /* # months in index graph  */
+extern int     index_mths   ;                 /* # months in index table  */
+extern int     year_hdrs    ;                 /* Show year headers (0=no) */
+extern int     year_totals  ;                 /* Show year totals (0=no)  */
+extern int     use_flags    ;                 /* Show flags in ctry table */
+extern char    *flag_dir    ;                 /* flag directory           */
+extern char    *hname       ;                 /* hostname for reports     */
+extern char    *state_fname ;                 /* run state file name      */
+extern char    *hist_fname  ;                 /* name of history file     */
+extern char    *html_ext    ;                 /* HTML file prefix         */
+extern char    *dump_ext    ;                 /* Dump file prefix         */
+extern char    *conf_fname  ;                 /* name of config file      */
+extern char    *log_fname   ;                 /* log file pointer         */
+extern char    *out_dir     ;                 /* output directory         */
+extern char    *blank_str   ;                 /* blank string             */
+extern char    *dns_cache   ;                 /* DNS cache file name      */
+extern int     geodb        ;                 /* Use GeoDB flag (0=no)    */
+extern int     dns_children ;                 /* # of DNS children        */
+extern int     cache_ips    ;                 /* Cache IP addrs (0=no)    */
+extern int     cache_ttl    ;                 /* Cache entry TTL (days)   */
+extern int     link_referrer;                 /* link referrer (0=no)     */
+extern int     trimsquid    ;                 /* trim squid URLs (0=none) */
+extern int     searchcasei  ;                 /* case insensitive search  */
+
+extern int     ntop_sites   ;                 /* top n sites to display   */
+extern int     ntop_sitesK  ;                 /* top n sites (by kbytes)  */
+extern int     ntop_urls    ;                 /* top n url's to display   */
+extern int     ntop_urlsK   ;                 /* top n url's (by kbytes)  */
+extern int     ntop_entry   ;                 /* top n entry url's        */
+extern int     ntop_exit    ;                 /* top n exit url's         */
+extern int     ntop_refs    ;                 /* top n referrers ""       */
+extern int     ntop_agents  ;                 /* top n user agents ""     */
+extern int     ntop_ctrys   ;                 /* top n countries   ""     */
+extern int     ntop_search  ;                 /* top n search strings     */
+extern int     ntop_users   ;                 /* top n users to display   */
+
+extern int     all_sites    ;                 /* List All sites (0=no)    */
+extern int     all_urls     ;                 /* List All URLs  (0=no)    */
+extern int     all_refs     ;                 /* List All Referrers       */
+extern int     all_agents   ;                 /* List All User Agents     */
+extern int     all_search   ;                 /* List All Search Strings  */
+extern int     all_users    ;                 /* List All Usernames       */
+
+extern int     dump_sites   ;                 /* Dump tab delimited sites */
+extern int     dump_urls    ;                 /* URLs                     */
+extern int     dump_refs    ;                 /* Referrers                */
+extern int     dump_agents  ;                 /* User Agents              */
+extern int     dump_users   ;                 /* Usernames                */
+extern int     dump_search  ;                 /* Search strings           */
+extern int     dump_header  ;                 /* Dump header as first rec */
+extern char    *dump_path   ;                 /* Path for dump files      */
+
+extern u_int64_t cur_tstamp;                  /* Current timestamp        */
+extern u_int64_t epoch;                       /* used for timestamp adj.  */
+extern int       check_dup;                   /* check for dups flag      */
+
+extern int       cur_year,cur_month,          /* year/month/day/hour      */
+                 cur_day, cur_hour,           /* tracking variables       */
+                 cur_min, cur_sec;
+
+extern double    t_xfer;                      /* monthly total xfer value */
+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 u_int64_t tm_hit[31], tm_file[31],     /* daily total arrays       */
+                 tm_site[31],tm_page[31],
+                 tm_visit[31];
+
+extern u_int64_t dt_site;                     /* daily 'sites' total      */
+
+extern u_int64_t ht_hit,mh_hit;               /* hourly hits totals       */
+
+extern u_int64_t th_hit[24], th_file[24],     /* hourly total arrays      */
+                 th_page[24];
+
+extern double    th_xfer[24];                 /* hourly xfer array        */
+
+extern int       f_day,l_day;                 /* first/last day vars      */
+extern int       gz_log;                      /* flag for zipped log      */
+
+extern CLISTPTR  *top_ctrys;                  /* Top countries table      */
+
+extern char    hit_color[];                   /* graph hit color          */
+extern char    file_color[];                  /* graph file color         */
+extern char    site_color[];                  /* graph site color         */
+extern char    kbyte_color[];                 /* graph kbyte color        */
+extern char    page_color[];                  /* graph page color         */
+extern char    visit_color[];                 /* graph visit color        */
+extern char    misc_color[];                  /* graph misc color         */
+extern char    pie_color1[];                  /* pie additionnal color 1  */
+extern char    pie_color2[];                  /* pie additionnal color 2  */
+extern char    pie_color3[];                  /* pie additionnal color 3  */
+extern char    pie_color4[];                  /* pie additionnal color 4  */
+
+/* define our externally visable functions */
+
+extern char      *cur_time();
+extern u_int64_t ctry_idx(char *);
+extern char      *un_idx(u_int64_t);
+extern void      init_counters();
+extern int       ispage(char *);
+extern u_int64_t jdate(int,int,int);
+extern char      from_hex(char);
+extern int       isipaddr(char *);
+
+#endif  /* _WEBALIZER_H */
diff --git a/webalizer.png b/webalizer.png
new file mode 100644 (file)
index 0000000..39f41c5
Binary files /dev/null and b/webalizer.png differ
diff --git a/webalizer_lang.h b/webalizer_lang.h
new file mode 120000 (symlink)
index 0000000..d62cfa2
--- /dev/null
@@ -0,0 +1 @@
+lang/webalizer_lang.english
\ No newline at end of file