--- /dev/null
+--------------------------------------------------------------------
+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
--- /dev/null
+ 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.
--- /dev/null
+ 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
+
--- /dev/null
+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.
+
--- /dev/null
+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.
+
--- /dev/null
+#
+# 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
--- /dev/null
+#
+# 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
--- /dev/null
+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.
--- /dev/null
+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!
+
--- /dev/null
+#! /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;}
--- /dev/null
+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.)
--- /dev/null
+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)
--- /dev/null
+/*
+ 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 */
--- /dev/null
+#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 */
--- /dev/null
+/*
+ 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);
+}
--- /dev/null
+#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 */
--- /dev/null
+/*
+ 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 */
--- /dev/null
+#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 */
--- /dev/null
+#! /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
--- /dev/null
+#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 */
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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ériode du résumé";
+char *msg_hhdr_gt = "Généré le";
+
+/* main index strings */
+char *msg_main_us = "Resume des acces pour";
+/* char *msg_main_per= "12 derniers mois"; */
+char *msg_main_per= "Résumé par mois";
+char *msg_main_sum= "Résumé par mois";
+char *msg_main_da = "Moyenne journaliè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ôte";
+char *msg_h_url = "URL";
+char *msg_h_agent = "Navigateur";
+char *msg_h_ref = "Référent";
+char *msg_h_ctry = "Pays";
+char *msg_h_search= "Mots-clés";
+char *msg_h_uname = "Utilisateur";
+
+/* links along top of page */
+char *msg_hlnk_ds = "Statistiques journaliè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éférents";
+char *msg_hlnk_en = "Pages d'entrée";
+char *msg_hlnk_ex = "Pages de sortie";
+char *msg_hlnk_sr = "Mots-clé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éfé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éponse";
+
+/* daily total table */
+char *msg_dtot_ds = "Statistiques journaliè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éférents";
+char *msg_top_a = "navigateurs";
+char *msg_top_c = "pays";
+char *msg_top_en = "pages d'entrée";
+char *msg_top_ex = "pages de sortie";
+char *msg_top_sr = "groupes de mots-clé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éférents";
+char *msg_v_agents= "Voir tous les navigateurs";
+char *msg_v_search= "Voir tous les mots-clé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évrier", "Mars", "Avril",
+ "Mai", "Juin", "Juillet", "Août",
+ "Septembre","Octobre", "Novembre","Dé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ès à";
+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 }};
--- /dev/null
+/*
+ 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 }};
+
--- /dev/null
+/*
+ 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ü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ä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ü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ültige Information", 0 },
+ { "Code 204 - Kein Inhalt", 0 },
+ { "Code 205 - Lösche Inhalt", 0 },
+ { "Code 206 - Unvollständiger Inhalt", 0 },
+ { "Code 300 - Mehrere Auswahlmö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ändert", 0 },
+ { "Code 305 - Die Benutzung des Proxys ist erforderlich", 0 },
+ { "Code 307 - Die Seite wurde vorübergehend an eine andere Stelle verlegt", 0 },
+ { "Code 400 - Ungü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überschreitung erfolgte durch das Anwenderprogramm ...", 0 },
+ { "Code 409 - Konflikt", 0 },
+ { "Code 410 - Verloren", 0 },
+ { "Code 411 - Eine Längenangabe ist erforderlich", 0 },
+ { "Code 412 - Fehlende Voraussetzung", 0 },
+ { "Code 413 - Request-Entity zu groß", 0 },
+ { "Code 414 - Request-URI zu lang", 0 },
+ { "Code 415 - Nicht unterstü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ügbar", 0 },
+ { "Code 504 - Gateway Zeitüberschreitung...", 0 },
+ { "Code 505 - Die HTTP-Version wird nicht unterstützt", 0 } };
+
+/* New for 1.1 */
+
+char *msg_title = "Aufruf-Statistik fü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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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ê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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/* 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
+
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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> */
+/* Å = Å Ä = Ä Ö = Ö */
+/* å = å ä = ä ö = ö */
+/***********************************************************************/
+
+/* header strings */
+char *msg_hhdr_sp = "Period fö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ånaderna"; */
+char *msg_main_per= "Summering månad för månad";
+char *msg_main_sum= "Summering månad för månad";
+char *msg_main_da = "Medel över dagen";
+char *msg_main_mt = "Må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ånad"; // HTML
+char *msg_h_mth = "Månad"; // GD
+char *msg_h_hour = "Timme";
+// char *msg_h_hits = "Träffar"; // HTML
+char *msg_h_hits = "Träffar"; // GD
+char *msg_h_pages = "Sidor";
+// char *msg_h_visits= "Besö."; // 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ä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öksträng"; // HTML
+char *msg_h_search= "Söksträng"; // GD
+// char *msg_h_uname = "Anvä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ör timme";
+char *msg_hlnk_u = "URLer";
+char *msg_hlnk_s = "Klientadresser";
+char *msg_hlnk_a = "Klienttyper";
+char *msg_hlnk_c = "Länder";
+char *msg_hlnk_r = "Hänvisare";
+char *msg_hlnk_en = "Ingång";
+char *msg_hlnk_ex = "Utgång";
+char *msg_hlnk_sr = "Sök";
+char *msg_hlnk_i = "Användare";
+
+/* monthly total table */
+char *msg_mtot_ms = "Månatlig statistik för";
+char *msg_mtot_th = "Totalt antal träffar";
+char *msg_mtot_tf = "Totalt antal filer";
+char *msg_mtot_tx = "Totalt antal kilobytes";
+char *msg_mtot_us = "Totalt antal unika klientadresser";
+char *msg_mtot_ur = "Totalt antal unika hä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ändarnamn";
+char *msg_mtot_mhd= "Träffar per dag";
+char *msg_mtot_mhh= "Trä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ök per dag";
+char *msg_mtot_mkd= "Kilobytes per dag";
+char *msg_mtot_rc = "Träffar sorterade efter svarskod";
+
+/* daily total table */
+char *msg_dtot_ds = "Daglig statistik för";
+
+/* hourly total table */
+char *msg_htot_hs = "Statistik timme för timme fö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änvisnigar";
+char *msg_top_a = "klienttyper";
+char *msg_top_c = "länder";
+char *msg_top_en = "totalt ingångssidor";
+char *msg_top_ex = "totalt utgångssidor";
+char *msg_top_sr = "totalt söksträngar";
+char *msg_top_i = "totalt anvä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ändar Agenter";
+char *msg_v_search= "Visa Alla Sök Strängar";
+char *msg_v_users = "Visa Alla Anvä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ä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åll", 0 },
+ { "Kod 205 - återställ innehåll", 0 },
+ { "Kod 206 - Partiellt innehåll", 0 },
+ { "Kod 300 - Multipla val", 0 },
+ { "Kod 301 - Permanent flyttad", 0 },
+ { "Kod 302 - Funnen", 0 },
+ { "Kod 303 - Se annan", 0 },
+ { "Kod 304 - Inte ändrad", 0 },
+ { "Kod 305 - Använd proxy", 0 },
+ { "Kod 307 - Tillfälligt flyttad", 0 },
+ { "Kod 400 - Felaktig förfrågan", 0 },
+ { "Kod 401 - Icke auktoriserad", 0 },
+ { "Kod 402 - Betalning krävs", 0 },
+ { "Kod 403 - Förbjuden", 0 },
+ { "Kod 404 - Hittades ej", 0 },
+ { "Kod 405 - Otillåten metod", 0 },
+ { "Kod 406 - Icke accepterbar", 0 },
+ { "Kod 407 - Verifiering från proxy krävs", 0 },
+ { "Kod 408 - Förfrågan gick över tiden", 0 },
+ { "Kod 409 - Konflikt", 0 },
+ { "Kod 410 - Borta", 0 },
+ { "Kod 411 - Behöver längd", 0 },
+ { "Kod 412 - Misslyckades med villkor", 0 },
+ { "Kod 413 - Förfrågeenhet för stor", 0 },
+ { "Kod 414 - Förfråge-URI för lång", 0 },
+ { "Kod 415 - Ej stödd medietyp", 0 },
+ { "Kod 416 - Efterfrågat intervall ej mö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änsten otillgänglig", 0 },
+ { "Kod 504 - Gateway gick över tiden", 0 },
+ { "Kod 505 - denna HTTP-version stöds icke",0 }
+};
+
+char *msg_title = "Statistik över användning fö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 }
+};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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 }};
--- /dev/null
+/*
+ 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;
+ }
+}
--- /dev/null
+#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 */
--- /dev/null
+/*
+ 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;
+}
+
--- /dev/null
+#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 */
--- /dev/null
+/*
+ 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(×tamp); /* 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;
+}
--- /dev/null
+#ifndef _PARSER_H
+#define _PARSER_H
+
+extern int parse_record(char *);
+
+#endif /* _PARSER_H */
--- /dev/null
+/*
+ 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 */
+}
--- /dev/null
+#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 */
--- /dev/null
+#
+# 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!
--- /dev/null
+.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>
--- /dev/null
+/*
+ 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 */
--- /dev/null
+.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>
--- /dev/null
+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
--- /dev/null
+/*
+ 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);
+}
--- /dev/null
+#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 */
--- /dev/null
+lang/webalizer_lang.english
\ No newline at end of file