From 44fed4e167a4789a90641cd0cb37d3896cbf8cd0 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 15 May 2021 15:52:00 +0200 Subject: [PATCH] Initial commit --- README.webalizer.install | 71 + webalizer-2.23-08-src.tgz | Bin 0 -> 537037 bytes webalizer-2.23-08/CHANGES | 586 ++ webalizer-2.23-08/COPYING | 339 + webalizer-2.23-08/Copyright | 20 + webalizer-2.23-08/DNS.README | 295 + webalizer-2.23-08/INSTALL | 340 + webalizer-2.23-08/Makefile | 116 + webalizer-2.23-08/Makefile.in | 116 + webalizer-2.23-08/Makefile.std | 140 + webalizer-2.23-08/README | 1949 +++++ webalizer-2.23-08/README.FIRST | 21 + webalizer-2.23-08/config.log | 568 ++ webalizer-2.23-08/config.status | 806 ++ webalizer-2.23-08/configure | 7509 +++++++++++++++++ webalizer-2.23-08/configure.in | 322 + webalizer-2.23-08/country-codes.txt | 279 + webalizer-2.23-08/dns_resolv.c | 923 ++ webalizer-2.23-08/dns_resolv.h | 42 + webalizer-2.23-08/dns_resolv.o | Bin 0 -> 21320 bytes webalizer-2.23-08/graphs.c | 903 ++ webalizer-2.23-08/graphs.h | 10 + webalizer-2.23-08/graphs.o | Bin 0 -> 43280 bytes webalizer-2.23-08/hashtab.c | 1254 +++ webalizer-2.23-08/hashtab.h | 107 + webalizer-2.23-08/hashtab.o | Bin 0 -> 18728 bytes webalizer-2.23-08/install-sh | 250 + webalizer-2.23-08/lang.h | 182 + .../lang/webalizer_lang.albanian | 616 ++ webalizer-2.23-08/lang/webalizer_lang.arabic | 635 ++ webalizer-2.23-08/lang/webalizer_lang.catalan | 639 ++ webalizer-2.23-08/lang/webalizer_lang.chinese | 633 ++ .../lang/webalizer_lang.croatian | 629 ++ webalizer-2.23-08/lang/webalizer_lang.czech | 640 ++ webalizer-2.23-08/lang/webalizer_lang.danish | 632 ++ webalizer-2.23-08/lang/webalizer_lang.dutch | 651 ++ webalizer-2.23-08/lang/webalizer_lang.english | 633 ++ .../lang/webalizer_lang.estonian | 632 ++ webalizer-2.23-08/lang/webalizer_lang.finnish | 640 ++ webalizer-2.23-08/lang/webalizer_lang.french | 676 ++ .../lang/webalizer_lang.galician | 639 ++ webalizer-2.23-08/lang/webalizer_lang.german | 666 ++ webalizer-2.23-08/lang/webalizer_lang.greek | 631 ++ .../lang/webalizer_lang.hungarian | 638 ++ .../lang/webalizer_lang.icelandic | 640 ++ .../lang/webalizer_lang.indonesian | 636 ++ webalizer-2.23-08/lang/webalizer_lang.italian | 635 ++ .../lang/webalizer_lang.japanese | 629 ++ webalizer-2.23-08/lang/webalizer_lang.korean | 633 ++ webalizer-2.23-08/lang/webalizer_lang.latvian | 634 ++ .../lang/webalizer_lang.lithuanian | 628 ++ webalizer-2.23-08/lang/webalizer_lang.malay | 634 ++ .../lang/webalizer_lang.norwegian | 645 ++ webalizer-2.23-08/lang/webalizer_lang.polish | 640 ++ .../lang/webalizer_lang.portuguese | 639 ++ .../lang/webalizer_lang.portuguese_brazil | 640 ++ .../lang/webalizer_lang.romanian | 634 ++ .../lang/webalizer_lang.romanian-iso-8859-2 | 635 ++ webalizer-2.23-08/lang/webalizer_lang.russian | 646 ++ webalizer-2.23-08/lang/webalizer_lang.serbian | 629 ++ .../lang/webalizer_lang.simplified_chinese | 630 ++ webalizer-2.23-08/lang/webalizer_lang.slovak | 638 ++ webalizer-2.23-08/lang/webalizer_lang.slovene | 629 ++ webalizer-2.23-08/lang/webalizer_lang.spanish | 647 ++ webalizer-2.23-08/lang/webalizer_lang.swedish | 663 ++ webalizer-2.23-08/lang/webalizer_lang.thai | 634 ++ webalizer-2.23-08/lang/webalizer_lang.turkish | 634 ++ .../lang/webalizer_lang.ukrainian | 638 ++ webalizer-2.23-08/linklist.c | 305 + webalizer-2.23-08/linklist.h | 50 + webalizer-2.23-08/linklist.o | Bin 0 -> 5760 bytes webalizer-2.23-08/msfree.png | Bin 0 -> 1478 bytes webalizer-2.23-08/output.c | 2910 +++++++ webalizer-2.23-08/output.h | 12 + webalizer-2.23-08/output.o | Bin 0 -> 122784 bytes webalizer-2.23-08/parser.c | 740 ++ webalizer-2.23-08/parser.h | 6 + webalizer-2.23-08/parser.o | Bin 0 -> 17040 bytes webalizer-2.23-08/preserve.c | 859 ++ webalizer-2.23-08/preserve.h | 28 + webalizer-2.23-08/preserve.o | Bin 0 -> 29752 bytes webalizer-2.23-08/sample.conf | 779 ++ webalizer-2.23-08/wcmgr | Bin 0 -> 26984 bytes webalizer-2.23-08/wcmgr.1 | 110 + webalizer-2.23-08/wcmgr.c | 992 +++ webalizer-2.23-08/wcmgr.o | Bin 0 -> 37488 bytes webalizer-2.23-08/webalizer | Bin 0 -> 190136 bytes webalizer-2.23-08/webalizer.1 | 905 ++ webalizer-2.23-08/webalizer.LSM | 26 + webalizer-2.23-08/webalizer.c | 2479 ++++++ webalizer-2.23-08/webalizer.h | 302 + webalizer-2.23-08/webalizer.o | Bin 0 -> 128416 bytes webalizer-2.23-08/webalizer.png | Bin 0 -> 1253 bytes webalizer-2.23-08/webalizer_lang.h | 1 + webalizer-2.23-08/webazolver | 1 + 95 files changed, 53173 insertions(+) create mode 100644 README.webalizer.install create mode 100644 webalizer-2.23-08-src.tgz create mode 100644 webalizer-2.23-08/CHANGES create mode 100644 webalizer-2.23-08/COPYING create mode 100644 webalizer-2.23-08/Copyright create mode 100644 webalizer-2.23-08/DNS.README create mode 100644 webalizer-2.23-08/INSTALL create mode 100644 webalizer-2.23-08/Makefile create mode 100644 webalizer-2.23-08/Makefile.in create mode 100644 webalizer-2.23-08/Makefile.std create mode 100644 webalizer-2.23-08/README create mode 100644 webalizer-2.23-08/README.FIRST create mode 100644 webalizer-2.23-08/config.log create mode 100755 webalizer-2.23-08/config.status create mode 100755 webalizer-2.23-08/configure create mode 100644 webalizer-2.23-08/configure.in create mode 100644 webalizer-2.23-08/country-codes.txt create mode 100644 webalizer-2.23-08/dns_resolv.c create mode 100644 webalizer-2.23-08/dns_resolv.h create mode 100644 webalizer-2.23-08/dns_resolv.o create mode 100644 webalizer-2.23-08/graphs.c create mode 100644 webalizer-2.23-08/graphs.h create mode 100644 webalizer-2.23-08/graphs.o create mode 100644 webalizer-2.23-08/hashtab.c create mode 100644 webalizer-2.23-08/hashtab.h create mode 100644 webalizer-2.23-08/hashtab.o create mode 100755 webalizer-2.23-08/install-sh create mode 100644 webalizer-2.23-08/lang.h create mode 100644 webalizer-2.23-08/lang/webalizer_lang.albanian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.arabic create mode 100644 webalizer-2.23-08/lang/webalizer_lang.catalan create mode 100644 webalizer-2.23-08/lang/webalizer_lang.chinese create mode 100644 webalizer-2.23-08/lang/webalizer_lang.croatian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.czech create mode 100644 webalizer-2.23-08/lang/webalizer_lang.danish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.dutch create mode 100644 webalizer-2.23-08/lang/webalizer_lang.english create mode 100644 webalizer-2.23-08/lang/webalizer_lang.estonian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.finnish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.french create mode 100644 webalizer-2.23-08/lang/webalizer_lang.galician create mode 100644 webalizer-2.23-08/lang/webalizer_lang.german create mode 100644 webalizer-2.23-08/lang/webalizer_lang.greek create mode 100644 webalizer-2.23-08/lang/webalizer_lang.hungarian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.icelandic create mode 100644 webalizer-2.23-08/lang/webalizer_lang.indonesian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.italian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.japanese create mode 100644 webalizer-2.23-08/lang/webalizer_lang.korean create mode 100644 webalizer-2.23-08/lang/webalizer_lang.latvian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.lithuanian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.malay create mode 100644 webalizer-2.23-08/lang/webalizer_lang.norwegian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.polish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.portuguese create mode 100644 webalizer-2.23-08/lang/webalizer_lang.portuguese_brazil create mode 100644 webalizer-2.23-08/lang/webalizer_lang.romanian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.romanian-iso-8859-2 create mode 100644 webalizer-2.23-08/lang/webalizer_lang.russian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.serbian create mode 100644 webalizer-2.23-08/lang/webalizer_lang.simplified_chinese create mode 100644 webalizer-2.23-08/lang/webalizer_lang.slovak create mode 100644 webalizer-2.23-08/lang/webalizer_lang.slovene create mode 100644 webalizer-2.23-08/lang/webalizer_lang.spanish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.swedish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.thai create mode 100644 webalizer-2.23-08/lang/webalizer_lang.turkish create mode 100644 webalizer-2.23-08/lang/webalizer_lang.ukrainian create mode 100644 webalizer-2.23-08/linklist.c create mode 100644 webalizer-2.23-08/linklist.h create mode 100644 webalizer-2.23-08/linklist.o create mode 100644 webalizer-2.23-08/msfree.png create mode 100644 webalizer-2.23-08/output.c create mode 100644 webalizer-2.23-08/output.h create mode 100644 webalizer-2.23-08/output.o create mode 100644 webalizer-2.23-08/parser.c create mode 100644 webalizer-2.23-08/parser.h create mode 100644 webalizer-2.23-08/parser.o create mode 100644 webalizer-2.23-08/preserve.c create mode 100644 webalizer-2.23-08/preserve.h create mode 100644 webalizer-2.23-08/preserve.o create mode 100644 webalizer-2.23-08/sample.conf create mode 100755 webalizer-2.23-08/wcmgr create mode 100644 webalizer-2.23-08/wcmgr.1 create mode 100644 webalizer-2.23-08/wcmgr.c create mode 100644 webalizer-2.23-08/wcmgr.o create mode 100755 webalizer-2.23-08/webalizer create mode 100644 webalizer-2.23-08/webalizer.1 create mode 100644 webalizer-2.23-08/webalizer.LSM create mode 100644 webalizer-2.23-08/webalizer.c create mode 100644 webalizer-2.23-08/webalizer.h create mode 100644 webalizer-2.23-08/webalizer.o create mode 100644 webalizer-2.23-08/webalizer.png create mode 120000 webalizer-2.23-08/webalizer_lang.h create mode 120000 webalizer-2.23-08/webazolver diff --git a/README.webalizer.install b/README.webalizer.install new file mode 100644 index 0000000..26d20bf --- /dev/null +++ b/README.webalizer.install @@ -0,0 +1,71 @@ + +# - wheezy +apt-get install libgd2-xpm libgd2-xpm-dev libgd-tools +apt-get install libdb-dev libdb++-dev + +#apt-get install libdb4.6 libdb4.6++ libdb4.6++-dev libdb4.6-dev + +#apt-get install libgd-dev libgd-noxpm-dev libgd1-noxpm +#apt-get install libgd2-dev libgd2-noxpm libgd2-noxpm-dev libgd-tools +#apt-get install libdb4.2++ libdb4.2++-dev libdb4.2-dev +#apt-get install libdb2-util + +# - jessie +## - +apt-get install libgd2-xpm-dev libgd-tools +apt-get install libdb-dev libdb++-dev + +# - Preparations +# - +mkdir -p /usr/local/src/webalizer +cd /usr/local/src/webalizer + +# - Download +# - +wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-08-src.tgz + +# - Unpack +# - +gunzip < webalizer-2.23-08-src.tgz | tar -xf - + +cd webalizer-2.23-08 + +# - Configure +# - +#./configure --prefix=/usr/local/webalizer-2.23-08 --with-etcdir=/usr/local/webalizer-2.23-08/etc --with-language=german --enable-dns --with-db=/usr/include --with-dblib=/usr/lib + +LDFLAGS="-s" \ +./configure --prefix=/usr/local/webalizer-2.23-08 \ + --with-language=german \ + --enable-dns \ + --enable-geoip \ + --with-db=/usr/include \ + --with-dblib=/usr/lib + +# - Make +# - +make + +# - Install +# - +make install + + +# -Bemerkung: das Manpage-Verzeichns wird fälschlicherweise im root Verzeichnis +# - angelegt. +# - # mv /man /usrLocal/webalizer-2.23-08/ +mv /man /usr/local/webalizer-2.23-08/ + + +# - !! Don't forget to generate statistics !! +# - +# - Add to '/etc/logrotate.d/apache2' at end of section 'postrotate': +# - +# - postrotate +# - ... +# - if [[ -x "/root/bin/webalizer/generate_webstats.sh" ]]; then +# - ps ax > /tmp/ps_ax_logrotate_apache2.log +# - /root/bin/webalizer/generate_webstats.sh +# - fi +# - +# - endscript diff --git a/webalizer-2.23-08-src.tgz b/webalizer-2.23-08-src.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5562272ff47cfe05518331e441a654c9ab8ccc02 GIT binary patch literal 537037 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%0AoT*Vn)sOZU6kcMi@9uit& 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 abh+wZY(5?ru+s1j|#UQco=V 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

2D&Dm&bEm>G4kqXNab%+_<6}jn51qV;mFm?H!V` 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/CHANGES b/webalizer-2.23-08/CHANGES new file mode 100644 index 0000000..306ef03 --- /dev/null +++ b/webalizer-2.23-08/CHANGES @@ -0,0 +1,586 @@ +-------------------------------------------------------------------- +2.23-xx changes from 2.21-xx +-------------------------------------------------------------------- + +Fixes: + o Fix sporadic eol problem with some IIS/W3C logs + + o Fix compiler directive syntax error (broke some 64 bit systems) + +Changes/Additions: + o Modest speed improvements in hash table code + +-------------------------------------------------------------------- +2.21-xx changes from 2.20-xx +-------------------------------------------------------------------- + +Fixes: + o Added missing memory deallocation call in DNS lookup code. + + o Minor fixes to configure script + +Changes/Additions: + o Added "YearTotals" config option for main index page totals + + o Rename local stricmp() function to ouricmp() to prevent name + confilict on systems that happen to provide it already. + +-------------------------------------------------------------------- +2.20-xx changes from 2.01-xx +-------------------------------------------------------------------- + +Fixes: + o Fixed problem with timing totals. + + o Fixed referrer linking to avoid possible xss injection. + + o Fixed month change detection error that caused incorrect report + dates when logs had a 'gap' longer than a year. + + o Fixed buffer overrun possibility in parsing code and user agent + mangle logic. + + o Added symbolic link checks for file I/O to prevent possible + privilege escalation exploits. Disallows reading from or writing + to any file that is a symlink. Thanks to Julien Danjou. + + o Added code to preserve the history and incremental data files in + the event of a crash before writing to them completely. Thanks + to Robert Millan for the idea and initial code. + +Changes/Additions: + o Added native geolocation services, which fully supports both IPv4 + and IPv6 lookups. Adds the configuration keywords 'GeoDB' and + 'GeoDBDatabase' along with the '-j' and '-J' command line options. + + o Added 'wcmgr', "The Webalizer (DNS) Cache file Manager" to the + distribution to provide cache file maintenance. See the supplied + man page for a description and usage information. + + o Changed history code and main index page to allow for more than + 12 months of reports to be displayed. Added the config keywords + 'IndexMonths' (-K command line option), 'GraphMonths' (-k command + line option) and 'YearHeaders' to control how index is displayed. + + o Changed Berkeley DB code to use current 4.x APIs. + + o Added support for bzip2 compressed log files (.bz2) as a compile + time option (--enable-bz2). If enabled, bzipped files will be + decompressed automatically during processing. + + o Added support for W3C formatted logs. Based on code submitted + by Klaus Reimer. + + o Added GeoIP support as compile time option (--enable-geoip). Adds + 'GeoIP' and 'GeoIPDatabase' config keywords, '-w' and '-W' + command line options. (http://www.maxmind.com/) + + o Added IPv6 support. Based on initial code by Jose Carlos Meneiros + and modified to support Solaris and other problematic platforms. + + o Added 'CacheIPs' config option to allow saving unresolved addresses + in the DNS cache. + + o Added 'CacheTTL' config option which allows the DNS cache time to + live (TTL) value to be specified at run-time. + + o Added 'SearchCaseI' config option to specify if search strings + should be treated as case insensitive or not. The default value, + 'yes', causes search strings to be treated as case insensitive. + + o Added 'HTAccess' config option. Allows writing a default .htaccess + file to the output directory. + + o Added ability to display flags in the top country table. Adds the + config keywords 'CountryFlags' and 'FlagDir', and -z command line + option. + + o Added 'StripCGI' config option to configure how CGI variables on + the end of URLs are treated (can now be stripped or left in place). + + o Added 'DefaultIndex' config option to enable/disable the use of + "index." as a default index name to be stripped from the end of URLs. + + o Added 'TrimSquidURL' config option to allow squid log URLs to be + reduced in granularity by a user definable amount. Thanks to code + submitted by Stuart Gall. + + o Added 'OmitPage' config option (and the '-O' command line switch) + to prevent specified URLs from being counted as pages even if they + otherwise would be. Thanks to code submitted by Adam Morton. + + o Added 'IgnoreState' config option (and the -b command line switch) + to allow ignoring any existing incremental data file (similar to + the IgnoreHist/-i option). + + o Changed logic to always generate summary report (index.html), + even if no records were processed. + + o Added color support to allow changing graph colors. Based on the + Webalizer-usecolor code submitted by Benoit Rouits. Adds 11 new + config options, see the README file for complete descriptions. + + o Added language 'lang=' specification in generated HTML files. + + o Added 'LinkReferrer' config option to allow/disallow links in the + top referrers table. + + o Added 'PagePrefix' config option to allow URL prefix matches to + be counted as pages, regardless of file extension or type. Thanks + to code submitted by Remco Van de Meent. + + o Enabled large file support (LFS) to support logs greater than 2Gb + in size on systems that support LFS. Also increased the size of + most internal counters to handle larger sites. + + o Minor changes to generated HTML output + + o Updated language files country codes for current IANA TLDs + + o Changed the meaning of the -v command line switch. It now + causes verbose information to be displayed at run-time + (Informational and Debug messages). + + o Changed Group* config options to allow a quoted string for + the match string. This allows spaces to be embedded in the + string. + + o Changed log record parsing logic to allow spaces in URLs. + + o Made configuration keywords, boolean configuration values + (yes/no), and log file types case insensitive. Also fixed + defaults for invalid values to reflect documented defaults. + + o Changed configure script to use --sysconfdir to specify the + location of the default webalizer.conf configuration file. + Also added support for DESTDIR during install to aid binary + package builds. + +-------------------------------------------------------------------- +2.01-xx changes from 1.30-04 +-------------------------------------------------------------------- + +Fixes: + o Fix posible obscure buffer overflow bug in DNS resolver code + + o Added additional extended character fixes + + o Let code accept partial content response codes along with 200's + + o Added code to catch blank hostnames (yes, they have been found!) + Will convert them into 'Unknown' + + o Security fix for cross-site scripting vulnerability found by + Flavio Veloso (www.magnux.com). + + o Fixed a TOTAL_RC off by one error, which would prevent the last + response code from being saved when using incremental mode. + + o Fixed possible segfault condition in MangleAgent code on + some malformed user agent names. + + o Fixed DNS to prevent hangs on blank and malformed hostnames. + + o Fixed problem calculating visits. Changed timestamps to use + seconds since epoch (1/1/1970) which results in more accurate + analysis. Also changed normal out of sequence code to handle + up to 1 hour of 'slop' in the timestamps. This changed the + semantics of the VisitTimeout and -m configuration options, as + the values are now specified in number of seconds. + + o Fixed hostname lowercase problem (wasn't) when using DNS lookups. + + o Fixed problem with incremental datafile which could cause a read + error under certain circumstances (removes control characters). + Also changed code to now abort on a read error. + + o Fixed problem with hash table node creation where objects that + were exactly the maximum length would wind up leaving a garbage + byte at the end of the memory space allocated. This was causing + some very infrequent and widely different problems. + + o Fixed problem where country graph could be produced incorrectly + if using a non-english language and the country name overlapped + the pie chart. + + o Found and fixed a problem with a possible 32-bit wrap around + problem using incremental mode on large sites. The problem + would cause the KBytes data on large groups to become inaccuate. + +Changes/Additions: + o Modified configure to allow specification of the default config + directory. If not given, will use /etc (/etc/webalizer.conf). + + o Added DailyGraph and DailyStats configuration options to enable + or disable the Daily usage graph and stats table from output. + + o Improved visit calculation logic to reduce 'false' counts generated + by external image referrals. + + o Added reverse DNS lookup capability. This adds the command + line switchs -D and -N, and configuration keywords "DNSCache" + and "DNSChildren". See the DNS.README for additional info. + Based in part on code submitted by Henning P. Schmiedehausen + (hps@tanstaafl.de). + + o Added ability to dump Sites, URLs, Referrers, User Agents, + Usernames and Search Strings to tab delimited files, suitable + for import into most database and spreadsheet programs. The + location of this file may be specified using the "DumpPath" + configuration keyword, allowing the data to be kept someplace + outside the web servers document tree. The configuration + keywords "DumpSites", "DumpURLs", "DumpReferrers", "DumpAgents", + "DumpUsers" and "DumpSearchStr" have been added to control the + file dumps. Column headers can be included in the file with + the "DumpHeader" keyword. Dump filename extensions may be + specified using the "DumpExtension" keyword (default is .tab). + + o Added username analysis, based on usernames found in the log, + and only available if username information is present in the + log (ie: http authentication or wu-ftpd xferlog). The keywords + 'GroupUser', 'HideUser', 'IgnoreUser', 'IncludeUser', 'AllUsers', + and 'TopUsers' have been added to the configuration file code. + This change also modified the format of the incremental data file. + + o Added the ability to display ALL sites, URLs, Referrers, + User Agents and Search Strings on a separate 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 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 for this these. + + o Added HistoryName and IncrementalName keywords, which allow the + specification of the history and incremental data filenames. + + o Added UseHTTPS keyword, which allows using 'https://' instead + of 'http://' for links to URLS in the 'Top URLs' table. Also + added check for URLs that already have the protocol specified + (such as on virtual web and proxy servers), and to use unmodified + if found (will only force to lowercase for matching). + + o Added code to ignore out-of-sequence log records. + + o Added code to force hostnames to lowercase (was causing country skew). + + o Disabled display of blank (zero hit) days at start of daily stat table. + + o Added records per second calculation to timing totals. + + o ALT= tags now use translated strings instead of forcing english. + + o Updated documentation for new functions/features. + +-------------------------------------------------------------------- +1.20-xx changes from 1.12-10 +-------------------------------------------------------------------- + +Fixes: + o Modified record parse routine to not touch stuff between quotes + ("). Was causing problems parsing some malformed request fields. + + o Fixed memory leak in MangleAgent code, and relocated to elimitate + un-necessary processing (causing segfault on some machines). + +Changes/Additions: + o Changed transfer totals on host/url structures to support large + groupings (such as *.gif) on heavly hit servers. Hopefully, this + should cure the 32bit overflow problem large sites were having. + + o Changed daily transfer totals to support transfers greater than + roughly 4.2 gigabytes a day. + + o Added some missing HTML tags and altered the way totals are + calculated on the 'Top' tables (to correct for grouped records). + + o Added incremental run capability (-p command line option or + "Incremental" configuration file keyword). + +-------------------------------------------------------------------- +1.1x-xx changes from 1.00-05 +-------------------------------------------------------------------- + +Fixes: + o Re-wrote the Group* logic, fixing a bug that allowed hiding of + objects when they shouldn't be. + + o Fixed broken IgnoreReferrer code. + + o Modified config parse code to handle extended characters. + + o Misc. minor bug fixes/changes. Added a missing fclose. + + o Cleaned up generated HTML. + + o Fixed duplicate warnings on large referrer fields. + + o Fixed country table bug adding grouped records to totals. + +Changes/Additions: + o Added GroupSite, GroupReferrer and GroupAgent keywords to round + out the Group* configuration options. + + o Added GroupShading and GroupHighlight keywords to allow selective + highlight and shading on grouped rows in table. + + o Removed the '-L' command line option. Groupings can now only + be specified from a configuration file. Language files changed + to reflect change. + + o Added '-V' command line option (identical to '-v') for version. + + o Added additional language support. Language files will be marked + /* New for 1.1 */ where changes have been made. + + o Various rewrites to streamline the code, accomidate the new + group options and make things easier down the road when I implement + incremental (partial log) processing. + + o Usual README and CHANGES documentation updates. + +-------------------------------------------------------------------- +1.00-xx changes from 0.99-06 +-------------------------------------------------------------------- + +Fixes: + o Modify record parser so that spaces in usernames (auth field) + don't cause record to be skipped (w/'Bad Record' message). + + o Included various error conditions that were being ignored in + the timing statistics ('bad records' value) totals. + +Changes/Additions: + o Added GMTTime (-g) option to force display of timestamps in + GMT (UTC) time instead of local timezone. + + o Added GroupURL (-L) option for grouping of URLs as if they + were a single object. See README for details. + + o Language support in the form of a language specific header + file containing all strings used by The Webalizer. English + file is used by default unless changed. Support for other + languages will be distributed as I receive them. + +-------------------------------------------------------------------- +0.99-xx changes from 0.98-16 +-------------------------------------------------------------------- + +0.99 is mostly a bug-fix release, with a few added extra goodies. + +Fixes: + o Fixed monthly total transfer size (silent) overflow problem. + + o Fixed the numerous fprintf format errors. Only seemed to wreak havok + on non-intel machines though. + + o Fixed core dump condition on certain machines when using stdin for + input. + + o Fixed floating point code that caused divide by zero errors on some + platforms (most noticably on SCO OpenServer). + + o Netscape server kludges: Added code to deal with Netscape log header + record gracefully. Also added workaround for timestamp error where + Netscape sometimes makes a day have 0-24 hours instead of 0-23. The + Webalizer will now treat anything greater than 23 as 0. + + o Resized some fixed field sizes to gain memory usage improvements. + +Changes/Additions: + o Ignore* config keywords added. This allows you to completely ignore + certain log records based on site name, URL, user agent or referrer. + * Use will cause inaccurate statistics results. See documentation. + + o ReallyQuiet config keyword (-Q command line option) added. Causes + The Webalizer to supress _all_ messages. Useful for cron jobs. + + o Removed the "Sites" total at the bottom of the summary by month. + The total for sites is a useless number and produces a misleadingly + high value which detracts from the accuracy of the other totals. + + o Updated README and CHANGES diff --git a/webalizer-2.23-08/COPYING b/webalizer-2.23-08/COPYING new file mode 100644 index 0000000..916d1f0 --- /dev/null +++ b/webalizer-2.23-08/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + 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.) + +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. + + 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. + + 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 + + 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. + + + Copyright (C) 19yy + + 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. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/webalizer-2.23-08/Copyright b/webalizer-2.23-08/Copyright new file mode 100644 index 0000000..5f5b973 --- /dev/null +++ b/webalizer-2.23-08/Copyright @@ -0,0 +1,20 @@ + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 Bradford L. Barrett + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version, and provided that the above + copyright and permission notice is included with all distributed + copies of this or derived software. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + diff --git a/webalizer-2.23-08/DNS.README b/webalizer-2.23-08/DNS.README new file mode 100644 index 0000000..1bd7f16 --- /dev/null +++ b/webalizer-2.23-08/DNS.README @@ -0,0 +1,295 @@ +The Webalizer - A log file analysis program -- DNS information + +The webalizer has the ability to perform reverse DNS lookups, and +fully supports both IPv4 and IPv6 addressing schemes. This document +attempts to explain how it works, and some things that you should be +aware of when using the DNS lookup features. + +Note: The Reverse DNS feature may be enabled or disabled at compile + time. DNS lookup code is enabled by default. You can run The + Webalizer using the '-vV' command line options to determine what + options are enabled in the version you are using. + + +How it works +------------ + +DNS lookups are made against a DNS cache file containing IP addresses +and resolved names. If the IP address is not found in the cache file, +it will be left as an IP address. In order for this to happen, a +cache file MUST be specified when the Webalizer is run, either using +the '-D' command line switch, or a "DNSCache" configuration file +keyword. If no cache file is specified, no attempts to perform DNS +lookups will be done. The cache file can be made three different ways. + +1) You can have the Webalizer pre-process the specified log file at + run-time, creating the cache file before processing the log file + normally. This is done by setting the number of DNS Children + processes to run, either by using the '-N' command line switch or + the "DNSChildren" configuration keyword. This will cause the + Webalizer to spawn the specified number of processes which will + be used to do reverse DNS lookups.. generally, a larger number + of processes will result in faster resolution of the log, however + if set too high may cause overall system degradation. A setting + of between 5 and 20 should be acceptable, and there is a maximum + limit of 100. If used, a cache filename MUST be specified also, + using either the '-D' command line switch, or the "DNSCache" + configuration keyword. Using this method, normal processing will + continue only after all IP addresses have been processed, and the + cache file is created/updated. + +2) You can pre-process the log file as a standalone process, creating + the cache file that will be used later by the Webalizer. This is + done by running the Webalizer with a name of 'webazolver' (ie: the + name 'webazolver' is a symbolic link to 'webalizer') and specifying + the cache filename (either with '-D' or DNSCache). If the number + of child processes is not given, the default of 5 will be used. In + this mode, the log will be read and processed, creating a DNS cache + file or updating an existing one, and the program will then exit + without any further processing. + +3) You can use The Webalizer (DNS) Cache file Manager program 'wcmgr' + to create and manipulate a cache file. A blank cache file can be + created which would be later populated, or data for the cache file + can be imported using tab delimited text files. See the wcmgr(1) + man page for usage information. + + +Run-time DNS cache file creation/update +--------------------------------------- + +The creation/update of a DNS cache file at run-time occurs as follows: + +1) The log file is read, creating a list of all IP addresses that are + not already cached (or cached but expired) and need to be resolved. + Addresses are expired based on the TTL value specified using the + 'CacheTTL' configuration option or after 7 days (default) if no TTL + is specified. + +2) The specified number of children processes are forked, and are used + to perform DNS lookups. + +3) Each IP address is given, one at a time, to the next available child + process until all IP addresses have been processed. Each child will + update the cache file when a result is returned. This may be either + a resolved name or a failed lookup, in which case the address will be + left unresolved. Unresolved addresses are not normally cached, but + can be, if enabled using the 'CacheIPs' configuration file keyword. + +4) Once all IP addresses have been processed and the cache file updated, + the Webalizer will process the log normally. Each record it finds + that has an unresolved IP address will be looked up in the cache file + to see if a hostname is available (ie: was previously found). + +Because there may be a significant amount of time between the initial +unresolved IP list and normal processing, the Webalizer should not be +run against live log files (ie: a log file that is actively being written +to by a server), otherwise there may be additional records present that +were not resolved. + + +Stand-Alone DNS cache file creation/update +------------------------------------------ + +The creation/update of the DNS cache file, when run in stand-alone mode, +occurs as follows: + +1) The log file is read, creating a list of all IP addresses that are + not already cached (or cached but expired) and need to be resolved. + +2) The specified number of children processes are forked, and are used + to perform DNS lookups. If the number of processes was not specified, + the default of 5 will be used. + +3) Each IP address is given, one at a time, to the next available child + process until all IP addresses have been processed. Each child will + update the cache file when a result is returned. + +4) Once all IP addresses have been processed and the cache file updated, + the program will terminate without any further processing. + + +Larger sites may prefer to use a stand-alone process to create the DNS +cache file, and then run the Webalizer against the cache file. This +allows a single cache file to be used for many virtual hosts, and reduces +the processing needed if many sites are being processed. The Webalizer +can be used in stand alone mode by running it as 'webazolver'. When +run in this fashion, it will only create the cache file and then exit +without any further processing. A cache filename MUST be specified, +however unlike when running the Webalizer normally, the number of child +processes does not have to be given (will default to 5). All normal +configuration and command line options are recognized, however, many +of them will simply be ignored.. this allows the use of a standard +configuration file for both normal use and stand alone use. + + +Examples: +--------- + +webalizer -c test.conf -N 10 -D dns_cache.db /var/log/my_www_log + + This will use the configuration file 'test.conf' to obtain normal + configuration options such as hostname and output directory.. it + will then either create or update the file 'dns_cache.db' in the + default output directory (using 10 child processes) based on the + IP addresses it finds in the log /var/lib/my_www_log, and then + process that log file normally. + + +webalizer -o out -D dns_cache.db /var/log/my_www_log + + This will process the log file /var/log/my_www_log, resolving IP + addresses from the cache file 'dns_cache.db' found in the default + output directory "out". The cache file must be present as it will + not be created with this command. + + +for i in /var/log/*/access_log; do + webazolver -N 20 -D /var/lib/dns_cache.db $i +done + + The above is an example of how to run through multiple log files + creating a single DNS cache file.. this might be typically used on + a larger site that has many virtual hosts, all keeping their log + files in a separate directory. It will process each access_log it + finds in /var/log/* and create a cache file (var/lib/dns_cache.db). + This cache file can then be used to process the logs normally with + with the Webalizer in a read-only fashion (see next example). + + +for i in /etc/webalizer/*.conf; do webalizer -c $i -D /etc/cache.db; done + + This will process each configuration file found in /etc/webalizer, + using the DNS cache file /etc/cache.db. This will also typically be + used on a larger site with multiple hosts.. Each configuration file + will specify a site specific log file, hostname, output directory, etc. + The cache file used will typically be created using a command similar + to the one previous to this example. + + +Cache File Maintenance +---------------------- + +The Webalizer DNS cache files generally require very little or no +special attention. There are times though when some maintenance +is required, such as occasional purging of very old cache entries. +The Webalizer never removes a record once it's inserted into the +cache. If a record expires based on its timestamp, the next time +that address is seen in a log, its name is looked up again and the +timestamp is updated. However, there will always be addresses that +are never seen again, which will cause the cache files to continue +to grow in size over time. On extremely busy sites or sites that +attract many one time visitors, the cache file may grow extremely +large, yet only contain a small amount of valid entries. Using +The Webalizer (DNS) Cache file Manager ('wcmgr'), cache files can +be purged, removing expired entries and shrinking the file size. +A TTL (time to live) value can be specified, so the length of time +an entry remains in the cache can be varied depending on individual +site requirements. In addition to purging cache files, 'wcmgr' can +also be used to list cache file contents, import/export cache data, +lookup/add/delete individual entries and gather overall statistics +regarding the cache file (number of records, number expired, etc..). + +To purge a cache file using 'wcmgr', an example command would be: + +wcmgr -p31 /path/to/dns.cache + +This would purge the 'dns.cache' cache file of any records that are +over 31 days old, and would reclaim the space that those records +were using in the file. If you would like to see the records that +get purged, adding the command line option '-v' (verbose) will cause +the program to print each entry and its age as they are removed. +You can also use the 'wcmgr' to display statistics on cache files +to aid in determining when a cache file should be purged. See the +'wcmgr' man page (wcmgr.1) for additional information on the various +options available. + + +Stupid Cache Tricks +------------------- + +The DNS cache files used by The Webalizer allow for efficient IP address +to name translations. Resolved names are normally generated by using an +existing DNS name server to query the address, either locally or over +the Internet. However, using The Webalizer (DNS) Cache file Manager, +almost any IP address to Name translation can be included in the cache. +One such example would be for mapping local network addresses to real +names, even though those addresses may not have real DNS entries on the +network (or may be 'local' addresses prohibited from use on the Internet). +A simple tab delimited text file can be created and imported into a cache +for use by The Webalizer, which will then be used to convert the local +IP addresses to real names. Additional configuration options for The +Webalizer can then be used as would be normally. For example, consider +a small business with 10 computers and a DSL router to the Internet. +Each machine on the local network would use a private IP address that +would not be resolved using an external (public) DNS server, so would +always be reported by The Webalizer as 'unknown/unresolved'. A simple +cache file could be created to map those unresolved addresses into more +meaningful names, which could then be further processed by the Webalizer. +An example might look something like: + +# Local machines +192.168.123.254 0 0 gw.widgetsareus.lan +192.168.123.253 0 0 mail.widgetsareus.lan +192.168.123.250 0 0 sales.widgetsareus.lan +192.168.123.240 0 0 service.widgetsareus.lan +192.168.123.237 0 0 mgr.widgetsareus.lan +192.168.123.235 0 0 support1.widgetsareus.lan +192.168.123.234 0 0 support2.widgetsareus.lan +192.168.123.232 0 0 pres.widgetsareus.lan +192.168.123.230 0 0 vp.widgetsareus.lan +192.168.123.225 0 0 reception.widgetsareus.lan +192.168.123.224 0 0 finance.widgetsareus.lan +127.0.0.1 0 1 127.0.0.1 + + +There are a couple of things here that should be noted. The first +is that the timestamps (first zero on each line above) are set to +zero. This tells The Webalizer that these cached entries are to +be considered 'permanent', and should never be expired (infinite +TTL or time to live). The second thing to note is that the resolved +names are using a non-standard TLD (top level domain) of '.lan'. +The Webalizer will map this special TLD to mean "Local Network" in +its reports, which allows local traffic to be grouped separately +from normal Internet traffic. Lastly, you may notice that the +last line of the file contains an entry with the same IP address +where a name should be. This entry will prevent the Webalizer +from ever trying to lookup 127.0.0.1, which is the 'localhost' +address, when it is found in a log. The second number after the IP +address (1) tells the Webalizer that it is an unresolved entry, not +a resolved hostname (ie: has no name). Entries such as this one can +be used to reduce DNS lookups on addresses that are known not to +resolve. + + +Considerations +-------------- + +Processing of live log files is discouraged, as the chances of log records +being written between the time of DNS resolution and normal processing will +cause problems. + +If you are using STDIN for the input stream (log file) and have run-time +DNS cache file creation/update enabled.. the program will exit after the +cache file has been created/updated and no output will be produced. If +you must use STDIN for the input log, you will need to process the stream +twice, once to create/update the cache file, and again to produce the +reports. The reason for this is that stream inputs from STDIN cannot +be 'rewound' to the beginning like files can, so must be given twice. + +Cached DNS addresses have a default TTL (time to live) of 7 days. This +may now be changed using the CacheTTL config file keyword to any value +from 1 to 100 (days). You may also now specify if unresolved addresses +should be stored in the DNS cache. Normally, unresolved IP addresses +are NOT saved in the cache and are looked up each time the program is +run. + +There is an absolute maximum of 100 child processes that may be created, +however the actual number of children should be significantly less than +the maximum.. typical usage should be between 5 and 20. + +Special thanks to Henning P. Schmiedehausen for the +original dns-resolver code he submitted, which was the basis for this +implementation. Also thanks to Jose Carlos Medeiros for the inital IPv6 +support code. + diff --git a/webalizer-2.23-08/INSTALL b/webalizer-2.23-08/INSTALL new file mode 100644 index 0000000..81c35ff --- /dev/null +++ b/webalizer-2.23-08/INSTALL @@ -0,0 +1,340 @@ +Installation instructions for The Webalizer + +The Webalizer is distributed in either source or binary distributions, +and installation is different for each type. Regardless of the type +of installation, you need to obtain and un-tar/un-zip the distribution. +For binary distributions, you should create a directory somewhere and +chdir to it before unpacking the file. Source distributions will +automagically create a directory for you (webalizer-x.xx-xx). If you +are upgrading from a previous version, check the CHANGES file, and the +README.FIRST file for important upgrade information. + + +For Binary distributions +------------------------ + +You should have all the files you need in the directory you created +when you un-tarred/un-zipped the distribution file. The file +'webalizer' in this directory is the binary executable. Copy this +someplace useful, like /usr/local/bin or /usr/bin. A man page for +The Webalizer is also supplied... If desired, copy the file +'webalizer.1' to your local man directory (ie: /usr/local/man/man1). +(You may also need to run 'makeinfo' or similar) + +Note: There may also be platform specific installation instructions + and/or usage notes supplied with the binary distribution. You + should read them, as that will be your starting point if problems + are encountered. Most of the binary distributions are submitted + by users, and I cannot support them the same way I can the + Linux binary distribution and the source code itself. + + +For Source distributions +------------------------ + +The Webalizer requires, at a minimum, the GD graphics library +(http://www.libgd.org/), the PNG (portable network graphics) +graphics library ( http://www.libpng.org/pub/png/ ), the Zlib +compression library ( http://www.zlib.net/ ) and associated +header files for these libraries. Most modern systems will have +these libraries, but may or may not have the required header files +for them unless you installed the 'dev' (development) versions +(which include the required header files along with the libraries). +Consult your systems documentation for specifics. + +For native DNS and Geolocation (GeoDB) support, the Berkeley DB +library (by sleepycat, now owned by Oracle) v4.1 or higher and +associated header file is required. +http://www.oracle.com/technology/products/berkeley-db/ + +For BZip2 support, the bzip2 compression library and header file is +required. http://www.bzip.org/ + +For GeoIP geolocation support, the GeoIP library (by MaxMind, Inc.) +and header file is required, along with a Country Edition database. +http://www.maxmind.com/app/ip-location + + +New style build: + +The Webalizer source distribution now comes packaged with a GNU +autoconf 'configure' script, which should allow you to simply type: + +./configure +make +make install + +Normal configure options apply, type ./configure --help to get a +complete list. A few options in particular may be useful: + +--sysconfdir=/etc + +The sysconfdir switch specifies where the default configuration +file (webalizer.conf) should be looked for. If not specified, the +default of ${prefix}/etc is used. + +--with-language= + +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= + +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- and --with- +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- command line switches when you run configure, + or edit the Makefile and specify the location with an '-I' + compiler flag. + +Q: I get "libgd not found' errors? +A: You don't have the GD graphics located in a standard library + path, or you don't have the GD graphics library at all. If + the later, go to http://www.boutell.com/gd/ and grab a copy. + If you do have it, add a -L switch in the Makefile to point + to the proper location. + +Q: I get unresolved symbol errors when compiling, why? +A: This most often occurs when the GD library was built with + additional support for such things as TrueType fonts or + X11 graphics. The configure script for The Webalizer only + checks that the gd library is available, and does not check + any other dependencies it may have. Typically, to fix this + problem, you need to edit the Makefile and add the dependent + libraries to a compiler switch (or pass them on the command + line when running the configure script). For example, if + you are getting errors about not finding truetype routines, + you may need to add '-lttf' (for 'libttf', the truetype library) + to the "LIBS" variable. + + Hint: I usually find it easier to just grab the GD library + source, and compile it myself locally as a static + library, in a directory just above where I compile The + Webalizer. Then, at configure time, just add the + '-with-gd=../gd' and '--with-gdlib=../gd' switches, + and the GD graphic stuff will be statically linked into + The Webalizer, eliminating any other library dependencies + that the normal, shared library on my system may have. + diff --git a/webalizer-2.23-08/Makefile b/webalizer-2.23-08/Makefile new file mode 100644 index 0000000..5e559d5 --- /dev/null +++ b/webalizer-2.23-08/Makefile @@ -0,0 +1,116 @@ +# +# Makefile for webalizer - a web server log analysis program +# +# Copyright (C) 1997-2013 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 = /usr/local/webalizer-2.23-08 +exec_prefix = ${prefix} +datadir = ${prefix}/share + +BINDIR = ${exec_prefix}/bin +MANDIR = ${datarootdir}/man/man1 +ETCDIR = ${prefix}/etc +GEODB = /usr/share/GeoDB +CC = gcc +CFLAGS = -Wall -O2 -I/usr/include +LIBS = -lGeoIP -ldb -lgd -lpng -lz -lm +WCMGR_LIBS = -ldb +DEFS = -DETCDIR=\"${ETCDIR}\" -DGEODB_LOC=\"${GEODB}\" -DPACKAGE_NAME=\"webalizer\" -DPACKAGE_TARNAME=\"webalizer\" -DPACKAGE_VERSION=\"V2.23\" -DPACKAGE_STRING=\"webalizer\ V2.23\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DHAVE_SYS_SOCKET_H=1 -DUSE_GEOIP -DUSE_DNS +LDFLAGS = -L/usr/lib -s +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 +DEFLANG = english + +# 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 webalizer.h + $(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.english webalizer_lang.h + +install: all + mkdir -p ${DESTDIR}${BINDIR} + mkdir -p ${DESTDIR}${MANDIR} + mkdir -p ${DESTDIR}${ETCDIR} + $(INSTALL_PROGRAM) webalizer ${DESTDIR}${BINDIR}/webalizer + $(INSTALL_PROGRAM) wcmgr ${DESTDIR}${BINDIR}/wcmgr + rm -f ${DESTDIR}${BINDIR}/webazolver + ln -s webalizer ${DESTDIR}${BINDIR}/webazolver + $(INSTALL_DATA) webalizer.1 ${DESTDIR}${MANDIR}/webalizer.1 + $(INSTALL_DATA) wcmgr.1 ${DESTDIR}${MANDIR}/wcmgr.1 + rm -f ${DESTDIR}${MANDIR}/webazolver.1 + ln -s webalizer.1 ${DESTDIR}${MANDIR}/webazolver.1 + $(INSTALL_DATA) sample.conf ${DESTDIR}${ETCDIR}/webalizer.conf.sample + +uninstall: + rm -f ${DESTDIR}${BINDIR}/webalizer + rm -f ${DESTDIR}${BINDIR}/webazolver + rm -f ${DESTDIR}${BINDIR}/wcmgr + rm -f ${DESTDIR}${MANDIR}/webalizer.1 + rm -f ${DESTDIR}${MANDIR}/webazolver.1 + rm -f ${DESTDIR}${MANDIR}/wcmgr.1 + rm -f ${DESTDIR}${ETCDIR}/webalizer.conf.sample + rm -f webalizer_lang.h + ln -s lang/webalizer_lang.${DEFLANG} webalizer_lang.h diff --git a/webalizer-2.23-08/Makefile.in b/webalizer-2.23-08/Makefile.in new file mode 100644 index 0000000..6fbc7fa --- /dev/null +++ b/webalizer-2.23-08/Makefile.in @@ -0,0 +1,116 @@ +# +# Makefile for webalizer - a web server log analysis program +# +# Copyright (C) 1997-2013 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 = @mandir@/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 webalizer.h + $(CC) ${CFLAGS} ${DEFS} -c wcmgr.c + +clean: + rm -f webalizer webazolver wcmgr *.o usage*.png daily*.png hourly*.png + rm -f ctry*.png *.html *.hist *.current core *.gif + +distclean: clean + rm -f webalizer.conf *.tar *.tgz *.Z *.tar.gz + rm -f Makefile webalizer_lang.h config.cache config.log config.status + @LN_S@ lang/webalizer_lang.@DEFAULT_LANG@ webalizer_lang.h + +install: all + mkdir -p ${DESTDIR}${BINDIR} + mkdir -p ${DESTDIR}${MANDIR} + mkdir -p ${DESTDIR}${ETCDIR} + $(INSTALL_PROGRAM) webalizer ${DESTDIR}${BINDIR}/webalizer + $(INSTALL_PROGRAM) wcmgr ${DESTDIR}${BINDIR}/wcmgr + rm -f ${DESTDIR}${BINDIR}/webazolver + @LN_S@ webalizer ${DESTDIR}${BINDIR}/webazolver + $(INSTALL_DATA) webalizer.1 ${DESTDIR}${MANDIR}/webalizer.1 + $(INSTALL_DATA) wcmgr.1 ${DESTDIR}${MANDIR}/wcmgr.1 + rm -f ${DESTDIR}${MANDIR}/webazolver.1 + @LN_S@ webalizer.1 ${DESTDIR}${MANDIR}/webazolver.1 + $(INSTALL_DATA) sample.conf ${DESTDIR}${ETCDIR}/webalizer.conf.sample + +uninstall: + rm -f ${DESTDIR}${BINDIR}/webalizer + rm -f ${DESTDIR}${BINDIR}/webazolver + rm -f ${DESTDIR}${BINDIR}/wcmgr + rm -f ${DESTDIR}${MANDIR}/webalizer.1 + rm -f ${DESTDIR}${MANDIR}/webazolver.1 + rm -f ${DESTDIR}${MANDIR}/wcmgr.1 + rm -f ${DESTDIR}${ETCDIR}/webalizer.conf.sample + rm -f webalizer_lang.h + @LN_S@ lang/webalizer_lang.${DEFLANG} webalizer_lang.h diff --git a/webalizer-2.23-08/Makefile.std b/webalizer-2.23-08/Makefile.std new file mode 100644 index 0000000..48e8100 --- /dev/null +++ b/webalizer-2.23-08/Makefile.std @@ -0,0 +1,140 @@ +# +# Makefile for webalizer - a web server logfile analysis thingie +# +# (c)1997-2013 by Bradford L. Barrett +# Distributed under the GNU GPL. See "README" and "Copyright" +# files supplied with this distribution for more information. +# +# This works on my Linux and Solaris systems, and should work +# out of the box on other GCC based systems. Tweek the values +# below for your environment if needed before running make. +# + +# Use these for SCO (and maybe others) +#BINDIR = /usr/bin +#MANDIR = /usr/man/man1 +#ETCDIR = /etc +#CC = cc +#CFLAGS = -b elf +#LDFLAGS= -L../usr/local/lib +#LIBS = -lgd -lm -lpng -lz +#DEFS = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H + +# These will build The Webalizer with DNS support +# on my Linux system. GD is statically built and +# is located in the ../gd directory. This system +# also has a stock install of the berkeley db lib +# (libdb in /usr/lib and db.h in /usr/include). + +BINDIR = /usr/local/bin +MANDIR = /usr/local/man/man1 +ETCDIR = /etc +CC = gcc +CFLAGS = -Wall -O2 -I../gd +LDFLAGS= -L/usr/local/lib -L../gd +LIBS = -lgd -lpng -lz -lm -ldb +DEFS = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_DNS + +# Some might need this instead (Solaris?!?) +#LIBS = -lgd -lpng -lz -lm -ldb -lnsl -lsocket -lrt + +# if you want to use a different default directory for the +# GeoDB database, add this to DEFS: -DGEODB_LOC=\"/usr/share/GeoDB\" + +# if you have header files in a non-standard place, you +# should specify them on the CFLAGS line, like: + +#CFLAGS = -Wall -O2 -I../gd -I/src/bzip2 + +# similar with library locations. add non-standard paths +# using the LDFLAGS variable, like this: + +#LDFLAGS = -L/usr/local/lib -L/src/bzip2 + +# If your GD lib was compiled with X/truetype, you may need +# to use this or some variation of it: + +#LIBS = -lgd -lpng -lz -lm -ldb -lX11 -lXpm -lttf + +# If you want bzip2 support, you need to define USE_BZIP +# and add the bz2 library like below: + +#LIBS = -lgd -lpng -lz -lm -lbz2 +#DEFS = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_BZIP + +# GeoIP support? You need USE_GEOIP and -lGeoIP + +#LIBS = -lgd -lpng -lz -lm -lGeoIP +#DEFS = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_GEOIP + +# want it all?!? Give this a whirl: + +#LIBS = -lgd -lpng -lz -lm -lGeoIP -lbz2 -ldb +#DEFS = -DETCDIR=\"${ETCDIR}\" -DHAVE_MATH_H -DUSE_GEOIP -DUSE_DNS -DUSE_BZIP + +# Shouldn't have to touch below here! + +all: webalizer wcmgr + +webalizer: webalizer.o webalizer.h hashtab.o hashtab.h \ + linklist.o linklist.h preserve.o preserve.h \ + dns_resolv.o dns_resolv.h parser.o parser.h \ + output.o output.h graphs.o graphs.h lang.h \ + webalizer_lang.h + $(CC) ${LDFLAGS} -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o dns_resolv.o graphs.o ${LIBS} + rm -f webazolver + ln -s webalizer webazolver + rm -f webazolver.1 + ln -s webalizer.1 webazolver.1 + +webalizer.o: webalizer.c webalizer.h parser.h output.h preserve.h \ + graphs.h dns_resolv.h webalizer_lang.h + $(CC) ${CFLAGS} ${DEFS} -c webalizer.c + +parser.o: parser.c parser.h webalizer.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c parser.c + +hashtab.o: hashtab.c hashtab.h dns_resolv.h webalizer.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c hashtab.c + +linklist.o: linklist.c linklist.h webalizer.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c linklist.c + +output.o: output.c output.h webalizer.h preserve.h \ + hashtab.h graphs.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c output.c + +preserve.o: preserve.c preserve.h webalizer.h parser.h \ + hashtab.h graphs.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c preserve.c + +dns_resolv.o: dns_resolv.c dns_resolv.h lang.h webalizer.h + $(CC) ${CFLAGS} ${DEFS} -c dns_resolv.c + +graphs.o: graphs.c graphs.h webalizer.h lang.h + $(CC) ${CFLAGS} ${DEFS} -c graphs.c + +wcmgr: wcmgr.o + $(CC) ${LDFLAGS} -o wcmgr wcmgr.o ${LIBS} + +wcmgr.o: wcmgr.c webalizer.h + $(CC) ${CFLAGS} ${DEFS} -c wcmgr.c + +clean: + rm -f webalizer *.o usage*.png daily*.png hourly*.png ctry*.png + rm -f *.html *.hist *.current core *.gif + +distclean: clean + rm -f webalizer.conf *.tar *.tgz *.Z *.tar.gz + rm -f Makefile webalizer_lang.h config.cache config.log config.status + ln -s lang/webalizer_lang.english webalizer_lang.h + +install: all + cp webalizer.1 ${MANDIR}/webalizer.1 + cp webalizer ${BINDIR}/webalizer + cp sample.conf ${ETCDIR}/webalizer.conf.sample + +uninstall: + rm -f ${MANDIR}/webalizer.1 + rm -f ${BINDIR}/webalizer + rm -f ${BINDIR}/webalizer.conf.sample diff --git a/webalizer-2.23-08/README b/webalizer-2.23-08/README new file mode 100644 index 0000000..3a62724 --- /dev/null +++ b/webalizer-2.23-08/README @@ -0,0 +1,1949 @@ +The Webalizer - A web server log file analysis tool +Copyright 1997-2013 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.23 + +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 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 + 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 section of the report, just before the + title and "summary period/generated on" lines. If used, + the first HTMLHead line MUST include a 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 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


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 section + between table data 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 and + tags. If specified, you _must_ specify these tags + yourself. + +LinkReferrer This specifies if the referrers listed in the top referrer + table should be displayed as plain text, or as a link to the + referrer. Values can be either 'yes' or 'no', with 'no' + being the default. + + +Graph Color Commands +-------------------- + +These keywords allow altering the colors used in the various graphs +produced by the Webalizer. The value is specified as a standard HTML +RGB hexdecimal color string, without the leading '#' character. The +value is case insensitive. If not specified, the default color shown +will be used. + +ColorHit Color used for 'Hits'. Default is '00805C' (green) + +ColorFile Color used for 'Files'. Default is '0040FF' (blue) + +ColorSite Color used for 'Sites'. Default is 'FF8000' (orange) + +ColorKbyte Color used for 'KBytes'. Default is 'FF0000' (red) + +ColorPage Color used for 'Pages'. Default is '00E0FF' (cyan) + +ColorVisit Color used for 'Visits'. Default is 'FFFF00' (yellow) + +ColorMisc Color used for miscellaneous titles in various 'Top' + tables (not graphs). Default is '00E0FF' (cyan) + +PieColor1 Pie Chart color #1. Default is '800080' (purple) + +PieColor2 Pie Chart color #2. Default is '80FFC0' (lt. green) + +PieColor3 Pie Chart color #3. Default is 'FF00FF' (lt. purple) + +PieColor4 Pie Chart color #4. Default is 'FFC080' (tan) + + +-------------------------------------------------------------------------- + + +Notes on Web Log Files +---------------------- + +The Webalizer supports CLF log formats, which should work for just +about everyone. If you want User Agent or Referrer information, you +need to make sure your web server supplies this information in its +log file, and in a format that the Webalizer can understand. While +The Webalizer will try to handle many of the subtle variations in +log formats, some will not work at all. Most web servers output +CLF format logs by default. For Apache, in order to produce the +proper log format, add the following to the httpd.conf file: + +LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" + +This instructs the Apache web server to produce a 'combined' log +that includes the referrer and user agent information on the end of +each record, enclosed in quotes (This is the standard recommended +by both Apache and NCSA). Netscape and other web servers have +similar capabilities to alter their log formats. (note: the above +works for apache servers up to V1.2. V1.3 and higher now have additional +ways to specify log formats... refer to included documentation). + +Notes on FTP Log Files +---------------------- + +The Webalizer supports ftp logs produced by wu-ftpd, proftpd and others, +as a standard 'xferlog'. To process an ftp log, you must either use the +-Ff command line option or have "LogType ftp" in your configuration file. +It is recommended that you create a separate configuration file for ftp +analysis, since the values used for your web server will most likely not +be suited for ftp log analysis (ie: page types, hostname, etc.. should +be different). + +Because of the difference in web and ftp logs, there are a few limitations: + +o Because there is no concept of a 'response code' in ftp world, response + codes are restricted to either 200 (OK) or 206 (Partial Content), based + on the completion status found in xferlog (for wu-ftpd, 'i'=incomplete + and will generate a 206, 'c'=complete and will generate a 200). If your + ftp server doesn't supply the completion status, all requests will be + assigned a response code of 200. This allows the usage graph to display + all transfer requests (hits), and how many of those completed in success + (files - ie: 200 response codes). + +o Page totals won't accurately reflect reality, since there isn't really + the concept of a 'page' in regards to ftp services. I have found that + setting the PageType value to "README", "FIRST", etc... seems to work + fairly well however, and will give a pretty good indication of how + many 'non-binary' files were requested. Of course, the content of your + ftp site will be different, so your results may vary. + +o Visit totals also won't accurately reflect reality, since visits are + triggered on PageType requests (see above). What you usually wind up + with is visits=sites in most cases. + +o Entry/Exit pages will not be calculated for ftp logs. + +o For obvious reasons, referrers and user agents are not supported. + +o You _cannot_ analyze both web and ftp logs at the same time.. they must + be done separately in different runs. + + +Notes on Referrers +------------------ + +Referrers are weird critters... They take many shapes and forms, which makes +it much harder to analyze than a typical URL, which at least has some +standardization. What is contained in the referrer field of your log +files varies depending on many factors, such as what site did the referral, +what type of system it comes from and how the actual referral was generated. +Why is this? Well, because a user can get to your site in many ways... They +may have your site bookmarked in their browser, they may simply type your +sites URL field in their browser, they could have clicked on a link on some +remote web page or they may have found your site from one of the many search +engines and site indexes found on the web. The Webalizer attempts to deal +with all this variation in an intelligent way by doing certain things to +the referrer string which makes it easier to analyze. Of course, if your +web server doesn't provide referrer information, you probably don't really +care and are asking yourself why you are reading this section... + +Most referrers will take the form of "http://somesite.com/somepage.html", +which is what you will get if the user clicks on a link somewhere on the +web in order to get to your site. Some will be a variation of this, and +look something like "file:/some/such/sillyname", which is a reference from +a HTML document on the users local machine. Several variations of this can +be used, depending on what type of system the user has, if he/she is on +a local network, the type of network, etc... To complicate things even +more, dynamic HTML documents and HTML documents that are generated by +CGI scripts or external programs produce lots of extra information which +is tacked on to the end of the referrer string in an almost infinite number +of ways. If the user just typed your URL into their browser or clicked on +a bookmark, there won't be any information in the referrer field and will +take the form "-". + +In order to handle all these variations, The Webalizer parses the referrer +field in a certain way. First, if the referrer string begins with "http", +it assumes it is a normal referral and converts the "http://" and following +hostname to lowercase in order to simplify hiding if desired. For example, +the referrer "HTTP://WWW.MyHost.Com/This/Is/A/HTML/Document.html" will become +"http://www.myhost.com/This/Is/A/HTML/Document.html". Notice that only the +"http://" and hostname are converted to lower case... The rest of the +referrer field is left alone. This follows standard convention, as the +actual method (HTTP) and hostname are always case insensitive, while the +document name portion is case sensitive. + +Referrers that came from search engines, dynamic HTML documents, CGI +scripts and other external programs usually tack on additional information +that it used to create the page. A common example of this can be found +in referrals that come from search engines and site indexes common on the +web. Sometimes, these referrers URLs can be several hundred characters +long and include all the information that the user typed in to search for +your site. The Webalizer deals with this type of referrer by stripping +off all the query information, which starts with a question mark '?'. +The Referrer "http://search.yahoo.com/search?p=usa%26global%26link" will +be converted to just "http://search.yahoo.com/search". + +When a user comes to your site by using one of their bookmarks or by +typing in your URL directly into their browser, the referrer field is +blank, and looks like "-". Most sites will get more of these referrals +than any other type. The Webalizer converts this type of referral into +the string "- (Direct Request)". This is done in order to make it easier +to hide via a command line option or configuration file option. This is +because the character "-" is a valid character elsewhere in a referrer +field, and if not turned into something unique, could not be hidden without +possibly hiding other referrers that shouldn't be. + + +Notes on Character Escaping +--------------------------- + +The HTTP protocol defines certain ways that URLs can look and behave. To +some extent, referrer fields follow most of the same conventions. Character +escaping is a technique by which non-printable or other non-ASCII (and even +some ASCII) characters can be used in a URL. This is done by placing the +Hexadecimal value of the character in the URL, preceded by a percent sign '%'. +Since Hex values are made up of ASCII characters, any character can be +escaped to ensure only printable ASCII characters are present in the URL. +Some systems take this concept to the extreme and escape all sorts of stuff, +even characters that don't need to be escaped. To deal with this, The +Webalizer will un-escape URLs and referrers before being processed. For +Example, the URL "/www.webalizer.org/%7Efoo/bar.html" is the same URL as +"/www.webalizer.org/~foo/bar.html", a very common form of a URL to access +users web pages. If the URLs were not un-escaped, they would be treated as +two separate documents, even though they are really one and the same. + + +Search String Analysis +---------------------- + + The Webalizer will do a minimal analysis on referrer strings that +it finds, looking for well known search string patterns. Most of +the major search engines are supported, such as Yahoo!, Altavista, +Lycos, etc... Unfortunately, search engines are always changing +their internal/CGI query formats, new search engines are coming on +line every day, and the ability to detect _all_ search strings is +nearly impossible. However, it should be accurate enough to give +a good indication of what users were searching for when they stumbled +across your site. Note: as of version 1.31, search engines can now +be specified within a configuration file. See the sample.conf file +for examples of how to specify additional search engines. + + + +Notes on Visits/Entry/Exit Figures +---------------------------------- + +The majority of data analyzed and reported on by The Webalizer is +as accurate and correct as possible based on the input log file. +However, due to the limitation of the HTTP protocol, the use of +firewalls, proxy servers, multi-user systems, the rotation of your +log files, and a myriad of other conditions, some of these numbers +cannot, without absolute accuracy, be calculated. In particular, +Visits, Entry Pages and Exit Pages are suspect to random errors +due to the above and other conditions. The reason for this is +twofold, 1) Log files are finite in size and time interval, and +2) There is no way to distinguish multiple individual users apart +given only an IP address. Because log files are finite, they have +a beginning and ending, which can be represented as a fixed time +period. There is no way of knowing what happened previous to this +time period, nor is it possible to predict future events based on +it. Also, because it is impossible to distinguish individual users +apart, multiple users that have the same IP address all appear to +be a single user, and are treated as such. This is most common where +corporate users sit behind a proxy/firewall to the outside world, +and all requests appear to come from the same location (the address +of the proxy/firewall itself). Dynamic IP assignment (used with +dial-up Internet accounts) also present a problem, since the same +user will appear as to come from multiple places. + +For example, suppose two users visit your server from XYZ company, +which has their network connected to the Internet by a proxy server +'fw.xyz.com'. All requests from the network look as though they +originated from 'fw.xyz.com', even though they were really initiated +from two separate users on different PCs. The Webalizer would +see these requests as from the same location, and would record only +1 visit, when in reality, there were two. Because entry and exit +pages are calculated in conjunction with visits, this situation +would also only record 1 entry and 1 exit page, when in reality, +there should be 2. + +As another example, say a single user at XYZ company is surfing +around your website.. They arrive at 11:52pm the last day of +the month, and continue surfing until 12:30am, which is now a +new day (in a new month). Since a common practice is to rotate +(save then clear) the server logs at the end of the month, you +now have the users visit logged in two different files (current +and previous months). Because of this (and the fact that the +Webalizer clears history between months), the first page the +user requests after midnight will be counted as an entry page. +This is unavoidable, since it is the first request seen by that +particular IP address in the new month. + +For the most part, the numbers shown for visits, entry and exit +pages are pretty good 'guesses', even though they may not be 100% +accurate. They do provide a good indication of overall trends, +and shouldn't be that far off from the real numbers to count much. +You should probably consider them as the 'minimum' amount possible, +since the actual (real) values should always be equal or greater +in all cases. + + +Exporting Webalizer Data +------------------------ + +The Webalizer now has the ability to dump all object tables to tab +delimited ASCII text files, which can then be imported into most +popular database and spreadsheet programs. The files are not normally +produced, as on some sites they could become quite large, and are only +enabled by the use of the Dump* configuration keywords. The filename +extensions default to '.tab' however may be changed using the +'DumpExtension' keyword. Since this data contains all items, even +those normally hidden, it may not be desirable to have them located +in the output directory where they may be visible to normal web users.. +For this reason, the 'DumpPath' configuration keyword is available, +and allows the placement of these files somewhere outside the normal +web server document tree. An optional 'header' record may be written +to these files as well, and is useful when the data is to be imported +into a spreadsheet.. databases will not normally need the header. If +enabled, the header is simply the column names as the first record of +the file, tab separated. + + +Log files and The Webalizer +--------------------------- + +Most sites will choose to have The Webalizer run from cron at specified +intervals. Care should be taken to ensure that data is not lost as a +result of log file rotations. A suggested practice is to rotate your +web server logs at the end of each month as close to midnight as possible, +then have The Webalizer process the 'end of month' log file before running +statistics on the new, current log. On our systems, a shell script called +'rotate_logs' is run at midnight, the end of each month. This script file +looks like: + +------------------------- file: rotate_logs ------------------------------ +#!/bin/sh + +# halt the server +kill `cat /var/lib/httpd/logs/httpd.pid` + +# define backup names +OLD_ACCESS_LOG=/var/lib/httpd/logs/old/access_log.`date +%y%m%d-%H%M%S` +OLD_ERROR_LOG=/var/lib/httpd/logs/old/error_log.`date +%y%m%d-%H%M%S` + +# make end of month copy for analyzer +cp /var/lib/httpd/logs/access_log /var/lib/httpd/logs/access_log.backup + +# move files to archive directory +mv /var/lib/httpd/logs/access_log `echo $OLD_ACCESS_LOG` +mv /var/lib/httpd/logs/error_log `echo $OLD_ERROR_LOG` + +# restart web server +/usr/sbin/httpd + +# compress the archived files +/bin/gzip $OLD_ACCESS_LOG +/bin/gzip $OLD_ERROR_LOG +------------------------- end of file ------------------------------------ + +This script first stops the web server using a 'kill' command. Apache +keeps the PID of the server in the file httpd.pid, so we use it as the +argument for the kill. Next, it defines some names for the backup files, +which are basically the name of the files with the date and time appended +to the end of them. It then makes a copy of the log file, appended with +'.backup' in the log directory, moves the current log files to an archive +directory (/var/lib/httpd/logs/old) and restarts the server. This setup +allows the web server to be down for the minimum amount of time needed, +which is important for busy sites. If you don't want to stop the server, +you can remove the initial 'kill' command, and replace the '/usr/sbin/httpd' +line with "kill -1 `cat /var/lib/httpd/logs/httpd.pid`" command instead, +On most web servers, this will cause a restart of the server and create +the new log files in the process... + +At this point, we have made copies of the previous months logs, the web +server is going about its business as usual, and we have all the time in +the world to do any other additional processing we want. The last two +lines of the script compress the archived logs using the GNU zip program +(gzip). Remember, we still have a copy of the log which we can now run +The Webalizer on without having to do any further processing. + +Next, we define two crontab entries. The first runs the above 'rotate_logs' +script at midnight at the end of the month. The second runs The Webalizer +on the '.backup' log file created above at 5 minutes after midnight. This +gives other end of month processing jobs a chance to run so we don't bog +the system down too much. If you have lots of end of month stuff going on, +you can change the timing to suit your needs. The crontab entries look +something like: + +------------------------- crontab entries -------------------------------- +# Rotate web server logs and run monthly analysis +0 0 1 * * /usr/local/adm/rotate_logs +5 0 1 * * /usr/bin/webalizer -Q /var/lib/httpd/logs/access_log.backup +------------------------- end of crontab --------------------------------- + +As you can see, the log rotations occur at midnight, and the analysis +is done at 5 minutes after. Once you verify that The Webalizer ran +successfully, the access_log.backup file can be deleted as it isn't +needed any more. If you need to re-run the analysis, you still have +the compressed archive copy that the shell script created. In order +for the above analysis to work properly, you should have already +created an /etc/webalizer.conf configuration file suitable for your +site, or otherwise specify configuration options or a configuration +file on the crontab command line above. + +If you want The Webalizer to be run more often than once a month, you +can specify additional crontab entries to do this as well. Care should +be taken however to ensure that The Webalizer is not running when the +end of month processing above occurs, or unpredictable results may +happen (such as an inability to rotate the logs due to a file lock). +The easiest way is to run it on the half hour with a crontab entry like: + +30 * * * * /usr/bin/webalizer + + +Reverse DNS Lookups +------------------- + +The Webalizer fully supports both IPv4 and IPv6 DNS lookups, and +maintains a cache of those lookups to reduce processing the same +addresses in subsequent runs. The cache file can be created at +run-time, or may be created before running the webalizer using either +the stand alone 'webazolver' program, or The Webalizer (DNS) Cache +file Manager program 'wcmgr'. In order to perform reverse lookups, +a DNS Cache file must be specified, either on the command line or in +a configuration file. In order to create/update the cache file at +run-time, the number of DNS Children must also be specified, and can +be anything between 1 and 100. This specifies the number of child +processes to be forked, each of which will perform network DNS +queries in order to lookup up the addresses and update the cache. +Cached entries that are older than a specified TTL (time to live) +will be expired, and if encountered again in a log, will be looked +up at that time in order to 'freshen' them (verify the name is still +the same and update its timestamp). The default TTL is 7 days, however +may be set to anything between 1 and 100 days. Using the 'wcmgr' +program, entries may also be marked as 'permanent', in which case +they will persist (with an infinite TTL) in the cache until manually +removed. See the file DNS.README for additional information. + + +Geolocation Lookups +------------------- + +The Webalizer has the ability to perform geolocation lookups on IP +addresses using either it's own internal GeoDB database or optionally +the GeoIP database from MaxMind, Inc. (www.maxmind.com). If used, +unresolved addresses will be searched for in the database and it's +country of origin will be returned if found. This actually produces +more accurate Country information than DNS lookups, since the DNS +address space has additional gcTLDs that do not necessarily map to +a specific country (such as '.net' and '.com'). It is possible to +use both DNS lookups and geolocation lookups at the same time, which +will cause any addresses that could not be resolved using DNS lookups +to then be looked up in the database, greatly reducing the number of +'Unknown/Unresolved' entries in the generated reports. The native +GeoDB geolocation database provided by The Webalizer fully supports +IPv4 and IPv6 lookups, is updated regularly, and is the preferred +geolocation method for use with The Webalizer. The most current +version of the database can be obtained from our ftp site. + + +Language Support +---------------- + +Version 1.0x of The Webalizer added language support. This +support is only provided at compile time in the form of an +include file containing all the strings used by The Webalizer. +The source distribution contains all language files that were +available at the time, with English being the default as +that is the only human language I speak fluently, and me +Espanol es muy malo. Several people have already indicated +the desire to do translations into various languages, and as +I receive the language files, will make them available via +ftp at ftp://ftp.mrunix.net/pub/webalizer/lang. Unless there +happens to be a binary distribution in the language you need, +you will need to grab the source distribution and compile the +program yourself. See the file INSTALL that comes in the source +distribution for information on how to use a language other than +English. + +It should also be noted that the GD graphics library, used to +produce the in-line graphics in the output HTML, doesn't +support extended character sets, so if you are translating +the language file, you will no doubt encounter this problem. + +New: You can now specify the language to use when you are building + program from source, using the configure script. Just add + --with-language=language_name , where 'language_name' is the + name of a valid language file in the /lang/ directory. For + example, --with-language=french will build using French as + the default language. You should consult the INSTALL file + for additional information on building the program from source. + + +Known Issues +------------ + + o Memory Usage. The Webalizer makes liberal use of memory for internal + data structures during analysis. Lack of real physical memory will + noticeably degrade performance by doing lots of swapping between memory + and disk. One user who had a rather large log file noticed that The + Webalizer took over 7 hours to run with only 16 Meg of memory. Once + memory was increased, the time was reduced to a few minutes. + + + o Performance. The Hide*, Group*, Ignore*, Include* and IndexAlias + configuration options can cause a performance decrease if lots of + them are used. The reason for this is that every log record must + be scanned for each item in each list. For example, if you are + Hiding 20 objects, Grouping 20 more, and Ignoring 5, each record + is scanned, at most, 46 times (20+20+5 + an IndexAlias scan). + On really large log files, this can have a profound impact. It + is recommended that you use the least amount of these configuration + options that you can, as it will greatly improve performance. + + +Final Notes +----------- + +A lot of time and effort went into making The Webalizer, and to ensure that +the results are as accurate as possible. If you find any abnormalities or +inconsistent results, bugs, errors, omissions or anything else that doesn't +look right, please let me know so I can investigate the problem or correct +the error. This goes for the minimal documentation as well. Suggestions +for future versions are also welcome and appreciated. diff --git a/webalizer-2.23-08/README.FIRST b/webalizer-2.23-08/README.FIRST new file mode 100644 index 0000000..cab7c99 --- /dev/null +++ b/webalizer-2.23-08/README.FIRST @@ -0,0 +1,21 @@ +Upgrade information for the Webalizer Version 2.2x + +This release is, for the most part, a drop-in replacement for all +installations currently running 2.01, and all users are encouraged +to upgrade. See the 'CHANGES' file for a full list of changes +since version 2.01-10. + +Note: The history file format has changed in v2.20 in order to keep +more than 12 months. Existing history files will be automatically +converted to the new format the first time they are read. + +Note: This version redefines the '-v' command line switch to mean +'verbose', which will cause the program to display additional +informational and debugging messages at run-time. This should not +cause any major problems, as previously it would simply cause the +program to display its version information and then exit. + +Report bugs to 'brad at mrunix dot net' with "Webalizer" somewhere +in the subject. Please do not send HTML formatted e-mails or e-mail +containing HTML tags as my mail server will reject them. Thanks! + diff --git a/webalizer-2.23-08/config.log b/webalizer-2.23-08/config.log new file mode 100644 index 0000000..2fece2f --- /dev/null +++ b/webalizer-2.23-08/config.log @@ -0,0 +1,568 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by webalizer configure V2.23, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ ./configure --prefix=/usr/local/webalizer-2.23-08 --with-language=german --enable-dns --enable-geoip --with-db=/usr/include --with-dblib=/usr/lib + +## --------- ## +## Platform. ## +## --------- ## + +hostname = web-01 +uname -m = x86_64 +uname -r = 4.19.0-16-amd64 +uname -s = Linux +uname -v = #1 SMP Debian 4.19.181-1 (2021-03-19) + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = x86_64 +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /root/bin/admin-stuff +PATH: /root/bin +PATH: /usr/local/apache2/bin +PATH: /usr/local/php/bin +PATH: /usr/local/mysql/bin +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:1773: checking for gcc +configure:1789: found /usr/bin/gcc +configure:1800: result: gcc +configure:2038: checking for C compiler version +configure:2045: gcc --version >&5 +gcc (Debian 8.3.0-6) 8.3.0 +Copyright (C) 2018 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:2048: $? = 0 +configure:2055: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 8.3.0 (Debian 8.3.0-6) +configure:2058: $? = 0 +configure:2065: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:2068: $? = 1 +configure:2091: checking for C compiler default output file name +configure:2118: gcc -s conftest.c >&5 +configure:2121: $? = 0 +configure:2159: result: a.out +configure:2176: checking whether the C compiler works +configure:2186: ./a.out +configure:2189: $? = 0 +configure:2206: result: yes +configure:2213: checking whether we are cross compiling +configure:2215: result: no +configure:2218: checking for suffix of executables +configure:2225: gcc -o conftest -s conftest.c >&5 +configure:2228: $? = 0 +configure:2252: result: +configure:2258: checking for suffix of object files +configure:2284: gcc -c conftest.c >&5 +configure:2287: $? = 0 +configure:2310: result: o +configure:2314: checking whether we are using the GNU C compiler +configure:2343: gcc -c conftest.c >&5 +configure:2349: $? = 0 +configure:2366: result: yes +configure:2371: checking whether gcc accepts -g +configure:2401: gcc -c -g conftest.c >&5 +configure:2407: $? = 0 +configure:2506: result: yes +configure:2523: checking for gcc option to accept ISO C89 +configure:2597: gcc -c -g -O2 conftest.c >&5 +configure:2603: $? = 0 +configure:2626: result: none needed +configure:2644: checking whether ln -s works +configure:2648: result: yes +configure:2699: checking for a BSD-compatible install +configure:2755: result: /usr/bin/install -c +configure:2776: checking for special C compiler options needed for large files +configure:2869: result: no +configure:2875: checking for _FILE_OFFSET_BITS value needed for large files +configure:2910: gcc -c -g -O2 conftest.c >&5 +configure:2916: $? = 0 +configure:2984: result: no +configure:3124: checking how to run the C preprocessor +configure:3164: gcc -E conftest.c +configure:3170: $? = 0 +configure:3201: gcc -E conftest.c +conftest.c:8:10: fatal error: ac_nonexistent.h: No such file or directory + #include + ^~~~~~~~~~~~~~~~~~ +compilation terminated. +configure:3207: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "webalizer" +| #define PACKAGE_TARNAME "webalizer" +| #define PACKAGE_VERSION "V2.23" +| #define PACKAGE_STRING "webalizer V2.23" +| #define PACKAGE_BUGREPORT "" +| /* end confdefs.h. */ +| #include +configure:3240: result: gcc -E +configure:3269: gcc -E conftest.c +configure:3275: $? = 0 +configure:3306: gcc -E conftest.c +conftest.c:8:10: fatal error: ac_nonexistent.h: No such file or directory + #include + ^~~~~~~~~~~~~~~~~~ +compilation terminated. +configure:3312: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "webalizer" +| #define PACKAGE_TARNAME "webalizer" +| #define PACKAGE_VERSION "V2.23" +| #define PACKAGE_STRING "webalizer V2.23" +| #define PACKAGE_BUGREPORT "" +| /* end confdefs.h. */ +| #include +configure:3350: checking for grep that handles long lines and -e +configure:3424: result: /usr/bin/grep +configure:3429: checking for egrep +configure:3507: result: /usr/bin/grep -E +configure:3512: checking for ANSI C header files +configure:3542: gcc -c -g -O2 conftest.c >&5 +configure:3548: $? = 0 +configure:3647: gcc -o conftest -g -O2 -s conftest.c >&5 +configure:3650: $? = 0 +configure:3656: ./conftest +configure:3659: $? = 0 +configure:3676: result: yes +configure:3700: checking for sys/types.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for sys/stat.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for stdlib.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for string.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for memory.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for strings.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for inttypes.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for stdint.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3700: checking for unistd.h +configure:3721: gcc -c -g -O2 conftest.c >&5 +configure:3727: $? = 0 +configure:3743: result: yes +configure:3756: checking whether char is unsigned +configure:3784: gcc -c -g -O2 conftest.c >&5 +configure:3790: $? = 0 +configure:3805: result: no +configure:3814: checking for u_int64_t +configure:3844: gcc -c -g -O2 conftest.c >&5 +configure:3850: $? = 0 +configure:3865: result: yes +configure:3877: checking whether altzone is declared +configure:3907: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:24:10: error: 'altzone' undeclared (first use in this function); did you mean 'timezone'? + (void) altzone; + ^~~~~~~ + timezone +conftest.c:24:10: note: each undeclared identifier is reported only once for each function it appears in +configure:3913: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "webalizer" +| #define PACKAGE_TARNAME "webalizer" +| #define PACKAGE_VERSION "V2.23" +| #define PACKAGE_STRING "webalizer V2.23" +| #define PACKAGE_BUGREPORT "" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| #include +| +| int +| main () +| { +| #ifndef altzone +| (void) altzone; +| #endif +| +| ; +| return 0; +| } +configure:3928: result: no +configure:4014: checking for main in -l44bsd +configure:4043: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -l44bsd >&5 +/usr/bin/ld: cannot find -l44bsd +collect2: error: ld returned 1 exit status +configure:4049: $? = 1 +configure: failed program was: +| /* confdefs.h. */ +| #define PACKAGE_NAME "webalizer" +| #define PACKAGE_TARNAME "webalizer" +| #define PACKAGE_VERSION "V2.23" +| #define PACKAGE_STRING "webalizer V2.23" +| #define PACKAGE_BUGREPORT "" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| +| +| int +| main () +| { +| return main (); +| ; +| return 0; +| } +configure:4067: result: no +configure:4088: checking getopt.h usability +configure:4105: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:4111: $? = 0 +configure:4125: result: yes +configure:4129: checking getopt.h presence +configure:4144: gcc -E -I/usr/include conftest.c +configure:4150: $? = 0 +configure:4164: result: yes +configure:4192: checking for getopt.h +configure:4200: result: yes +configure:4213: checking for main in -lm +configure:4242: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lm >&5 +configure:4248: $? = 0 +configure:4266: result: yes +configure:4288: checking math.h usability +configure:4305: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:4311: $? = 0 +configure:4325: result: yes +configure:4329: checking math.h presence +configure:4344: gcc -E -I/usr/include conftest.c +configure:4350: $? = 0 +configure:4364: result: yes +configure:4392: checking for math.h +configure:4400: result: yes +configure:4416: checking for main in -lz +configure:4445: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lz -lm >&5 +configure:4451: $? = 0 +configure:4469: result: yes +configure:4476: checking for gzrewind in -lz +configure:4511: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lz -lz -lm >&5 +configure:4517: $? = 0 +configure:4535: result: yes +configure:4564: checking zlib.h usability +configure:4581: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:4587: $? = 0 +configure:4601: result: yes +configure:4605: checking zlib.h presence +configure:4620: gcc -E -I/usr/include conftest.c +configure:4626: $? = 0 +configure:4640: result: yes +configure:4668: checking for zlib.h +configure:4675: result: yes +configure:4693: checking for main in -lpng +configure:4722: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lpng -lz -lm >&5 +configure:4728: $? = 0 +configure:4746: result: yes +configure:4761: checking for main in -lgd +configure:4790: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lgd -lpng -lz -lm >&5 +configure:4796: $? = 0 +configure:4814: result: yes +configure:4821: checking for gdImagePng in -lgd +configure:4856: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lgd -lgd -lpng -lz -lm >&5 +configure:4862: $? = 0 +configure:4880: result: yes +configure:4909: checking gd.h usability +configure:4926: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:4932: $? = 0 +configure:4946: result: yes +configure:4950: checking gd.h presence +configure:4965: gcc -E -I/usr/include conftest.c +configure:4971: $? = 0 +configure:4985: result: yes +configure:5013: checking for gd.h +configure:5020: result: yes +configure:5047: checking for main in -ldb +configure:5076: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -ldb -lgd -lpng -lz -lm >&5 +configure:5082: $? = 0 +configure:5100: result: yes +configure:5122: checking db.h usability +configure:5139: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:5145: $? = 0 +configure:5159: result: yes +configure:5163: checking db.h presence +configure:5178: gcc -E -I/usr/include conftest.c +configure:5184: $? = 0 +configure:5198: result: yes +configure:5226: checking for db.h +configure:5233: result: yes +configure:5251: checking for fdatasync +configure:5307: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -ldb -lgd -lpng -lz -lm >&5 +configure:5313: $? = 0 +configure:5330: result: yes +configure:5403: checking for socket +configure:5459: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -ldb -lgd -lpng -lz -lm >&5 +configure:5465: $? = 0 +configure:5482: result: yes +configure:5566: checking sys/socket.h usability +configure:5583: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:5589: $? = 0 +configure:5603: result: yes +configure:5607: checking sys/socket.h presence +configure:5622: gcc -E -I/usr/include conftest.c +configure:5628: $? = 0 +configure:5642: result: yes +configure:5670: checking for sys/socket.h +configure:5678: result: yes +configure:5691: checking for inet_pton +configure:5747: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -ldb -lgd -lpng -lz -lm >&5 +configure:5753: $? = 0 +configure:5770: result: yes +configure:6169: checking for main in -lGeoIP +configure:6198: gcc -o conftest -Wall -O2 -I/usr/include -L/usr/lib -s conftest.c -lGeoIP -ldb -lgd -lpng -lz -lm >&5 +configure:6204: $? = 0 +configure:6222: result: yes +configure:6244: checking GeoIP.h usability +configure:6261: gcc -c -Wall -O2 -I/usr/include conftest.c >&5 +configure:6267: $? = 0 +configure:6281: result: yes +configure:6285: checking GeoIP.h presence +configure:6300: gcc -E -I/usr/include conftest.c +configure:6306: $? = 0 +configure:6320: result: yes +configure:6348: checking for GeoIP.h +configure:6355: result: yes +configure:6407: checking for language file +configure:6420: result: yes - german +configure:6573: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by webalizer config.status V2.23, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on web-01 + +config.status:589: creating Makefile +config.status:778: linking ./lang/webalizer_lang.german to webalizer_lang.h +configure:7495: Done. Type 'make' to continue with build. + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_c_char_unsigned=no +ac_cv_c_compiler_gnu=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_LDFLAGS_set=set +ac_cv_env_LDFLAGS_value=-s +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func_fdatasync=yes +ac_cv_func_inet_pton=yes +ac_cv_func_socket=yes +ac_cv_have_decl_altzone=no +ac_cv_header_GeoIP_h=yes +ac_cv_header_db_h=yes +ac_cv_header_gd_h=yes +ac_cv_header_getopt_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_math_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_socket_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_unistd_h=yes +ac_cv_header_zlib_h=yes +ac_cv_language=german +ac_cv_lib_44bsd_main=no +ac_cv_lib_GeoIP_main=yes +ac_cv_lib_db_main=yes +ac_cv_lib_gd_gdImagePng=yes +ac_cv_lib_gd_main=yes +ac_cv_lib_m_main=yes +ac_cv_lib_png_main=yes +ac_cv_lib_z_gzrewind=yes +ac_cv_lib_z_main=yes +ac_cv_objext=o +ac_cv_path_EGREP='/usr/bin/grep -E' +ac_cv_path_GREP=/usr/bin/grep +ac_cv_path_install='/usr/bin/install -c' +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_sys_file_offset_bits=no +ac_cv_sys_largefile_CC=no +ac_cv_type_u_int64_t=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +CC='gcc' +CFLAGS='-Wall -O2' +CPP='gcc -E' +CPPFLAGS=' -I/usr/include' +DEFAULT_LANG='english' +DEFS='-DPACKAGE_NAME=\"webalizer\" -DPACKAGE_TARNAME=\"webalizer\" -DPACKAGE_VERSION=\"V2.23\" -DPACKAGE_STRING=\"webalizer\ V2.23\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DHAVE_SYS_SOCKET_H=1' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/usr/bin/grep -E' +EXEEXT='' +GEODB_LOC='/usr/share/GeoDB' +GREP='/usr/bin/grep' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +LDFLAGS='-L/usr/lib -s' +LIBOBJS='' +LIBS='-lGeoIP -ldb -lgd -lpng -lz -lm ' +LN_S='ln -s' +LTLIBOBJS='' +OBJEXT='o' +OPTS='-DUSE_GEOIP -DUSE_DNS ' +PACKAGE_BUGREPORT='' +PACKAGE_NAME='webalizer' +PACKAGE_STRING='webalizer V2.23' +PACKAGE_TARNAME='webalizer' +PACKAGE_VERSION='V2.23' +PATH_SEPARATOR=':' +SHELL='/bin/sh' +WCMGR_LIBS='-ldb' +ac_ct_CC='gcc' +bindir='${exec_prefix}/bin' +build_alias='' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host_alias='' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local/webalizer-2.23-08' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +#define PACKAGE_NAME "webalizer" +#define PACKAGE_TARNAME "webalizer" +#define PACKAGE_VERSION "V2.23" +#define PACKAGE_STRING "webalizer V2.23" +#define PACKAGE_BUGREPORT "" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_GETOPT_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SYS_SOCKET_H 1 + +configure: exit 0 diff --git a/webalizer-2.23-08/config.status b/webalizer-2.23-08/config.status new file mode 100755 index 0000000..b5f8724 --- /dev/null +++ b/webalizer-2.23-08/config.status @@ -0,0 +1,806 @@ +#! /bin/sh +# Generated by configure. +# 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-/bin/sh} +## --------------------- ## +## 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` +" + +# Files that config.status was made for. +config_files=" Makefile" +config_links=" webalizer_lang.h:lang/webalizer_lang.german" + +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 ." + +ac_cs_version="\ +webalizer config.status V2.23 +configured by ./configure, generated by GNU Autoconf 2.61, + with options \"'--prefix=/usr/local/webalizer-2.23-08' '--with-language=german' '--enable-dns' '--enable-geoip' '--with-db=/usr/include' '--with-dblib=/usr/lib' 'LDFLAGS=-s'\" + +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='/usr/local/src/webalizer/webalizer-2.23-08' +srcdir='.' +INSTALL='/usr/bin/install -c' +# 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 + +if $ac_cs_recheck; then + echo "running CONFIG_SHELL=/bin/sh /bin/sh ./configure " '--prefix=/usr/local/webalizer-2.23-08' '--with-language=german' '--enable-dns' '--enable-geoip' '--with-db=/usr/include' '--with-dblib=/usr/lib' 'LDFLAGS=-s' $ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=/bin/sh + export CONFIG_SHELL + exec /bin/sh "./configure" '--prefix=/usr/local/webalizer-2.23-08' '--with-language=german' '--enable-dns' '--enable-geoip' '--with-db=/usr/include' '--with-dblib=/usr/lib' 'LDFLAGS=-s' $ac_configure_extra_args --no-create --no-recursion +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + + +# 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 + +cat >"$tmp/subs-1.sed" <<\CEOF +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +s,@SHELL@,|#_!!_#|/bin/sh,g +s,@PATH_SEPARATOR@,|#_!!_#|:,g +s,@PACKAGE_NAME@,|#_!!_#|webalizer,g +s,@PACKAGE_TARNAME@,|#_!!_#|webalizer,g +s,@PACKAGE_VERSION@,|#_!!_#|V2.23,g +s,@PACKAGE_STRING@,|#_!!_#|webalizer V2.23,g +s,@PACKAGE_BUGREPORT@,|#_!!_#|,g +s,@exec_prefix@,|#_!!_#|${prefix},g +s,@prefix@,|#_!!_#|/usr/local/webalizer-2.23-08,g +s,@program_transform_name@,|#_!!_#|s\,x\,x\,,g +s,@bindir@,|#_!!_#|${exec_prefix}/bin,g +s,@sbindir@,|#_!!_#|${exec_prefix}/sbin,g +s,@libexecdir@,|#_!!_#|${exec_prefix}/libexec,g +s,@datarootdir@,|#_!!_#|${prefix}/share,g +s,@datadir@,|#_!!_#|${datarootdir},g +s,@sysconfdir@,|#_!!_#|${prefix}/etc,g +s,@sharedstatedir@,|#_!!_#|${prefix}/com,g +s,@localstatedir@,|#_!!_#|${prefix}/var,g +s,@includedir@,|#_!!_#|${prefix}/include,g +s,@oldincludedir@,|#_!!_#|/usr/include,g +s,@docdir@,|#_!!_#|${datarootdir}/doc/${PACKAGE_TARNAME},g +s,@infodir@,|#_!!_#|${datarootdir}/info,g +s,@htmldir@,|#_!!_#|${docdir},g +s,@dvidir@,|#_!!_#|${docdir},g +s,@pdfdir@,|#_!!_#|${docdir},g +s,@psdir@,|#_!!_#|${docdir},g +s,@libdir@,|#_!!_#|${exec_prefix}/lib,g +s,@localedir@,|#_!!_#|${datarootdir}/locale,g +s,@mandir@,|#_!!_#|${datarootdir}/man,g +s,@DEFS@,|#_!!_#|-DPACKAGE_NAME=\\"webalizer\\" -DPACKAGE_TARNAME=\\"webalizer\\" -DPACKAGE_VERSION=\\"V2.23\\" -DPACKAGE_STRING=\\"webalizer\\ V2.23\\" -DPACKAGE_BUGREPORT=\\"\\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1 -DHAVE_SYS_SOCKET_H=1,g +s,@ECHO_C@,|#_!!_#|,g +s,@ECHO_N@,|#_!!_#|-n,g +s,@ECHO_T@,|#_!!_#|,g +s,@LIBS@,|#_!!_#|-lGeoIP -ldb -lgd -lpng -lz -lm ,g +s,@build_alias@,|#_!!_#|,g +s,@host_alias@,|#_!!_#|,g +s,@target_alias@,|#_!!_#|,g +s,@OPTS@,|#_!!_#|-DUSE_GEOIP -DUSE_DNS ,g +s,@WCMGR_LIBS@,|#_!!_#|-ldb,g +s,@DEFAULT_LANG@,|#_!!_#|english,g +s,@CC@,|#_!!_#|gcc,g +s,@CFLAGS@,|#_!!_#|-Wall -O2,g +s,@LDFLAGS@,|#_!!_#|-L/usr/lib -s,g +s,@CPPFLAGS@,|#_!!_#| -I/usr/include,g +s,@ac_ct_CC@,|#_!!_#|gcc,g +s,@EXEEXT@,|#_!!_#|,g +s,@OBJEXT@,|#_!!_#|o,g +s,@LN_S@,|#_!!_#|ln -s,g +s,@INSTALL_PROGRAM@,|#_!!_#|${INSTALL},g +s,@INSTALL_SCRIPT@,|#_!!_#|${INSTALL},g +s,@INSTALL_DATA@,|#_!!_#|${INSTALL} -m 644,g +s,@CPP@,|#_!!_#|gcc -E,g +s,@GREP@,|#_!!_#|/usr/bin/grep,g +s,@EGREP@,|#_!!_#|/usr/bin/grep -E,g +s,@GEODB_LOC@,|#_!!_#|/usr/share/GeoDB,g +s,@LIBOBJS@,|#_!!_#|,g +s,@LTLIBOBJS@,|#_!!_#|,g +:end +s/|#_!!_#|//g +CEOF +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 +# 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;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac + sed "/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +} + +: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; } diff --git a/webalizer-2.23-08/configure b/webalizer-2.23-08/configure new file mode 100755 index 0000000..28fe084 --- /dev/null +++ b/webalizer-2.23-08/configure @@ -0,0 +1,7509 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61 for webalizer V2.23. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &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 +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#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 if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + 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 +#include +#include +#include +/* 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 + /* 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 + /* 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 + /* 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 + /* 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 + /* 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 to if __STDC__ is defined, since + # 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 +#else +# include +#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 +_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 to if __STDC__ is defined, since + # 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 +#else +# include +#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 +_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 +#include +#include +#include + +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 + +_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 + +_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 +#include +#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 + +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 +_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 +_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 +_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 +_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 +_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 +_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 declares fdatasync. + For example, HP-UX 11i declares gettimeofday. */ +#define fdatasync innocuous_fdatasync + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char fdatasync (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#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 declares socket. + For example, HP-UX 11i declares gettimeofday. */ +#define socket innocuous_socket + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char socket (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#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 declares inet_pton. + For example, HP-UX 11i 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 to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#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 +_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 +_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 +_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 +_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 ." + +_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 >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :L $CONFIG_LINKS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + + :L) + # + # CONFIG_LINK + # + + { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5 +echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;} + + if test ! -r "$srcdir/$ac_source"; then + { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5 +echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;} + { (exit 1); exit 1; }; } + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$srcdir/$ac_source" "$ac_file" 2>/dev/null || + cp -p "$srcdir/$ac_source" "$ac_file" || + { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5 +echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + + esac + +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +{ echo "$as_me:$LINENO: Done. Type 'make' to continue with build." >&5 +echo "$as_me: Done. Type 'make' to continue with build." >&6;} diff --git a/webalizer-2.23-08/configure.in b/webalizer-2.23-08/configure.in new file mode 100644 index 0000000..8c21341 --- /dev/null +++ b/webalizer-2.23-08/configure.in @@ -0,0 +1,322 @@ +dnl +dnl The Webalizer - A web server log file analysis program +dnl Copyright (C) 1997-2013 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 ]) + +dnl ------------------------------------------ +dnl force our own CFLAGS defaults if GCC +dnl ------------------------------------------ + +if test "$GCC" = "yes"; then + + AC_ARG_ENABLE(static, + [ --enable-static Build as static executable [[default=no]]], + LDFLAGS="--static ${LDFLAGS}") + + if test "$IN_CFLAGS" = ""; then + CFLAGS="-Wall -O2" + fi + if test "$ac_cv_c_char_unsigned" = "yes"; then + CFLAGS="-fsigned-char ${CFLAGS}" + fi + + AC_ARG_ENABLE(debug, + [ --enable-debug Compile with debugging code [[default=no]]], + CFLAGS="-g ${CFLAGS}") + +else + if test "$IN_CFLAGS" = ""; then + CFLAGS="-g" + fi +fi + +dnl ------------------------------------------ +dnl check command line arguments +dnl ------------------------------------------ + +AC_ARG_WITH(gd, + [ --with-gd=DIR Alternate location for gd header files], + S_GD="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(gdlib, + [ --with-gdlib=DIR Alternate location for gd library], + S_GDLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") +AC_ARG_WITH(png, + [ --with-png=DIR Alternate location for png header files], + S_PNG="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(pnglib, + [ --with-pnglib=DIR Alternate location for png library], + S_PNGLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") +AC_ARG_WITH(z, + [ --with-z=DIR Alternate location for libz header files], + S_Z="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(zlib, + [ --with-zlib=DIR Alternate location for z library], + S_ZLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") +AC_ARG_WITH(db, + [ --with-db=DIR Alternate location for libdb header files], + S_DB="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(dblib, + [ --with-dblib=DIR Alternate location for db library], + S_DBLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") + +dnl ------------------------------------------ +dnl these are needed on some platforms +dnl ------------------------------------------ + +AC_CHECK_LIB(44bsd, main, LIBS="-l44bsd ${LIBS}") +AC_CHECK_HEADERS(getopt.h) +AC_CHECK_LIB(m, main, LIBS="-lm ${LIBS}"; HAVE_LIBM="1") +if test "${HAVE_LIBM}" = "1"; then + AC_CHECK_HEADERS(math.h) +fi + +dnl ------------------------------------------ +dnl ensure current libz is present - required! +dnl ------------------------------------------ + +AC_CHECK_LIB(z, main, LIBZ="yes"; LIBS="-lz ${LIBS}") +if test "${LIBZ}" = "yes"; then + AC_CHECK_LIB(z, gzrewind,LIBZ="yes",LIBZ="no") + if test "${LIBZ}" = "no"; then + AC_MSG_ERROR(Old version of libz found.. please upgrade!) + fi +else + AC_MSG_ERROR(z library not found.. please install libz) +fi + +AC_CHECK_HEADER(zlib.h, HDR="yes", HDR="no") +if test "${HDR}" = "no"; then + AC_MSG_ERROR(zlib.h header not found.. please install) +fi + +dnl ------------------------------------------ +dnl ensure libpng is present - required! +dnl ------------------------------------------ + +AC_CHECK_LIB(png, main, LIBPNG="yes"; LIBS="-lpng ${LIBS}",LIBPNG="no") +if test "${LIBPNG}" = "no"; then + AC_MSG_ERROR(png library not found.. please install libpng) +fi + +dnl ------------------------------------------ +dnl ensure libgd is present - required! +dnl ------------------------------------------ + +AC_CHECK_LIB(gd, main, LIBGD="yes"; LIBS="-lgd ${LIBS}") +if test "${LIBGD}" = "yes"; then + AC_CHECK_LIB(gd, gdImagePng, LIBGD="yes", LIBGD="no") + if test "${LIBGD}" = "no"; then + AC_MSG_ERROR(Old version of libgd found.. please upgrade!) + fi +else + AC_MSG_ERROR(gd library not found.. please install libgd) +fi + +AC_CHECK_HEADER(gd.h, HDR="yes", HDR="no") +if test "${HDR}" = "no"; then + AC_MSG_ERROR(gd.h header not found.. please install) +fi + +dnl ------------------------------------------ +dnl DNS/GeoDB lookup specific tests +dnl ------------------------------------------ + +AC_ARG_ENABLE(dns, + [ --enable-dns Enable DNS/GeoDB lookup code [[default=yes]]], + USE_DNS="${enableval}", USE_DNS="yes") + +if test "${USE_DNS}" = "yes"; then + AC_CHECK_LIB(db, main, USE_DNS="yes", + USE_DNS="no"; AC_MSG_WARN(libdb not found.. DNS/GeoDB code disabled!)) +fi + +if test "${USE_DNS}" = "yes"; then + AC_CHECK_HEADER(db.h, USE_DNS="yes", + USE_DNS="no"; AC_MSG_WARN(db.h not found.. DNS/GeoDB code disabled!)) +fi + +if test "${USE_DNS}" = "yes"; then + dnl we have both library and header.. proceed + OPTS="-DUSE_DNS ${OPTS}" + LIBS="-ldb ${LIBS}" + WCMGR_LIBS="-ldb" + AC_CHECK_FUNC(fdatasync,DUMMY="") + if test "$ac_cv_func_fdatasync" = "no"; then + AC_CHECK_LIB(rt, fdatasync, + LIBS="-lrt ${LIBS}";WCMGR_LIBS="-lrt ${WCMGR_LIBS}") + fi + AC_CHECK_FUNC(socket,DUMMY="",DUMMY="") + if test "$ac_cv_func_socket" = "no"; then + AC_CHECK_LIB(socket, main, LIBS="-lsocket ${LIBS}") + fi + AC_CHECK_HEADERS(sys/socket.h) + AC_CHECK_FUNC(inet_pton,DUMMY="",DUMMY="") + if test "$ac_cv_func_inet_pton" = "no"; then + AC_CHECK_LIB(nsl,inet_pton, LIBS="-lnsl ${LIBS}") + fi +fi + +dnl ------------------------------------------ +dnl BZip2 code specific tests +dnl ------------------------------------------ + +AC_ARG_ENABLE(bz2, + [ --enable-bz2 Enable BZip2 decompression code [[default=no]]], + USE_BZIP="${enableval}", USE_BZIP="no") + +AC_ARG_WITH(bz2, + [ --with-bz2=DIR Alternate location for bz2 header files], + S_BZ2="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(bz2lib, + [ --with-bz2lib=DIR Alternate location for bz2 library], + S_BZ2LIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") + +if test "${USE_BZIP}" = "yes"; then + AC_CHECK_LIB(bz2, main, USE_BZIP="yes", + USE_BZIP="no"; AC_MSG_WARN(libbz2 not found.. bzip2 code will will be disabled!)) +fi + +if test "${USE_BZIP}" = "yes"; then + AC_CHECK_LIB(bz2, BZ2_bzopen, USE_BZIP="yes", + USE_BZIP="no"; AC_MSG_WARN(Old bz2 library found.. bzip2 code will be disabled!)) +fi + +if test "${USE_BZIP}" = "yes"; then + AC_CHECK_HEADER(bzlib.h, USE_BZIP="yes", + USE_BZIP="no"; AC_MSG_WARN(bzlib.h not found.. bzip2 code will be disabled!)) +fi + +if test "${USE_BZIP}" = "yes"; then + dnl we have both library and header.. proceed + OPTS="-DUSE_BZIP ${OPTS}" + LIBS="-lbz2 ${LIBS}" +fi + +dnl ------------------------------------------ +dnl GeoIP code specific tests +dnl ------------------------------------------ + +AC_ARG_ENABLE(geoip, + [ --enable-geoip Enable GeoIP geolocation code [[default=no]]], + USE_GEOIP="${enableval}", USE_GEOIP="no") + +AC_ARG_WITH(geoip, + [ --with-geoip=DIR Alternate location for libGeoIP header files], + S_GEOIP="${withval}"; CPPFLAGS="${CPPFLAGS} -I${withval}") +AC_ARG_WITH(geoiplib, + [ --with-geoiplib=DIR Alternate location for geoip library], + S_GEOIPLIB="${withval}"; LDFLAGS="-L${withval} ${LDFLAGS}") + +if test "${USE_GEOIP}" = "yes"; then + AC_CHECK_LIB(GeoIP, main, USE_GEOIP="yes", + USE_GEOIP="no"; AC_MSG_WARN(libGeoIP not found.. GeoIP code will be disabled!)) +fi + +if test "${USE_GEOIP}" = "yes"; then + AC_CHECK_HEADER(GeoIP.h, USE_GEOIP="yes", + USE_GEOIP="no"; AC_MSG_WARN(GeoIP.h not found.. GeoIP code will be disabled!)) +fi + +if test "${USE_GEOIP}" = "yes"; then + dnl we have both library and header.. proceed + OPTS="-DUSE_GEOIP ${OPTS}" + LIBS="-lGeoIP ${LIBS}" +fi + +dnl ------------------------------------------ +dnl check for default GeoDB directory +dnl ------------------------------------------ + +AC_ARG_WITH(geodb, + [ --with-geodb=DIR Default GeoDB data dir [[/usr/share/GeoDB]]], + GEODB_LOC="${withval}", GEODB_LOC="/usr/share/GeoDB") +AC_SUBST(GEODB_LOC) + +dnl ------------------------------------------ +dnl check which hash function to use +dnl ------------------------------------------ +AC_ARG_ENABLE(oldhash, + [ --enable-oldhash Use old hash function (slower) [[default=no]]], + OLDHASH=${enableval}, OLDHASH="no") + if test "$OLDHASH" = "yes"; then OPTS="-DUSE_OLDHASH"; fi + +dnl ------------------------------------------ +dnl check language to use (default is english) +dnl ------------------------------------------ + +LANG_CACHE=yes +AC_ARG_WITH(language, + [ --with-language=name Use language 'name' (default is english)], + WEBALIZER_LANG="${withval}"; LANG_CACHE=no, LANG_CACHE=yes) +if test "$WEBALIZER_LANG" = "no"; then WEBALIZER_LANG=english; fi + +dnl ------------------------------------------ +dnl check if specfied language is valid +dnl ------------------------------------------ + +AC_MSG_CHECKING(for language file) +if test "$LANG_CACHE" = "yes"; then + AC_CACHE_VAL(ac_cv_language, ac_cv_language=$DEFAULT_LANG) + WEBALIZER_LANG=$ac_cv_language +fi + +if test -f lang/webalizer_lang.${WEBALIZER_LANG}; then +AC_MSG_RESULT(yes - ${WEBALIZER_LANG}) +else + if test -f lang/webalizer_lang.${DEFAULT_LANG}; then + AC_MSG_RESULT('${WEBALIZER_LANG}' not found - using ${DEFAULT_LANG}) + WEBALIZER_LANG=${DEFAULT_LANG} + else + AC_MSG_RESULT(no) + AC_MSG_ERROR(language files not found... fix before continuing) + fi +fi +ac_cv_language=${WEBALIZER_LANG} + +dnl ------------------------------------------ +dnl create link to language file +dnl ------------------------------------------ + +AC_LINK_FILES(lang/webalizer_lang.${WEBALIZER_LANG}, webalizer_lang.h) + +dnl ------------------------------------------ +dnl done.. write out our Makefile +dnl ------------------------------------------ + +AC_OUTPUT(Makefile) +AC_MSG_NOTICE(Done. Type 'make' to continue with build.) diff --git a/webalizer-2.23-08/country-codes.txt b/webalizer-2.23-08/country-codes.txt new file mode 100644 index 0000000..1cb7388 --- /dev/null +++ b/webalizer-2.23-08/country-codes.txt @@ -0,0 +1,279 @@ +ac Ascension Island +ad Andorra +ae United Arab Emirates +af Afghanistan +ag Antigua and Barbuda +ai Anguilla +al Albania +am Armenia +an Netherlands Antilles +ao Angola +aq Antarctica +ar Argentina +as American Samoa +at Austria +au Australia +aw Aruba +ax Aland Islands +az Azerbaijan +ba Bosnia and Herzegovina +bb Barbados +bd Bangladesh +be Belgium +bf Burkina Faso +bg Bulgaria +bh Bahrain +bi Burundi +bj Benin +bl Saint Barthelemy +bm Bermuda +bn Brunei Darussalam +bo Bolivia +br Brazil +bs Bahamas +bt Bhutan +bv Bouvet Island +bw Botswana +by Belarus +bz Belize +ca Canada +cc Cocos (Keeling) Islands +cd Congo, Democratic Republic +cf Central African Republic +cg Congo +ch Switzerland +ci Cote D'Ivoire (Ivory Coast) +ck Cook Islands +cl Chile +cm Cameroon +cn China +co Colombia +cr Costa Rica +cu Cuba +cv Cape Verde +cx Christmas Island +cy Cyprus +cz Czech Republic +de Germany +dj Djibouti +dk Denmark +dm Dominica +do Dominican Republic +dz Algeria +ec Ecuador +ee Estonia +eg Egypt +eh Western Sahara +er Eritrea +es Spain +et Ethiopia +eu European Union +fi Finland +fj Fiji +fk Falkland Islands (Malvinas) +fm Micronesia +fo Faroe Islands +fr France +ga Gabon +gb Great Britain (UK) +gd Grenada +ge Georgia +gf French Guiana +gg Guernsey +gh Ghana +gi Gibraltar +gl Greenland +gm Gambia +gn Guinea +gp Guadeloupe +gq Equatorial Guinea +gr Greece +gs S. Georgia and S. Sandwich Isls. +gt Guatemala +gu Guam +gw Guinea-Bissau +gy Guyana +hk Hong Kong +hm Heard and McDonald Islands +hn Honduras +hr Croatia +ht Haiti +hu Hungary +id Indonesia +ie Ireland +il Israel +im Isle of Man +in India +io British Indian Ocean Territory +iq Iraq +ir Iran +is Iceland +it Italy +je Jersey +jm Jamaica +jo Jordan +jp Japan +ke Kenya +kg Kyrgyzstan +kh Cambodia +ki Kiribati +km Comoros +kn Saint Kitts and Nevis +kp Korea, Democratic Republic of +kr Korea, Republic of +kw Kuwait +ky Cayman Islands +kz Kazakhstan +la Laos +lb Lebanon +lc Saint Lucia +li Liechtenstein +lk Sri Lanka +lr Liberia +ls Lesotho +lt Lithuania +lu Luxembourg +lv Latvia +ly Libya +ma Morocco +mc Monaco +md Moldova +me Montenegro +mf Saint Martin (French part) +mg Madagascar +mh Marshall Islands +mk Macedonia +ml Mali +mm Myanmar +mn Mongolia +mo Macau +mp Northern Mariana Islands +mq Martinique +mr Mauritania +ms Montserrat +mt Malta +mu Mauritius +mv Maldives +mw Malawi +mx Mexico +my Malaysia +mz Mozambique +na Namibia +nc New Caledonia +ne Niger +nf Norfolk Island +ng Nigeria +ni Nicaragua +nl Netherlands +no Norway +np Nepal +nr Nauru +nu Niue +nz New Zealand (Aotearoa) +om Oman +pa Panama +pe Peru +pf French Polynesia +pg Papua New Guinea +ph Philippines +pk Pakistan +pl Poland +pm St. Pierre and Miquelon +pn Pitcairn +pr Puerto Rico +ps Palestinian Territory, Occupied +pt Portugal +pw Palau +py Paraguay +qa Qatar +re Reunion +ro Romania +rs Serbia +ru Russian Federation +rw Rwanda +sa Saudi Arabia +sb Solomon Islands +sc Seychelles +sd Sudan +se Sweden +sg Singapore +sh St. Helena +si Slovenia +sj Svalbard and Jan Mayen Islands +sk Slovakia +sl Sierra Leone +sm San Marino +sn Senegal +so Somalia +sr Suriname +st Sao Tome and Principe +su Soviet Union +sv El Salvador +sy Syrian Arab Republic +sz Swaziland +tc Turks and Caicos Islands +td Chad +tf French Southern Territories +tg Togo +th Thailand +tj Tajikistan +tk Tokelau +tl Timor-Leste +tm Turkmenistan +tn Tunisia +to Tonga +tp Portuguese Timor +tr Turkey +tt Trinidad and Tobago +tv Tuvalu +tw Taiwan +tz Tanzania +ua Ukraine +ug Uganda +uk United Kingdom +um US Minor Outlying Islands +us United States +uy Uruguay +uz Uzbekistan +va Vatican City State (Holy See) +vc Saint Vincent and the Grenadines +ve Venezuela +vg Virgin Islands (British) +vi Virgin Islands (U.S.) +vn Viet Nam +vu Vanuatu +wf Wallis and Futuna Islands +ws Samoa +ye Yemen +yt Mayotte +yu Yugoslavia +za South Africa +zm Zambia +zw Zimbabwe +com US Commercial (com) +edu US Educational (edu) +gov US Government (gov) +int International (int) +mil US Military (mil) +net Network (net) +org Non-Profit Organization (org) +biz Generic Business (biz) +cat Catalan Community (cat) +pro Professional (pro) +tel Ind. Contact Data (tel) +aero Air Transport Industry (aero) +asia Asia Pacific Community (asia) +coop Cooperative Association (coop) +info Generic TLD (info) +jobs Human Resources (jobs) +mobi Generic Mobile TLD (mobi) +name Individual (name) +arpa Address Routing (arpa) +nato Nato field (nato) +museum Museums (museum) +travel Travel Ind. (travel) +a1 Anonymous Proxy +a2 Satellite Provider +o1 Other +ap Asia/Pacific Region +lan Local Network (lan) diff --git a/webalizer-2.23-08/dns_resolv.c b/webalizer-2.23-08/dns_resolv.c new file mode 100644 index 0000000..b84e877 --- /dev/null +++ b/webalizer-2.23-08/dns_resolv.c @@ -0,0 +1,923 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include +#include /* normal stuff */ +#include +#include +#include + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* Need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#endif + +#ifdef USE_DNS /* skip everything in this file if no DNS */ + +#include /* include stuff we need for dns lookups, */ +#include /* DB access, file control, etc... */ +#include +#include /* ensure getaddrinfo/getnameinfo */ +#include +#include +#include +#include +#include +#include /* 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 */ + 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 */ + 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;iaddr, + 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 */ + if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nodb,dns_cache); + return 0; /* disable cache */ + } + + /* get file descriptor */ + dns_db->fd(dns_db, &dns_fd); + + /* Get shared lock on cache file */ + if (fcntl(dns_fd, F_SETLK, &tmp_flock) < 0) + { + if (verbose) fprintf(stderr,"%s %s\n",msg_dns_nolk,dns_cache); + dns_db->close(dns_db, 0); + return 0; + } + return 1; +} + +/*********************************************/ +/* CLOSE_CACHE - close our RDONLY cache */ +/*********************************************/ + +int close_cache() +{ + struct flock tmp_flock; + + tmp_flock.l_whence=SEEK_SET; /* default flock fields */ + tmp_flock.l_start=0; + tmp_flock.l_len=0; + tmp_flock.l_pid=0; + tmp_flock.l_type=F_UNLCK; + + /* clear lock and close cache file */ + fcntl(dns_fd, F_SETLK, &tmp_flock); + dns_db->close(dns_db, 0); + return 1; +} + +/*********************************************/ +/* GEODB_OPEN - Open GeoDB database/cursor */ +/*********************************************/ + +DB *geodb_open(char *dbname) +{ + char buf[1025]; + + if (dbname==NULL) + snprintf(buf,sizeof(buf),"%s/GeoDB.dat",GEODB_LOC); + else + strncpy(buf,dbname,sizeof(buf)-1); + buf[sizeof(buf)-1]='\0'; + + /* create database thingie */ + if ( db_create(&geo_db, NULL, 0) ) return NULL; + + /* open the database */ + if (geo_db->open(geo_db,NULL,buf,NULL,DB_BTREE,DB_RDONLY,0)) return NULL; + + /* create our cursor */ + if (geo_db->cursor(geo_db,NULL,&geo_dbc,0)) + { + geo_db->close(geo_db,0); + return NULL; + } + /* all is well in the world */ + return geo_db; +} + +/*********************************************/ +/* GEODB_VER - Get database version info */ +/*********************************************/ + +char *geodb_ver(DB *db, char *str) +{ + int i; + DBT k,v; + unsigned char x[16]; + + memset(&x, 0, sizeof(x)); + memset(&k, 0, sizeof(k)); + memset(&v, 0, sizeof(v)); + k.data=&x; + k.size=sizeof(x); + + i=geo_db->get(geo_db, NULL, &k, &v, 0); + + if (i) strncpy(str, "Unknown", 8); + else strncpy(str, v.data+3, v.size-3); + return str; +} + +/*********************************************/ +/* GEODB_GET_CC - Get country code for IP */ +/*********************************************/ + +char *geodb_get_cc(DB *db, char *ip, char *buf) +{ + int i; + DBT k,v; + unsigned char addr[16]; + + memset(addr, 0, sizeof(addr)); + strncpy(buf, "--", 3); + + /* get IP address */ + if (!iptype(ip, addr)) return buf; + + /* kludge for IPv6 mapped IPv4 */ + if (addr[0]==0 && addr[1]==0 && addr[2]==0) { addr[10]=0; addr[11]=0; } + + /* kludge for IPv6 6to4 (RFC3056) */ + if (addr[0]==0x20 && addr[1]==0x02) + { + memcpy(&addr[12],&addr[2],4); + memset(&addr,0,12); + } + + memset(&k, 0, sizeof(k)); + memset(&v, 0, sizeof(v)); + k.data=&addr; + k.size=sizeof(addr); + + i=geo_dbc->c_get(geo_dbc, &k, &v, DB_SET_RANGE); + if (!i) memcpy(buf, v.data, 2); + return buf; +} + +/*********************************************/ +/* GEODB_CLOSE - close GeoDB database */ +/*********************************************/ + +void geodb_close(DB *db) +{ + db->close(db,0); +} + +/*********************************************/ +/* IPTYPE - get IP type and format addr buf */ +/*********************************************/ + +int iptype(char *ip, unsigned char *buf) +{ + if (inet_pton(AF_INET6, ip, buf)>0) return 2; + if (inet_pton(AF_INET, ip, buf+12)>0) return 1; + else return 0; +} + +#endif /* USE_DNS */ diff --git a/webalizer-2.23-08/dns_resolv.h b/webalizer-2.23-08/dns_resolv.h new file mode 100644 index 0000000..29066f7 --- /dev/null +++ b/webalizer-2.23-08/dns_resolv.h @@ -0,0 +1,42 @@ +#ifndef _DNS_RESOLV_H +#define _DNS_RESOLV_H + +#ifdef USE_DNS /* skip whole file if not using DNS stuff... */ + +struct dnsRecord { time_t timeStamp; /* Timestamp of resolv data */ + int numeric; /* 0: Name, 1: IP-address */ + char hostName[1]; }; /* Hostname (var length) */ + +struct dns_child /* Defines the communication with a DNS child */ +{ + int inpipe[2]; /* Pipe Child -> Father */ + int outpipe[2]; /* Pipe Father -> Child */ + int pid; /* PID of Child */ + int flags; /* see below */ + struct dnode *cur; /* Currently processed node */ +}; + +extern void resolve_dns(struct log_struct *); +extern DB *dns_db; +extern int dns_fd; +extern int dns_resolver(void *); +extern int open_cache(); +extern int close_cache(); + +extern DB *geo_db; +extern DB *geodb_open(char *); +extern char *geodb_ver(DB *, char *); +extern char *geodb_get_cc(DB *, char *, char *); +extern void geodb_close(DB *); + +#define DNS_CHILD_READY 0x1 /* Our child flags */ +#define DNS_CHILD_RUNNING 0x2 + +#define MAXCHILD 100 /* Maximum number of DNS children */ + +#ifndef GEODB_LOC +#define GEODB_LOC "/usr/share/GeoDB" +#endif + +#endif /* USE_DNS */ +#endif /* _DNS_RESOLV_H */ diff --git a/webalizer-2.23-08/dns_resolv.o b/webalizer-2.23-08/dns_resolv.o new file mode 100644 index 0000000000000000000000000000000000000000..357970bab0045e713135fb24ca06223ebda1b40b GIT binary patch literal 21320 zcmb_j3wTu3wLX­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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/graphs.c b/webalizer-2.23-08/graphs.c new file mode 100644 index 0000000..7c12754 --- /dev/null +++ b/webalizer-2.23-08/graphs.c @@ -0,0 +1,903 @@ +/* + graphs.c - produces graphs used by the Webalizer + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#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;i28) + { + /* 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; i2) gdImageRectangle(im, x1, y1, x2, 232, black); + } + + /* files */ + for (i=s_mth; i2) gdImageRectangle(im, x1, y1, x2, 232, black); + } + + /* pages */ + for (i=s_mth; i2) gdImageRectangle(im, x1, y1, x2, 232, black); + } + + maxval=0; + for (i=s_mth; i 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; i2) gdImageRectangle(im, x1, y1, x2, 127, black); + } + + /* sites */ + for (i=s_mth; i2) gdImageRectangle(im, x1, y1, x2, 127, black); + } + + fmaxval=0.0; + for (i=s_mth; i 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; i2) 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 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 maxval) maxval = data1[i]; /* get max val */ + if (data2[i] > maxval) maxval = data2[i]; + if (data3[i] > maxval) maxval = data3[i]; + } + if (maxval <= 0) maxval = 1; + sprintf(maxvaltxt, "%llu", maxval); + gdImageStringUp(im, gdFontSmall, 8, 26+(strlen(maxvaltxt)*6), + (unsigned char *)maxvaltxt, black); + + if (graph_legend) /* print color coded legends? */ + { + /* Pages/Files/Hits Legend */ + s = ( i=(strlen(msg_h_pages)*6) )+ + ( j=(strlen(msg_h_files)*6) )+ + ( strlen(msg_h_hits)*6 )+ 52; + gdImageStringUp(im,gdFontSmall,494,s, + (unsigned char *)msg_h_pages,dkgrey); + gdImageStringUp(im,gdFontSmall,493,s-1, + (unsigned char *)msg_h_pages,PAGECOLOR); + gdImageStringUp(im,gdFontSmall,494,s-i-3,(unsigned char *)"/",dkgrey); + gdImageStringUp(im,gdFontSmall,493,s-i-4,(unsigned char *)"/",black); + gdImageStringUp(im,gdFontSmall,494,s-i-12, + (unsigned char *)msg_h_files,dkgrey); + gdImageStringUp(im,gdFontSmall,493,s-i-13, + (unsigned char *)msg_h_files,FILECOLOR); + gdImageStringUp(im,gdFontSmall,494,s-i-j-15,(unsigned char *)"/",dkgrey); + gdImageStringUp(im,gdFontSmall,493,s-i-j-16,(unsigned char *)"/",black); + gdImageStringUp(im,gdFontSmall,494,s-i-j-24, + (unsigned char *)msg_h_hits,dkgrey); + gdImageStringUp(im,gdFontSmall,493,s-i-j-25, + (unsigned char *)msg_h_hits,HITCOLOR); + } + + /* data1 */ + for (i=0; i<24; i++) + { + percent = ((float)data1[i] / (float)maxval); /* percent of 100% */ + if (percent <= 0.0) continue; + x1 = 29 + (i*19); + x2 = x1 + 10; + y1 = 232 - (percent * 203); + gdImageFilledRectangle(im, x1, y1, x2, 232, HITCOLOR); + gdImageRectangle(im, x1, y1, x2, 232, black); + } + + /* data2 */ + for (i=0; i<24; i++) + { + percent = ((float)data2[i] / (float)maxval); /* percent of 100% */ + if (percent <= 0.0) continue; + x1 = 32 + (i*19); + x2 = x1 + 10; + y1 = 232 - (percent * 203); + gdImageFilledRectangle(im, x1, y1, x2, 232, FILECOLOR); + gdImageRectangle(im, x1, y1, x2, 232, black); + } + + /* data3 */ + for (i=0; i<24; i++) + { + percent = ((float)data3[i] / (float)maxval); /* percent of 100% */ + if (percent <= 0.0) continue; + x1 = 35 + (i*19); + x2 = x1 + 10; + y1 = 232 - (percent * 203); + gdImageFilledRectangle(im, x1, y1, x2, 232, PAGECOLOR); + gdImageRectangle(im, x1, y1, x2, 232, black); + } + + /* stat the file */ + if ( !(lstat(fname, &out_stat)) ) + { + /* check if the file a symlink */ + if ( S_ISLNK(out_stat.st_mode) ) + { + if (verbose) + fprintf(stderr,"%s %s (symlink)\n",msg_no_open,fname); + return(EBADF); + } + } + + /* save PNG image */ + if ((out = fopen(fname, "wb")) != NULL) + { + gdImagePng(im, out); + fclose(out); + } + /* deallocate memory */ + gdImageDestroy(im); + + return (0); +} + +/*****************************************************************/ +/* */ +/* PIE_CHART - draw a pie chart (10 data items max) */ +/* */ +/*****************************************************************/ + +int pie_chart(char *fname, char *title, u_int64_t t_val, + u_int64_t data1[], char *legend[]) +{ + int i,x,percent,y=47; + double s_arc=0.0; + int purple_or_pie1, ltgreen_or_pie2, ltpurple_or_pie3, brown_or_pie4; + int r, g, b; + char buffer[128]; + + struct pie_data gdata; + + /* init graph and colors */ + init_graph(title,512,300); + r=getred(pie_color1); g=getgreen(pie_color1); b=getblue(pie_color1); + purple_or_pie1 = gdImageColorAllocate(im, r, g, b); + r=getred(pie_color2); g=getgreen(pie_color2); b=getblue(pie_color2); + ltgreen_or_pie2 = gdImageColorAllocate(im, r, g, b); + r=getred(pie_color3); g=getgreen(pie_color3); b=getblue(pie_color3); + ltpurple_or_pie3= gdImageColorAllocate(im, r, g, b); + r=getred(pie_color4); g=getgreen(pie_color4); b=getblue(pie_color4); + brown_or_pie4 = gdImageColorAllocate(im, r, g, b); + + /* do the circle... */ + gdImageArc(im, CX, CY, XRAD, YRAD, 0, 360, black); + gdImageArc(im, CX, CY+10, XRAD-2, YRAD-2, 2, 178, black); + gdImageFillToBorder(im, CX, CY+(YRAD/2)+1, black, black); + + /* slice the pie */ + gdata=*calc_arc(0.0,0.0); + gdImageLine(im,CX,CY,gdata.x,gdata.y,black); /* inital line */ + + for (i=0;i<10;i++) /* run through data array */ + { + if ((data1[i]!=0)&&(s_arc<1.0)) /* make sure valid slice */ + { + percent=(((double)data1[i]/t_val)+0.005)*100.0; + if (percent<1) break; + + if (s_arc+((double)percent/100.0)>=1.0) + { + gdata=*calc_arc(s_arc,1.0); + s_arc=1.0; + } + else + { + gdata=*calc_arc(s_arc,s_arc+((double)percent/100.0)); + s_arc+=(double)percent/100.0; + } + + gdImageLine(im, CX, CY, gdata.x, gdata.y, black); + gdImageFill(im, gdata.mx, gdata.my, i+5); + + snprintf(buffer,sizeof(buffer),"%s (%d%%)",legend[i], percent); + x=480-(strlen(buffer)*7); + gdImageString(im,gdFontMediumBold, x+1, y+1, + (unsigned char *)buffer, black); + gdImageString(im,gdFontMediumBold, x, y, + (unsigned char *)buffer, i+5); + y+=20; + } + } + + if (s_arc < 1.0) /* anything left over? */ + { + gdata=*calc_arc(s_arc,1.0); + + gdImageFill(im, gdata.mx, gdata.my, white); + snprintf(buffer,sizeof(buffer),"%s (%d%%)", + msg_h_other,100-(int)(s_arc*100)); + x=480-(strlen(buffer)*7); + gdImageString(im,gdFontMediumBold, x+1, y+1, + (unsigned char *)buffer, black); + gdImageString(im,gdFontMediumBold, x, y, + (unsigned char *)buffer, white); + } + + /* stat the file */ + if ( !(lstat(fname, &out_stat)) ) + { + /* check if the file a symlink */ + if ( S_ISLNK(out_stat.st_mode) ) + { + if (verbose) + fprintf(stderr,"%s %s (symlink)\n",msg_no_open,fname); + return(EBADF); + } + } + + /* save PNG image */ + if ((out = fopen(fname, "wb")) != NULL) + { + gdImagePng(im, out); + fclose(out); + } + /* deallocate memory */ + gdImageDestroy(im); + + return (0); +} + +/*****************************************************************/ +/* */ +/* CALC_ARC - generate x,y coordinates for pie chart */ +/* */ +/*****************************************************************/ + +struct pie_data *calc_arc(float min, float max) +{ + static struct pie_data data; + double d; + + /* Calculate max line */ + d=max; + data.x=cos(d*(2*PI))*((XRAD-2)/2)+CX; + data.y=sin(d*(2*PI))*((YRAD-2)/2)+CY; + /* Now get mid-point */ + d=((min+max)/2); + data.mx=cos(d*(2*PI))*(XRAD/3)+CX; + data.my=sin(d*(2*PI))*(YRAD/3)+CY; + return &data; +} + +/*****************************************************************/ +/* */ +/* INIT_GRAPH - initalize graph and draw borders */ +/* */ +/*****************************************************************/ + +void init_graph(char *title, int xsize, int ysize) +{ + int i, r, g, b; + + im = gdImageCreate(xsize,ysize); + + /* allocate color maps, background color first (grey) */ + grey = gdImageColorAllocate(im, 192, 192, 192); + dkgrey = gdImageColorAllocate(im, 128, 128, 128); + black = gdImageColorAllocate(im, 0, 0, 0); + white = gdImageColorAllocate(im, 255, 255, 255); + blue = gdImageColorAllocate(im, 0, 0, 255); + r=getred(hit_color); g=getgreen(hit_color); b=getblue(hit_color); + hit_or_green = gdImageColorAllocate(im, r, g, b); + r=getred(site_color); g=getgreen(site_color); b=getblue(site_color); + site_or_orange = gdImageColorAllocate(im, r, g, b); + r=getred(file_color); g=getgreen(file_color); b=getblue(file_color); + file_or_blue = gdImageColorAllocate(im, r, g, b); + r=getred(kbyte_color); g=getgreen(kbyte_color); b=getblue(kbyte_color); + kbyte_or_red = gdImageColorAllocate(im, r, g, b); + r=getred(page_color); g=getgreen(page_color); b=getblue(page_color); + page_or_cyan = gdImageColorAllocate(im, r, g, b); + r=getred(visit_color); g=getgreen(visit_color); b=getblue(visit_color); + visit_or_yellow = gdImageColorAllocate(im, r, g, b); + + /* black outside border */ + gdImageRectangle(im, 0, 0, xsize-1, ysize-1, black); + + /* do shadow effect (bevel) border */ + for (i=1; i<5 ;i++) + { + gdImageLine(im, i, i, xsize-i-2, i, white); + gdImageLine(im, i, i, i, ysize-i-2, white); + gdImageLine(im, i+1, ysize-i-1, xsize-i-1, ysize-i-1, dkgrey); + gdImageLine(im, xsize-i-1, i+1, xsize-i-1, ysize-i-1, dkgrey); + } + + /* generic inside shadow box */ + gdImageRectangle(im, 20, 25, xsize-21, ysize-21, black); + gdImageRectangle(im, 19, 24, xsize-22, ysize-22, white); + + /* display the graph title */ + gdImageString(im, gdFontMediumBold, 20, 8, + (unsigned char *)title, blue); + + return; +} + +/****************************************************************/ +/* */ +/* ASHEX2INT - ASCII HEX TO INT CONVERTER */ +/* */ +/****************************************************************/ + +int ashex2int(char *str) +{ + /* returns base-10 integer value from a 2 ASCII hex number */ + return from_hex(str[1])+(from_hex(str[0])*16); +} diff --git a/webalizer-2.23-08/graphs.h b/webalizer-2.23-08/graphs.h new file mode 100644 index 0000000..b75daa5 --- /dev/null +++ b/webalizer-2.23-08/graphs.h @@ -0,0 +1,10 @@ +#ifndef _GRAPHS_H +#define _GRAPHS_H + +extern int month_graph6(char *, char *, int, int, u_int64_t *, + u_int64_t *, u_int64_t *, double *, u_int64_t *, u_int64_t *); +extern int year_graph6x(char *, char *, struct hist_rec *); +extern int day_graph3(char *, char *, u_int64_t *, u_int64_t *, u_int64_t *); +extern int pie_chart(char *, char *, u_int64_t, u_int64_t *, char **); + +#endif /* _GRAPHS_H */ diff --git a/webalizer-2.23-08/graphs.o b/webalizer-2.23-08/graphs.o new file mode 100644 index 0000000000000000000000000000000000000000..c7f87a8724f7008f5562e76392837ffc10a9714f GIT binary patch literal 43280 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

qd7S5pVJ1>`SjK8hjw;c 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/hashtab.c b/webalizer-2.23-08/hashtab.c new file mode 100644 index 0000000..814e096 --- /dev/null +++ b/webalizer-2.23-08/hashtab.c @@ -0,0 +1,1254 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include /* normal stuff */ +#include +#include + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* some need for uint* */ +#ifdef HAVE_STDINT_H +#include +#endif + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#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 */ + +/*********************************************/ +/* 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) + { + 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 + { + 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; + } + return 0; + } + } + cptr = cptr->next; + } + /* not found... */ + if ( (nptr = new_hnode(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->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; + } + } + 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;inext; + free (aptr->string); /* free hostname string space */ + free (aptr); /* free hostname structure */ + aptr = temp; + } + htab[i]=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;inext; + 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 + { + 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; + } + 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;inext; + free (aptr->string); + free (aptr); + aptr = temp; + } + htab[i]=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;inext; + 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;inext; + 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;inext; + 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;inext; + 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;iflag!=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;iflag!=OBJ_GRP) tot+=hptr->visit; + hptr=hptr->next; + } + } + return tot; +} + +#ifdef USE_OLDHASH +/*********************************************/ +/* HASH - return hash value for string */ +/*********************************************/ + +unsigned int hash(char *str) +{ + uint32_t hashval=0; + + for (hashval = 0; *str != '\0'; str++) + hashval = *str + (hashval << 5) - hashval; + + return hashval % MAXHASH; +} + +#else /* USE_OLDHASH */ +/*********************************************/ +/* HASH (SuperFastHash by Paul Hsieh) */ +/*********************************************/ + +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif + +unsigned int hash(char *str) +{ + int len=strlen(str); + uint32_t hash = len, tmp; + int rem; + + if (len <= 0 || str == NULL) return 0; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (;len > 0; len--) + { + hash += get16bits (str); + tmp = (get16bits (str+2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + str += 2*sizeof (uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) + { + case 3: hash += get16bits (str); + hash ^= hash << 16; + hash ^= str[sizeof (uint16_t)] << 18; + hash += hash >> 11; + break; + case 2: hash += get16bits (str); + hash ^= hash << 11; + hash += hash >> 17; + break; + case 1: hash += *str; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash % MAXHASH; +} +#endif /* USE_OLDHASH */ diff --git a/webalizer-2.23-08/hashtab.h b/webalizer-2.23-08/hashtab.h new file mode 100644 index 0000000..df5d3cf --- /dev/null +++ b/webalizer-2.23-08/hashtab.h @@ -0,0 +1,107 @@ +#ifndef _HASHTAB_H +#define _HASHTAB_H + +typedef struct hnode *HNODEPTR; /* site node (host) pointer */ +typedef struct unode *UNODEPTR; /* url node pointer */ +typedef struct rnode *RNODEPTR; /* referrer node */ +typedef struct anode *ANODEPTR; /* user agent node pointer */ +typedef struct snode *SNODEPTR; /* Search string node pointer */ +typedef struct inode *INODEPTR; /* user (ident) node pointer */ +#ifdef USE_DNS +typedef struct dnode *DNODEPTR; /* DNS hash table node struct */ +#endif + +/* Object flags */ +#define OBJ_REG 0 /* Regular object */ +#define OBJ_HIDE 1 /* Hidden object */ +#define OBJ_GRP 2 /* Grouped object */ + +#ifdef USE_DNS +struct dnode { char *string; /* DNS node hash table struct */ + struct sockaddr_storage addr; + int addrlen; + struct dnode *llist; + struct dnode *next; }; +#endif + +struct hnode { char *string; /* host hash table structure */ + int flag; + u_int64_t count; + u_int64_t files; + u_int64_t visit; /* visit information */ + u_int64_t tstamp; + char *lasturl; + double xfer; + struct hnode *next; }; + +struct unode { char *string; /* url hash table structure */ + int flag; /* Object type (REG, HIDE, GRP) */ + u_int64_t count; /* requests counter */ + u_int64_t files; /* files counter */ + u_int64_t entry; /* entry page counter */ + u_int64_t exit; /* exit page counter */ + double xfer; /* xfer size in bytes */ + struct unode *next; }; /* pointer to next node */ + +struct rnode { char *string; /* referrer hash table struct */ + int flag; + u_int64_t count; + struct rnode *next; }; + +struct anode { char *string; + int flag; + u_int64_t count; + struct anode *next; }; + +struct snode { char *string; /* search string struct */ + u_int64_t count; + struct snode *next; }; + +struct inode { char *string; /* host hash table struct */ + int flag; + u_int64_t count; + u_int64_t files; + u_int64_t visit; + u_int64_t tstamp; + double xfer; + struct inode *next; }; + +extern HNODEPTR sm_htab[MAXHASH]; /* hash tables */ +extern HNODEPTR sd_htab[MAXHASH]; +extern UNODEPTR um_htab[MAXHASH]; /* for hits, sites, */ +extern RNODEPTR rm_htab[MAXHASH]; /* referrers and agents... */ +extern ANODEPTR am_htab[MAXHASH]; +extern SNODEPTR sr_htab[MAXHASH]; /* search string table */ +extern INODEPTR im_htab[MAXHASH]; /* ident table (username) */ +#ifdef USE_DNS +extern DNODEPTR host_table[MAXHASH]; /* DNS resolver table */ +#endif + +extern int put_hnode(char *, int, u_int64_t, u_int64_t, double, + u_int64_t *, u_int64_t, u_int64_t, char *, HNODEPTR *); +extern int put_unode(char *, int, u_int64_t, double, u_int64_t *, + u_int64_t, u_int64_t, UNODEPTR *); +extern int put_inode(char *, int, u_int64_t, u_int64_t, double, + u_int64_t *, u_int64_t, u_int64_t, INODEPTR *); +extern int put_rnode(char *, int, u_int64_t, u_int64_t *, RNODEPTR *); +extern int put_anode(char *, int, u_int64_t, u_int64_t *, ANODEPTR *); +extern int put_snode(char *, u_int64_t, SNODEPTR *); + +#ifdef USE_DNS +extern int put_dnode(char *, void *, int, DNODEPTR *); +extern void del_dlist(DNODEPTR *); +#endif + +extern void del_htabs(); /* delete hash tables */ +extern void del_hlist(HNODEPTR *); /* delete host htab */ +extern void del_ulist(UNODEPTR *); /* delete url htab */ +extern void del_rlist(RNODEPTR *); /* delete referrer htab */ +extern void del_alist(ANODEPTR *); /* delete host htab */ +extern void del_slist(SNODEPTR *); /* delete host htab */ +extern void del_ilist(INODEPTR *); /* delete host htab */ + +extern void month_update_exit(u_int64_t); +extern u_int64_t tot_visit(HNODEPTR *); +extern char *find_url(char *); + +#endif /* _HASHTAB_H */ diff --git a/webalizer-2.23-08/hashtab.o b/webalizer-2.23-08/hashtab.o new file mode 100644 index 0000000000000000000000000000000000000000..994f42b49d5b1bd30091ef4113a1821dedf617ae GIT binary patch literal 18728 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/install-sh b/webalizer-2.23-08/install-sh new file mode 100755 index 0000000..ebc6691 --- /dev/null +++ b/webalizer-2.23-08/install-sh @@ -0,0 +1,250 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/webalizer-2.23-08/lang.h b/webalizer-2.23-08/lang.h new file mode 100644 index 0000000..88a3ecc --- /dev/null +++ b/webalizer-2.23-08/lang.h @@ -0,0 +1,182 @@ +#ifndef _LANG_H +#define _LANG_H + +extern char *language ; +extern char *langcode ; + +extern char *msg_records ; +extern char *msg_addresses; +extern char *msg_ignored ; +extern char *msg_bad ; +extern char *msg_in ; +extern char *msg_seconds ; + +extern char *msg_log_err ; +extern char *msg_log_use ; +extern char *msg_dir_err ; +extern char *msg_dir_use ; +extern char *msg_cur_dir ; +extern char *msg_hostname; +extern char *msg_ign_hist; +extern char *msg_no_hist ; +extern char *msg_get_hist; +extern char *msg_put_hist; +extern char *msg_hist_err; +extern char *msg_bad_hist; +extern char *msg_bad_conf; +extern char *msg_bad_key ; +extern char *msg_bad_date; +extern char *msg_ign_nscp; +extern char *msg_bad_rec ; +extern char *msg_no_vrec ; +extern char *msg_gen_rpt ; +extern char *msg_gen_sum ; +extern char *msg_get_data; +extern char *msg_put_data; +extern char *msg_no_data ; +extern char *msg_bad_data; +extern char *msg_data_err; +extern char *msg_dup_data; + +extern char *msg_dns_nocf; +extern char *msg_dns_nodb; +extern char *msg_dns_nolk; +extern char *msg_dns_usec; +extern char *msg_dns_rslf; +extern char *msg_dns_none; +extern char *msg_dns_abrt; + +extern char *msg_geo_open; +extern char *msg_geo_use ; +extern char *msg_geo_nolu; +extern char *msg_geo_dflt; + +extern char *msg_nomem_ts; +extern char *msg_nomem_tr; +extern char *msg_nomem_tu; +extern char *msg_nomem_tc; +extern char *msg_nomem_ta; +extern char *msg_nomem_tsr; +extern char *msg_nomem_ti; +extern char *msg_nomem_dh; +extern char *msg_nomem_mh; +extern char *msg_nomem_u ; +extern char *msg_nomem_a ; +extern char *msg_nomem_r ; +extern char *msg_nomem_sc; +extern char *msg_nomem_i ; + +extern char *msg_big_rec ; +extern char *msg_big_host; +extern char *msg_big_date; +extern char *msg_big_req ; +extern char *msg_big_ref ; +extern char *msg_big_user; +extern char *msg_big_one ; + +extern char *msg_no_open ; + +extern char *h_usage1 ; +extern char *h_usage2 ; +extern char *h_msg[]; + +/* HTML Strings */ + +extern char *msg_hhdr_sp ; +extern char *msg_hhdr_gt ; + +extern char *msg_main_us ; +extern char *msg_main_per; +extern char *msg_main_sum; +extern char *msg_main_da ; +extern char *msg_main_mt ; + +extern char *msg_hmth_du ; +extern char *msg_hmth_hu ; + +extern char *msg_h_by ; +extern char *msg_h_avg ; +extern char *msg_h_max ; +extern char *msg_h_total ; +extern char *msg_h_totals; +extern char *msg_h_day ; +extern char *msg_h_mth ; +extern char *msg_h_hour ; +extern char *msg_h_hits ; +extern char *msg_h_pages ; +extern char *msg_h_visits; +extern char *msg_h_files ; +extern char *msg_h_sites ; +extern char *msg_h_xfer ; +extern char *msg_h_hname ; +extern char *msg_h_url ; +extern char *msg_h_agent ; +extern char *msg_h_ref ; +extern char *msg_h_ctry ; +extern char *msg_h_search; +extern char *msg_h_uname ; + +extern char *msg_hlnk_ds ; +extern char *msg_hlnk_hs ; +extern char *msg_hlnk_u ; +extern char *msg_hlnk_s ; +extern char *msg_hlnk_a ; +extern char *msg_hlnk_c ; +extern char *msg_hlnk_r ; +extern char *msg_hlnk_en ; +extern char *msg_hlnk_ex ; +extern char *msg_hlnk_sr ; +extern char *msg_hlnk_i ; + +extern char *msg_mtot_ms ; +extern char *msg_mtot_th ; +extern char *msg_mtot_tf ; +extern char *msg_mtot_tx ; +extern char *msg_mtot_us ; +extern char *msg_mtot_ur ; +extern char *msg_mtot_ua ; +extern char *msg_mtot_uu ; +extern char *msg_mtot_ui ; +extern char *msg_mtot_mhd; +extern char *msg_mtot_mhh; +extern char *msg_mtot_mfd; +extern char *msg_mtot_mpd; +extern char *msg_mtot_msd; +extern char *msg_mtot_mvd; +extern char *msg_mtot_mkd; +extern char *msg_mtot_rc ; + +extern char *msg_dtot_ds ; + +extern char *msg_htot_hs ; + +extern char *msg_ctry_use; + +extern char *msg_top_top ; +extern char *msg_top_of ; +extern char *msg_top_s ; +extern char *msg_top_u ; +extern char *msg_top_r ; +extern char *msg_top_a ; +extern char *msg_top_c ; +extern char *msg_top_en ; +extern char *msg_top_ex ; +extern char *msg_top_sr ; +extern char *msg_top_i ; +extern char *msg_v_sites ; +extern char *msg_v_urls ; +extern char *msg_v_refs ; +extern char *msg_v_agents; +extern char *msg_v_search; +extern char *msg_v_users ; + +extern char *msg_title ; +extern char *msg_h_other ; + +extern char *s_month[12]; +extern char *l_month[12]; + +extern struct response_code response[]; +extern struct country_code ctry[]; + +#endif /* _LANG_H */ diff --git a/webalizer-2.23-08/lang/webalizer_lang.albanian b/webalizer-2.23-08/lang/webalizer_lang.albanian new file mode 100644 index 0000000..76ce297 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.albanian @@ -0,0 +1,616 @@ +/* + webalizer_lang.albanian + + Kartelë Mbulimi Gjuhësor për Shqipen për Webalizer V2.0x. + 06-Mar-2006 nga Besnik Bleta besnik@programeshqip.org) + 12-May-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +/* char *language = "Shqip"; */ +char *language = "Albanian"; +char *langcode = "sq"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "regjistrime"; +char *msg_addresses="vendndodhje"; +char *msg_ignored = "shpërfillur"; +char *msg_bad = "i dëmtuar"; +char *msg_in = "në"; +char *msg_seconds = "sekonda"; + +/* mesazhi gabimi gjatë rregullimit dhe ecurisë */ +char *msg_log_err = "Gabim: S'hap dot kartelë regjistrimesh"; +char *msg_log_use = "Po përdor kartelë regjistrimesh"; +char *msg_dir_err = "Gabim: S'ndryshoj dot drejtorinë në"; +char *msg_dir_use = "Po krijoj përfundimet në"; +char *msg_cur_dir = "drejtorinë e çastit"; +char *msg_hostname= "Strehëemri për raportime është"; +char *msg_ign_hist= "Po shpërfill historikun e mëparshëm..."; +char *msg_no_hist = "Nuk u gjet kartelë historiku..."; +char *msg_get_hist= "Po lexoj kartelë historiku..."; +char *msg_put_hist= "Po ruaj të dhëna historiku..."; +char *msg_hist_err= "Gabim: I pazoti të shkruaj kartelë historiku"; +char *msg_bad_hist= "Gabim: Po shpërfill regjistrime të pavlefshëm historiku"; +char *msg_bad_conf= "Gabim: I pazoti të hap kartelë formësimi"; +char *msg_bad_key = "Kujdes: Fjalëkyç i pavlefshëm"; +char *msg_bad_date= "Gabim: Po anashkaloj regjistrime (datë e gabuar)"; +char *msg_ign_nscp= "Po anashkaloj regjistrim titujsh Netscape"; +char *msg_bad_rec = "Po anashkaloj regjistrim të dëmtuar"; +char *msg_no_vrec = "Nuk u gjetën regjistrime të vlefshëm!"; +char *msg_gen_rpt = "Po prodhoj raport për"; +char *msg_gen_sum = "Po prodhoj raport përmbledhës"; +char *msg_get_data= "Po lexoj të dhëna të mëparshme xhirimi.."; +char *msg_put_data= "Po ruaj të dhëna të tanishme xhirimi..."; +char *msg_no_data = "nuk u gjetën të dhëna të mëparshme xhirimi..."; +char *msg_bad_data= "Gabim: I pazoti të rikthej të dhëna xhirimi"; +char *msg_data_err= "Gabim: I pazoti të ruaj të dhëna të tanishme xhirimi"; +char *msg_dup_data= "Kujdes: Ka gjasa të jenë gjendur të dhëna të përsëritura"; + +/* Gjëra DNS */ +char *msg_dns_nocf= "Nuk u tregua kartelë fshehtine, po e ndërpres..."; +char *msg_dns_nodb= "Error: I pazoti të hap kartelë fshehtine DNS"; +char *msg_dns_nolk= "Error: I pazoti të kyç kartelë fshehtine DNS"; +char *msg_dns_usec= "Po përdor kartelë fshehtine DNS"; +char *msg_dns_rslv= "Kërkim DNS"; +char *msg_dns_none= "Asnjë për t'u përpunuar"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* gabime sigurimi kujtese */ +char *msg_nomem_ts= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua \"Site\"-e Kryesues!"; +char *msg_nomem_tr= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Përmendësa Kryesues!"; +char *msg_nomem_tu= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua URL-ra Kryesuese!"; +char *msg_nomem_tc= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Vende Kryesues!"; +char *msg_nomem_ta= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Agjentë Kryesues Përdoruesi!"; +char *msg_nomem_tsr="Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Vargje Kryesuese Kërkimi!"; +char *msg_nomem_ti= "Nuk siguroj dot kujtesë të mjaftueshme, U çaktivizua Emra Kryesues Përdoruesi!"; +char *msg_nomem_dh= "Gabim gjatë shtimit të nyjes për strehë (përditë), po e anashkaloj"; +char *msg_nomem_mh= "Gabim gjatë shtimit të nyjes për strehë (çdo muaj), po e anashkaloj"; +char *msg_nomem_u = "Gabim gjatë shtimit të nyjes për URL, po e anashkaloj"; +char *msg_nomem_a = "Gabim gjatë shtimit të nyjes për Agjent Përdoruesi, po e anashkaloj"; +char *msg_nomem_r = "Gabim gjatë shtimit të nyjes për Përmendës, po e anashkaloj"; +char *msg_nomem_sc= "Gabim gjatë shtimit të nyjes për Varg Kërkimi, po e anashkaloj"; +char *msg_nomem_i = "Gabim gjatë shtimit të nyjes për Emër përdoruesi, po e anashkaloj"; + +/* gabime zërash regjistrimi */ +char *msg_big_rec = "Gabim: Po anashkolaj regjistrim më të madh se ç'duhet"; +char *msg_big_host= "Kujdes: Po cungoj emër strehe më të madh se ç'duhet"; +char *msg_big_date= "Kujdes: Po cungoj kuti date më të madhe se ç'duhet"; +char *msg_big_req = "Kujdes: Po cungoj kuti kërkese më të madhe se ç'duhet"; +char *msg_big_ref = "Kujdes: Po cungoj kuti përmendësi më të madhe se ç'duhet"; +char *msg_big_user= "Kujdes: Po cungoj emër përdoruesi më të madh se ç'duhet"; +char *msg_big_one = "Kujdes: Vargu tejkalon masën e lejuar"; + +/* gabime të ndryshëm */ +char *msg_no_open = "Gabim: I pazoti të hap kartelën"; + +/* Shfaqje e ndihmës... */ +char *h_usage1 = "Përdorimi"; +char *h_usage2 = "[mundësi] [kartelë regjistrimi]"; +char *h_msg[]= { + "-h = shtyp këtë mesazh ndihme" , + "-V = shtyp të dhëna versioni" , + "-v = be verbose" , + "-d = shtyp të dhëna shtesë diagnostikimi" , + "-F type = Tip regjistrimi. tipi= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = shpërfill kartelë historiku" , + "-p = ruaj gjendje (shtues)" , + "-b = ignore state (incremental)" , + "-q = pa mesazhe informues" , + "-Q = pa _ASNJË_ mesazh" , + "-Y = pa graf vendesh" , + "-G = pa graf të përorshëm" , + "-H = pa statistika të përorshme" , + "-L = pa legjenda me ngjyra për grafin" , + "-l num = përdor në graf rreshta sfondi numrash", + "-m num = Vlerë skadimi vizite (sekonda)" , + "-T = print timing information" , + "-c file = përdor kartelën e formësimit 'kartelë'", + "-n name = emër strehe për t'u përdorur" , + "-o dir = drejtori për t'u përdorur për përfundime", + "-t name = titull raporti 'emër'" , + "-a name = fshih agjentin e përdoruesi 'emër'" , + "-r name = fshih përmendësin 'emër'" , + "-s name = fshih \"site\"-in 'emër'" , + "-u name = fshih URL-në 'emër'" , + "-x name = Përdor zgjerim emër kartelash 'emër'", + "-O name = Omit page 'name'" , + "-P name = Zgjerim tipi faqesh 'emër'" , + "-I name = Alias treguesi 'emër'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Shfaq num agjentësh kryesues" , + "-C num = Shfaq num vendesh kryesuese" , + "-R num = Shfaq num përmendësish kryesues" , + "-S num = Shfaq num \"site\"-esh kryesues" , + "-U num = Shfaq num URL-sh kryesuese" , + "-e num = Shfaq num Faqesh Fillimi kryesuese" , + "-E num = Shfaq num Faqesh Daljeje kryesues" , + "-g num = Grupo Përkatësitë në 'num' nivele" , + "-X = Fshih \"site\"-e individualë" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Përdor kartelë fshehtine DNS 'emër'" , + "-N num = Numër procesesh DNS (0=çaktivizoje)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoIP database 'emër'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'emër'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* Vargje HTML */ +/* */ +/* Këta vargje përdoren si pjesë e përfundimit HTML të prodhuar nga */ +/* Webalizer-i. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Periudhë Përmbledhëse"; +char *msg_hhdr_gt = "Prodhuar"; + +/* main index strings */ +char *msg_main_us = "Përmbledhje përdorimi për"; +/* char *msg_main_per= "12 Muajt e Fundit"; */ +char *msg_main_per= "Përmbledhje sipas Muajsh"; +char *msg_main_sum= "Përmbledhje sipas Muajsh"; +char *msg_main_da = "Mes. Ditore"; +char *msg_main_mt = "Tërësi Përmujore"; + +/* month HTML page strings */ +char *msg_hmth_du = "Përdorim ditor për"; +char *msg_hmth_hu = "Përdorim i përorshëm për"; + +/* vargje titujsh tabelash */ +char *msg_h_by = "Nga"; +char *msg_h_avg = "Mes"; +char *msg_h_max = "Maks"; +char *msg_h_total = "Gjithsej"; +char *msg_h_totals= "Tërësi"; +char *msg_h_day = "Ditë"; +char *msg_h_mth = "Muaj"; +char *msg_h_hour = "Orë"; +char *msg_h_hits = "Hapje"; +char *msg_h_pages = "Faqe"; +char *msg_h_visits= "Vizita"; +char *msg_h_files = "Kartela"; +char *msg_h_sites = "\"Site\"-e"; +char *msg_h_xfer = "KBajt"; +char *msg_h_hname = "Emërstrehë"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Agjent Përdoruesi"; +char *msg_h_ref = "Përmendës"; +char *msg_h_ctry = "Vend"; +char *msg_h_search= "Varg Kërkimesh"; +char *msg_h_uname = "Emër Përdoruesi"; + +/* lidhje përgjatë kryesh faqeje */ +char *msg_hlnk_ds = "Statistika Ditore"; +char *msg_hlnk_hs = "Statistika çdo Orë"; +char *msg_hlnk_u = "URL-ra"; +char *msg_hlnk_s = "\"Site\"-e"; +char *msg_hlnk_a = "Agjentë"; +char *msg_hlnk_c = "Vende"; +char *msg_hlnk_r = "Përmendësa"; +char *msg_hlnk_en = "Hyrje"; +char *msg_hlnk_ex = "Dalje"; +char *msg_hlnk_sr = "Kërkim"; +char *msg_hlnk_i = "Përdoruesa"; + +/* tabelë tërësie mujore */ +char *msg_mtot_ms = "Statistika Mujore për"; +char *msg_mtot_th = "Hapje Gjithsej"; +char *msg_mtot_tf = "Kartela Gjithsej"; +char *msg_mtot_tx = "KBajt Gjithsej"; +char *msg_mtot_us = "\"Site\"-e Unikë Gjithsej"; +char *msg_mtot_ur = "Përmendësa Unikë Gjithsej"; +char *msg_mtot_ua = "Agjentë Unikë Përdoruesi Gjithsej"; +char *msg_mtot_uu = "URL Unike Gjithsej"; +char *msg_mtot_ui = "Emra Unikë përdoruesish Gjithsej"; +char *msg_mtot_mhd= "Hapje në Ditë"; +char *msg_mtot_mhh= "Hapje në Orë"; +char *msg_mtot_mfd= "Kartela në Ditë"; +char *msg_mtot_mpd= "Faqe në Ditë"; +char *msg_mtot_msd= "\"Site\"-e në Ditë"; +char *msg_mtot_mvd= "Vizita në Ditë"; +char *msg_mtot_mkd= "KBajt në Ditë"; +char *msg_mtot_rc = "Hapje sipas Kodi Përgjigjesh"; + +/* tabelë tërësie ditore */ +char *msg_dtot_ds = "Statistika Ditore për"; + +/* tabelë tërësie sipas orësh */ +char *msg_htot_hs = "Statistika të Përorshme për"; + +/* grafik sipas vendesh */ +char *msg_ctry_use= "Përdorim sipas Vendesh për"; + +/* tabela kryesimesh */ +/* Formatuar si "xxx kryesues e xxx Tërësisë së diçkaje" */ +char *msg_top_top = "Kryesues"; +char *msg_top_of = "për"; +char *msg_top_s = "\"Site\"-e Gjithsej"; +char *msg_top_u = "URL-ra Gjithsej"; +char *msg_top_r = "Përmendësa Gjithsej"; +char *msg_top_a = "Agjentë Përdoruesish Gjithsej"; +char *msg_top_c = "Vende Gjithsej"; +char *msg_top_en = "Faqe Hyrjesh Gjithsej"; +char *msg_top_ex = "Faqe Daljesh Gjithsej"; +char *msg_top_sr = "Vargje Kërkimesh Gjithsej"; +char *msg_top_i = "Emra përdoruesish Gjithsej"; +char *msg_v_sites = "Shihni Tërë \"Site\"-et"; +char *msg_v_urls = "Shihni Tërë URL-tës"; +char *msg_v_refs = "Shihni Tërë Përmendësit"; +char *msg_v_agents= "Shihni Tërë Agjentët e Përdoruesve"; +char *msg_v_search= "Shihni Tërë Vargjet e Kërkimeve"; +char *msg_v_users = "Shihni Tërë Emrat e përdoruesve"; + +/* emrat e shkurtër për muajt DUHET TË JENË 3 SHENJA si madhësi... pad if needed*/ +char *s_month[12]={ "Jan", "Shk", "Mar", + "Pri", "Maj", "Qer", + "Kor", "Gus", "Sht", + "Tet", "Nën", "Dhj"}; + +/* emra të gjatë muajsh - gjatësi çfarëdo */ +char *l_month[12]={ "Janar", "Shkurt", "Mars", "Prill", + "Maj", "Qershor", "Korrik", "Gusht", + "Shtator","Tetor", "Nëntor","Dhjetor"}; + +/* përshkrim kode përgjigjesh... renditja ËSHTË e rëndësishme! */ +struct response_code response[] = + { { "Kod përgjigjeje të papërcaktuar", 0 }, + { "Kod 100 - Vazhdo", 0 }, + { "Kod 101 - Po këmbehen Protokolle", 0 }, + { "Kod 200 - OK", 0 }, + { "Kod 201 - Krijuar", 0 }, + { "Kod 202 - Pranuar", 0 }, + { "Kod 203 - Informacion Jo Autoritativ", 0 }, + { "Kod 204 - Pa Përmbajtje", 0 }, + { "Kod 205 - Rimerr Përmbajtje", 0 }, + { "Kod 206 - Përmbajtje e Pjesshme", 0 }, + { "Kod 300 - Zgjedhje të Shumëfishta", 0 }, + { "Kod 301 - Ikur Përgjithmonë", 0 }, + { "Kod 302 - U gjet", 0 }, + { "Kod 303 - Shih Tjetër", 0 }, + { "Kod 304 - Pa Ndryshim", 0 }, + { "Kod 305 - Përdor Proxy", 0 }, + { "Kod 307 - Ikur Përkohësisht", 0 }, + { "Kod 400 - Kërkesë e Fabuar", 0 }, + { "Kod 401 - I paautorizuar", 0 }, + { "Kod 402 - Lipset Pagesë", 0 }, + { "Kod 403 - E ndaluar", 0 }, + { "Kod 404 - Nuk Gjendet", 0 }, + { "Kod 405 - Metodë e Palejuar", 0 }, + { "Kod 406 - E papranueshme", 0 }, + { "Kod 407 - Lipset Mirëfilltësim Proxy", 0 }, + { "Kod 408 - Skadim Kohe Kërkese", 0 }, + { "Kod 409 - Përplasje", 0 }, + { "Kod 410 - Ikur", 0 }, + { "Kod 411 - Gjatësi e Nevojshme", 0 }, + { "Kod 412 - Prakushti Dështoi", 0 }, + { "Kod 413 - Entitet Kërkese Shumë i Gjerë", 0 }, + { "Kod 414 - URI Kërkese Shumë I gjatë", 0 }, + { "Kod 415 - Tip I pambuluar Media", 0 }, + { "Kod 416 - U kërkua interval që s'mund të kënaqet", 0 }, + { "Kod 417 - Shpresa Nuk u Pwrmbush", 0 }, + { "Kod 500 - Gabim i Brendshëm Shërbyesi", 0 }, + { "Kod 501 - I pa vënë ende në jetë", 0 }, + { "Kod 502 - \"Gateway\" i Gabuar", 0 }, + { "Kod 503 - Shërbim jo i mundshëm", 0 }, + { "Kod 504 - Skadim Kohe \"Gateway\"-i", 0 }, + { "Kod 505 - Version HTTP i Pambuluar", 0 } }; + +char *msg_title = "Statistika Përdorimi për"; +char *msg_h_other = "Tjetër"; + +/* Kode Vendesh (dikur te ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "I paftilluar/I panjohur", 0,0,0 }, +{ IDX_3C('c','o','m'), "Tregtar (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Edukativ (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US, Qeveritar (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Ndërkombëtar (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US, Ushtarak (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Rrjet (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizëm Jofitimprurës (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Arpanet stil i vjetër (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Fushë Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "Emiratet e Bashkuar Arabë", 0,0,0 }, +{ IDX_2C('a','f'), "Afganistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua dhe Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguila", 0,0,0 }, +{ IDX_2C('a','l'), "Shqipëri", 0,0,0 }, +{ IDX_2C('a','m'), "Armeni", 0,0,0 }, +{ IDX_2C('a','n'), "Antilet Holandeze", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarktidë", 0,0,0 }, +{ IDX_2C('a','r'), "Argjentinë", 0,0,0 }, +{ IDX_2C('a','s'), "Samoa Amerikane", 0,0,0 }, +{ IDX_2C('a','t'), "Austri", 0,0,0 }, +{ IDX_2C('a','u'), "Australi", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaixhan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnjë dhe Hercegovinë", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgjikë", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bullgari", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrein", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivi", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Butan", 0,0,0 }, +{ IDX_2C('b','v'), "Ishulli Buve", 0,0,0 }, +{ IDX_2C('b','w'), "Botsvanë", 0,0,0 }, +{ IDX_2C('b','y'), "Bjellorusi", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Kanada", 0,0,0 }, +{ IDX_2C('c','c'), "Ishujt Kokos (Keeling)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Republika e Afrikës Qendrore", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Zvicër", 0,0,0 }, +{ IDX_2C('c','i'), "Bregu i Fildishtë", 0,0,0 }, +{ IDX_2C('c','k'), "Ishujt Kuk", 0,0,0 }, +{ IDX_2C('c','l'), "Kili", 0,0,0 }, +{ IDX_2C('c','m'), "Kamerun", 0,0,0 }, +{ IDX_2C('c','n'), "Kinë", 0,0,0 }, +{ IDX_2C('c','o'), "Kolombi", 0,0,0 }, +{ IDX_2C('c','r'), "Kosta Rika", 0,0,0 }, +{ IDX_2C('c','u'), "Kubë", 0,0,0 }, +{ IDX_2C('c','v'), "Kepi i Gjelbër", 0,0,0 }, +{ IDX_2C('c','x'), "Ishulli i Krishtlindjes", 0,0,0 }, +{ IDX_2C('c','y'), "Qipro", 0,0,0 }, +{ IDX_2C('c','z'), "Republika Çeke", 0,0,0 }, +{ IDX_2C('d','e'), "Gjermani", 0,0,0 }, +{ IDX_2C('d','j'), "Xhibuti", 0,0,0 }, +{ IDX_2C('d','k'), "Danimarkë", 0,0,0 }, +{ IDX_2C('d','m'), "Dominika", 0,0,0 }, +{ IDX_2C('d','o'), "Republika Dominikane", 0,0,0 }, +{ IDX_2C('d','z'), "Algjeri", 0,0,0 }, +{ IDX_2C('e','c'), "Ekuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estoni", 0,0,0 }, +{ IDX_2C('e','g'), "Egjipt", 0,0,0 }, +{ IDX_2C('e','h'), "Sahara Perëndimore", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spanjë", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopi", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlandë", 0,0,0 }, +{ IDX_2C('f','j'), "Fixhi", 0,0,0 }, +{ IDX_2C('f','k'), "Ishujt Folkland (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Mikronezi", 0,0,0 }, +{ IDX_2C('f','o'), "Ishujt Faroe", 0,0,0 }, +{ IDX_2C('f','r'), "Francë", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Britani e Madhe (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Gjeorgji", 0,0,0 }, +{ IDX_2C('g','f'), "Guajana Franceze", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Gana", 0,0,0 }, +{ IDX_2C('g','i'), "Gjibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Groenlanda", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadalupi", 0,0,0 }, +{ IDX_2C('g','q'), "Guinea Ekuatoriale", 0,0,0 }, +{ IDX_2C('g','r'), "Greqi", 0,0,0 }, +{ IDX_2C('g','s'), "Ishujt S. Jorgjia dhe S. Sandwich", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bisau", 0,0,0 }, +{ IDX_2C('g','y'), "Gujanë", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Ishujt Heard dhe McDonald", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Kroaci", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungari", 0,0,0 }, +{ IDX_2C('i','d'), "Indonezi", 0,0,0 }, +{ IDX_2C('i','e'), "Irlandë", 0,0,0 }, +{ IDX_2C('i','l'), "Izrael", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "Indi", 0,0,0 }, +{ IDX_2C('i','o'), "Territoret Britanike të Oqeanit Indian", 0,0,0 }, +{ IDX_2C('i','q'), "Irak", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Islandë", 0,0,0 }, +{ IDX_2C('i','t'), "Itali", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Xhamaika", 0,0,0 }, +{ IDX_2C('j','o'), "Jordani", 0,0,0 }, +{ IDX_2C('j','p'), "Japoni", 0,0,0 }, +{ IDX_2C('k','e'), "Kenia", 0,0,0 }, +{ IDX_2C('k','g'), "Kirgizstan", 0,0,0 }, +{ IDX_2C('k','h'), "Kamboxhia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Komoros", 0,0,0 }, +{ IDX_2C('k','n'), "Shën Kits dhe Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea (e Veriut)", 0,0,0 }, +{ IDX_2C('k','r'), "Korea (e Jugut)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuvajt", 0,0,0 }, +{ IDX_2C('k','y'), "Ishujt Kajman", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakistan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Liban", 0,0,0 }, +{ IDX_2C('l','c'), "Shën Luçia", 0,0,0 }, +{ IDX_2C('l','i'), "Lihtenshtejn", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesoto", 0,0,0 }, +{ IDX_2C('l','t'), "Lituani", 0,0,0 }, +{ IDX_2C('l','u'), "Luksemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libia", 0,0,0 }, +{ IDX_2C('m','a'), "Marok", 0,0,0 }, +{ IDX_2C('m','c'), "Monako", 0,0,0 }, +{ IDX_2C('m','d'), "Moldavi", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagaskar", 0,0,0 }, +{ IDX_2C('m','h'), "Ishujt Marshall", 0,0,0 }, +{ IDX_2C('m','k'), "Maqedoni", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Mianmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongoli", 0,0,0 }, +{ IDX_2C('m','o'), "Makao", 0,0,0 }, +{ IDX_2C('m','p'), "Ishujt e Marianës Veriore", 0,0,0 }, +{ IDX_2C('m','q'), "Martinikë", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritani", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauricius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldive", 0,0,0 }, +{ IDX_2C('m','w'), "Malaui", 0,0,0 }, +{ IDX_2C('m','x'), "Meksikë", 0,0,0 }, +{ IDX_2C('m','y'), "Malajzia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambik", 0,0,0 }, +{ IDX_2C('n','a'), "Namibi", 0,0,0 }, +{ IDX_2C('n','c'), "Kaledonia e Re", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Ishulli Norfolk", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nikaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Holandë", 0,0,0 }, +{ IDX_2C('n','o'), "Norvegji", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Zelandë e Re", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Polinezia Franceze", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filipine", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poloni", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pier dhe Mikelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitkern", 0,0,0 }, +{ IDX_2C('p','r'), "Porto Riko", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugali", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguaj", 0,0,0 }, +{ IDX_2C('q','a'), "Katar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Rumani", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Federata Ruse", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Arabia Saudite", 0,0,0 }, +{ IDX_2C('s','b'), "Ishujt Solomon", 0,0,0 }, +{ IDX_2C('s','c'), "Sejshelle", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Suedi", 0,0,0 }, +{ IDX_2C('s','g'), "Singapor", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Sloveni", 0,0,0 }, +{ IDX_2C('s','j'), "Ishujt Svalbard dhe Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Republika Slovake", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somali", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome dhe Principe", 0,0,0 }, +{ IDX_2C('s','u'), "USSR (të dikurshëm)", 0,0,0 }, +{ IDX_2C('s','v'), "Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Siri", 0,0,0 }, +{ IDX_2C('s','z'), "Svaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Ishujt Turq dhe Kaiko", 0,0,0 }, +{ IDX_2C('t','d'), "Çad", 0,0,0 }, +{ IDX_2C('t','f'), "Territoret Franceze Jugore", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tailandë", 0,0,0 }, +{ IDX_2C('t','j'), "Taxhikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunizi", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Timori Lindor", 0,0,0 }, +{ IDX_2C('t','r'), "Turqi", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad dhe Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taivan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzani", 0,0,0 }, +{ IDX_2C('u','a'), "Ukrainë", 0,0,0 }, +{ IDX_2C('u','g'), "Ugandë", 0,0,0 }, +{ IDX_2C('u','k'), "Mbretëri e Bashkuar", 0,0,0 }, +{ IDX_2C('u','m'), "Ishujt e Vegjël jashtë US", 0,0,0 }, +{ IDX_2C('u','s'), "Shtetet e Bashkuar", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguaj", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan" , 0,0,0 }, +{ IDX_2C('v','a'), "Qytet Shteti i Vatikanit (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent dhe Grenadinet", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuelë", 0,0,0 }, +{ IDX_2C('v','g'), "Ishujt Virgjini (Britanikë)", 0,0,0 }, +{ IDX_2C('v','i'), "Ishujt Virgjini (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Ishujt Vallis dhe Futuna", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Jemen", 0,0,0 }, +{ IDX_2C('y','t'), "Majote", 0,0,0 }, +{ IDX_2C('y','u'), "FSMZ", 0,0,0 }, +{ IDX_2C('z','a'), "Afrikë e Jugut", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabue", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.arabic b/webalizer-2.23-08/lang/webalizer_lang.arabic new file mode 100644 index 0000000..2eb2b7d --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.arabic @@ -0,0 +1,635 @@ +/* + webalizer_lang.english + + Webalizer V2.0x Language Support file for English. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 20-May-2008 Tranlated to Arabic by Mohamed SAAD + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Arabic"; +char *langcode = "ar"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "تسجيلات"; +char *msg_addresses="عناوين"; +char *msg_ignored = "غير مستعملة"; +char *msg_bad = "غير سليمة"; +char *msg_in = "في"; +char *msg_seconds = "ثانية"; + +/* progress and setup error messages */ +char *msg_log_err = "خطء: غير قادر على فتح ملف سجل الوقائع"; +char *msg_log_use = "جاري إستعمال ملف سجل الوقائع"; +char *msg_dir_err = "خطء غير قادر على الإنتقال إلى الدليل "; +char *msg_dir_use = "جاري إنشاء الخرج في"; +char *msg_cur_dir = "الدليل الحالي"; +char *msg_hostname= "إسم المضيف للتقارير هو"; +char *msg_ign_hist= "تجاهل ملف السجل الزمني السابق ..."; +char *msg_no_hist = "لم أجِد ملف السجل الزمني ..."; +char *msg_get_hist= "جاري قراءة ملف السجل الزمني..."; +char *msg_put_hist= "جاري حفظ معلومات السجل الزمني ..."; +char *msg_hist_err= "خطء: غير قادر على كتابة ملف السجل الزمني"; +char *msg_bad_hist= "خطء: تجاهل تسجيل زمني غير صالح"; +char *msg_bad_conf= "خطء: غير قادر على فتح ملف الإعداد"; +char *msg_bad_key = "تحذير: كلمة بحث غير صاليحة"; +char *msg_bad_date= "خطء: قفزة عن التسجيل (التاريخ غير صالح)"; +char *msg_ign_nscp= "جاري القفذ عن تسجيل ترويسة Netscape"; +char *msg_bad_rec = "قفزة عن تسجيل غير سليم"; +char *msg_no_vrec = "لم أجِد تسجيلات صالحة !"; +char *msg_gen_rpt = "جاري تكوين التقرير لِ "; +char *msg_gen_sum = "جاري تكوين التقرير الموجز"; +char *msg_get_data= "جاري قراءة معطيات التنفيذ السابق .."; +char *msg_put_data= "جاري حفظ معطيات التنفيذ الحالي ..."; +char *msg_no_data = "لم أجِد معطيات التنفيذ السابق ..."; +char *msg_bad_data= "خطء: غير قادر على إستعادة معطيات التنفيذ"; +char *msg_data_err= "خطء: غير قادر على حفظ معطيات التنفيذ الحالي"; +char *msg_dup_data= "تحذير: إحتمال وجود معطيات متكررة مرتين"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "فترة الموجز"; +char *msg_hhdr_gt = "تمّ الإنشاء"; + +/* main index strings */ +char *msg_main_us = "ملخص الإستعمال لِ "; +/* char *msg_main_per= "الأشهر الإثني عشر السابقة"; */ +char *msg_main_per= "الملخص حسب الشهر"; +char *msg_main_sum= "الملخص حسب الشهر"; +char *msg_main_da = "المعدل اليومي"; +char *msg_main_mt = "المجموعات الشهرية"; + +/* month HTML page strings */ +char *msg_hmth_du = "الإستعمال اليومي لِ "; +char *msg_hmth_hu = "الإستعمال حسب الساعة لِ "; + +/* table header strings */ +char *msg_h_by = "حسب"; +char *msg_h_avg = "المعدل"; +char *msg_h_max = "الأقصى"; +char *msg_h_total = "المجموع"; +char *msg_h_totals= "المجموعات"; +char *msg_h_day = "اليوم"; +char *msg_h_mth = "الشهر"; +char *msg_h_hour = "الساعة"; +char *msg_h_hits = "الإصابات"; +char *msg_h_pages = "الصفحات"; +char *msg_h_visits= "الزيارات"; +char *msg_h_files = "الملفات"; +char *msg_h_sites = "المواقع"; +char *msg_h_xfer = "كيلو بايت"; +char *msg_h_hname = "إسم المضيف"; +char *msg_h_url = "عنوان المورد المنتظم URL"; +char *msg_h_agent = "عميل المستخدم"; +char *msg_h_ref = "المحوّل"; +char *msg_h_ctry = "البلد"; +char *msg_h_search= "جملة البحث"; +char *msg_h_uname = "إسم المستخدم"; + +/* links along top of page */ +char *msg_hlnk_ds = "الإحصاءات اليومية"; +char *msg_hlnk_hs = "الإحصاءات حسب الساعة"; +char *msg_hlnk_u = "عناوين الموارد المنتظمة URLs"; +char *msg_hlnk_s = "المواقع"; +char *msg_hlnk_a = "العملاء"; +char *msg_hlnk_c = "البلاد"; +char *msg_hlnk_r = "المحوّلون"; +char *msg_hlnk_en = "الدخول"; +char *msg_hlnk_ex = "الخروج"; +char *msg_hlnk_sr = "البحث"; +char *msg_hlnk_i = "المستخدمون"; + +/* monthly total table */ +char *msg_mtot_ms = "الإحصاءات الشهرية لِ "; +char *msg_mtot_th = "مجموع الإصابات"; +char *msg_mtot_tf = "مجموع الملفات"; +char *msg_mtot_tx = "مجموع الكيلو بايت"; +char *msg_mtot_us = "مجموع المواقع المنفردة"; +char *msg_mtot_ur = "مجموع المحولين المنفردة"; +char *msg_mtot_ua = "مجموع عملاء المستخدمين المنفردة"; +char *msg_mtot_uu = "مجموع عناوين الموارد المنتظمة المنفردة"; +char *msg_mtot_ui = "مجموع أسماء المستخدمين المنفردة"; +char *msg_mtot_mhd= "الإصابات حسب اليوم"; +char *msg_mtot_mhh= "الإصابات حسب الساعة"; +char *msg_mtot_mfd= "الملفات حسب اليوم"; +char *msg_mtot_mpd= "الصفحات حسب اليوم"; +char *msg_mtot_msd= "المواقع حسب اليوم"; +char *msg_mtot_mvd= "الزيارات حسب اليوم"; +char *msg_mtot_mkd= "كيلو بايت في اليوم"; +char *msg_mtot_rc = "الإصابات حسب رمز الإجابة"; + +/* daily total table */ +char *msg_dtot_ds = "الإحصاءات اليومية لِ "; + +/* hourly total table */ +char *msg_htot_hs = "الإحصاءات حسب الساعة لِ "; + +/* country pie chart */ +char *msg_ctry_use= "الإستعمال حسب البلد لِ "; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "الأعلى"; +char *msg_top_of = "من اصل"; +char *msg_top_s = "مجموع المواقع"; +char *msg_top_u = "مجموع عناوين الموارد المنتظمة URLs"; +char *msg_top_r = "مجموع المحولين"; +char *msg_top_a = "مجموع عملاء المستخدمين"; +char *msg_top_c = "مجموع البلاد"; +char *msg_top_en = "مجموع صفحات الدخول"; +char *msg_top_ex = "مجوع صفحات الخروج"; +char *msg_top_sr = "مجموع مفردات البحث"; +char *msg_top_i = "مجموع أسماء المستخدمين"; +char *msg_v_sites = "راجع كل المواقع"; +char *msg_v_urls = "راجع كل عناوين الموارد المنتظمة"; +char *msg_v_refs = "راجع كل المحولون"; +char *msg_v_agents= "راجع كل عملاء المستخدمين"; +char *msg_v_search= "راجع كل مفردات البحث"; +char *msg_v_users = "راجع كل أسماء المستخدمين"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"}; + + +/* long month names - can be any length */ +char *l_month[12]={ "January", "February", "March", "April", + "May", "June", "July", "August", + "September","October", "November","December"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Usage Statistics for"; +char *msg_h_other = "Other"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.catalan b/webalizer-2.23-08/lang/webalizer_lang.catalan new file mode 100644 index 0000000..d46442c --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.catalan @@ -0,0 +1,639 @@ +/* + webalizer_lang.catalan + + Webalizer V2.0x Language Support file for Catalan. + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 19-Aug-1998 Translated by Jordi Bruguera (jordi@t800.grn.es) + 21-Sep-1998 Additional corrections by Jordi Bruguera (jordi@t800.grn.es) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 05-Jul-1999 Additional corrections by Jordi Bruguera (jordi@t800.grn.es) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 18-Oct-2000 Translated new strings for version 2.01-06 (jordi@t800.grn.es) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + 16-Jan-2011 Adapted to Softcatal style by Jordi Mallach (jordi@debian.org) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Catal"; +char *langcode = "ca"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "registres"; +char *msg_addresses="adreces"; +char *msg_ignored = "ignorats"; +char *msg_bad = "erronis"; +char *msg_in = "en"; +char *msg_seconds = "segons"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: no s'ha pogut obrir el fitxer de registres"; +char *msg_log_use = "S'est emprant el registre"; +char *msg_dir_err = "Error: no es pot canviar al directori especificat"; +char *msg_dir_use = "S'est creant els resultats a"; +char *msg_cur_dir = "el directori actual"; +char *msg_hostname= "Informe per al servidor"; +char *msg_ign_hist= "S'est ignorant l'historial anterior..."; +char *msg_no_hist = "No s'ha trobat el fitxer de l'historial..."; +char *msg_get_hist= "S'est llegint el fitxer de l'historial..."; +char *msg_put_hist= "S'est desant la informaci de l'historial..."; +char *msg_hist_err= "Error: no es pot escriure al fitxer de l'historial"; +char *msg_bad_hist= "Error: s'est descartant un registre no vlid"; +char *msg_bad_conf= "Error: no es pot obrir el fitxer de configuraci"; +char *msg_bad_key = "Avs: la paraula clau no s vlida"; +char *msg_bad_date= "Error: s'est ometent el registre (data errnia)"; +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 vlid!"; +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= "Avs: S'han trobat dades que potser sn duplicades"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No s'ha especificat el fitxer de memria cau, s'est avortant..."; +char *msg_dns_nodb= "Error: no es pot obrir el fitxer de memria cau de DNS"; +char *msg_dns_nolk= "Error: no es pot blocar el fitxer de memria cau de DNS"; +char *msg_dns_usec= "S'est emprant el fitxer de memria 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 produt 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 memria, es desactiva l'opci Llocs principals"; +char *msg_nomem_tr= "No s'ha pogut assignar prou memria, es desactiva l'opci Referents principals"; +char *msg_nomem_tu= "No s'ha pogut assignar prou memria, es desactiva l'opci URL ms visitades"; +char *msg_nomem_tc= "No s'ha pogut assignar prou memria, es desactiva l'opci Pasos d'origen principals"; +char *msg_nomem_ta= "No s'ha pogut assignar prou memria, es desactiva l'opci Navegadors principals"; +char *msg_nomem_tsr="No s'ha pogut assignar prou memria, es desactiva l'opci Cadenes de recerca principals"; +char *msg_nomem_ti= "No s'ha pogut assignar prou memria, es desactiva l'opci Noms d'usuari principals"; +char *msg_nomem_dh= "S'ha produt un error en afegir el nom del node (diari), s'est ometent"; +char *msg_nomem_mh= "S'ha produt un error en afegir el nom del node (mensual), s'est ometent"; +char *msg_nomem_u = "S'ha produt un error en afegir el node de les URL, s'est ometent"; +char *msg_nomem_a = "S'ha produt un error en afegir el node dels navegadors, s'est ometent"; +char *msg_nomem_r = "S'ha produt un error en afegir el node dels referents, s'est ometent"; +char *msg_nomem_sc= "S'ha produt un error en afegir el node de cadenes de recerca, s'est ometent"; +char *msg_nomem_i = "S'ha produt 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= "Avs: S'est truncant el nom del servidor, que s massa gran"; +char *msg_big_date= "Avs: S'est truncant el camp de la data, que s massa gran"; +char *msg_big_req = "Avs: S'est truncant el camp de la petici, que s massa gran"; +char *msg_big_ref = "Avs: S'est truncant el camp de l'enlla d'origen, que s massa gran"; +char *msg_big_user= "Avs: S'est truncant un nom d'usuari massa llarg"; +char *msg_big_one = "Avs: 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 histric (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 seqncia" , + "-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 grfica de pasos" , + "-G = suprimeix la grfica per hores" , + "-H = suprimeix les estadstiques per hores" , + "-L = suprimeix les llegendes de color dels grfics", + "-l num = empra num lnies de fons a la grfica)" , + "-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 mquina a emprar" , + "-o dir = directori de sortida a emprar" , + "-t nom = empra el ttol 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 pgina nom" , + "-P nom = tipus de l'extensi de la pgina nom" , + "-I nom = lias de l'ndex nom" , + "-K nm = mostra nm mesos a la taula de resum" , + "-k nm = mostra nm mesos a la grfica de resum" , + "-A nm = mostra els nm primers navegadors" , + "-C nm = mostra els nm primers pasos" , + "-R nm = mostra els nm primers referents" , + "-S nm = mostra els nm primers servidors" , + "-U nm = mostra els nm primers URL" , + "-e nm = mostra les nm primeres pgines d'entrada" , + "-E nm = mostra les nm primeres pgines de sortida" , + "-g nm = agrupa els dominis a nm nivells" , + "-X = amaga els llocs individuals" , + "-z dir = empra les banderes nacionals de dir" , +#ifdef USE_DNS + "-D fitxer = empra el fitxer de memria 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 = "Perode 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 diria"; +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 = "Mx"; +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 = "Pgines"; +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 = "Pas"; +char *msg_h_search= "Cadena de recerca"; +char *msg_h_uname = "Nom d'usuari"; + +/* links along top of page */ +char *msg_hlnk_ds = "Estadstiques diries"; +char *msg_hlnk_hs = "Estadstiques horries"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Visitants"; +char *msg_hlnk_a = "Navegadors"; +char *msg_hlnk_c = "Pasos"; +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 = "Estadstiques 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= "Pgines 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 = "Estadstiques diries per a"; + +/* hourly total table */ +char *msg_htot_hs = "Estadstiques horries per a"; + +/* country pie chart */ +char *msg_ctry_use= "s per pasos 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 = "pasos"; +char *msg_top_en = "pgines d'entrada"; +char *msg_top_ex = "pgines 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 - Mltiples 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 errnia", 0 }, + { "Codi 401 - No autoritzat", 0 }, + { "Codi 402 - Es requereix pagament", 0 }, + { "Codi 403 - Prohibit", 0 }, + { "Codi 404 - No trobat", 0 }, + { "Codi 405 - Mtode no perms", 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 sollicitat no disponible", 0 }, + { "Codi 417 - Expectativa fallida", 0 }, + { "Codi 500 - Error intern del servidor", 0 }, + { "Codi 501 - No implementat", 0 }, + { "Codi 502 - Passarella errnia", 0 }, + { "Codi 503 - Servei no disponible", 0 }, + { "Codi 504 - Temps d'espera de la pasarella exhaurit",0 }, + { "Codi 505 - Versi d'HTTP no implementada", 0 } }; + +char *msg_title = "Estadstiques d'accs 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'), "Exrcit 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 genric (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 Pacfic (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Associaci cooperativa (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"DPN genric (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Recursos humans (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"DPN genric mbil (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'), "Albnia", 0,0,0 }, +{ IDX_2C('a','m'), "Armnia", 0,0,0 }, +{ IDX_2C('a','n'), "Antilles Holandeses", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antrtida", 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'), "Austrlia", 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'), "Bsnia 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'), "Blgica", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benn", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthlemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei", 0,0,0 }, +{ IDX_2C('b','o'), "Bolvia", 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'), "Bielorssia", 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'), "Repblica Democrtica del Congo", 0,0,0 }, +{ IDX_2C('c','f'), "Repblica Centrafricana", 0,0,0 }, +{ IDX_2C('c','g'), "Repblica del Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Sussa", 0,0,0 }, +{ IDX_2C('c','i'), "Costa de Vori", 0,0,0 }, +{ IDX_2C('c','k'), "Arxiplag (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'), "Colmbia", 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'), "Txquia", 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'), "Repblica Dominicana", 0,0,0 }, +{ IDX_2C('d','z'), "Algria", 0,0,0 }, +{ IDX_2C('e','c'), "Equador", 0,0,0 }, +{ IDX_2C('e','e'), "Estnia", 0,0,0 }, +{ IDX_2C('e','g'), "Egipte", 0,0,0 }, +{ IDX_2C('e','h'), "Shara 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'), "Finlndia", 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'), "Micronsia", 0,0,0 }, +{ IDX_2C('f','o'), "Illes Fer-er", 0,0,0 }, +{ IDX_2C('f','r'), "Frana", 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'), "Gergia", 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'), "Grenlndia", 0,0,0 }, +{ IDX_2C('g','m'), "Gmbia", 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'), "Grcia", 0,0,0 }, +{ IDX_2C('g','s'), "Illes Gergia 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'), "Crocia", 0,0,0 }, +{ IDX_2C('h','t'), "Hait", 0,0,0 }, +{ IDX_2C('h','u'), "Hongria", 0,0,0 }, +{ IDX_2C('i','d'), "Indonsia", 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 Britnic 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'), "Islndia", 0,0,0 }, +{ IDX_2C('i','t'), "Itlia", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordnia", 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'), "Lban", 0,0,0 }, +{ IDX_2C('l','c'), "Santa Llcia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Libria", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Litunia", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Letnia", 0,0,0 }, +{ IDX_2C('l','y'), "Lbia", 0,0,0 }, +{ IDX_2C('m','a'), "Marroc", 0,0,0 }, +{ IDX_2C('m','c'), "Mnaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldvia", 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'), "Macednia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Mianmar", 0,0,0 }, +{ IDX_2C('m','n'), "Monglia", 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'), "Mauritnia", 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'), "Mxic", 0,0,0 }, +{ IDX_2C('m','y'), "Malisia", 0,0,0 }, +{ IDX_2C('m','z'), "Moambic", 0,0,0 }, +{ IDX_2C('n','a'), "Nambia", 0,0,0 }, +{ IDX_2C('n','c'), "Nova Calednia", 0,0,0 }, +{ IDX_2C('n','e'), "Nger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk", 0,0,0 }, +{ IDX_2C('n','g'), "Nigria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Pasos Baixos", 0,0,0 }, +{ IDX_2C('n','o'), "Noruega", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Naru", 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'), "Polinsia Francesa", 0,0,0 }, +{ IDX_2C('p','g'), "Nova Guinea Ppua", 0,0,0 }, +{ IDX_2C('p','h'), "Filipines", 0,0,0 }, +{ IDX_2C('p','k'), "Paquistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polnia", 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'), "Srbia", 0,0,0 }, +{ IDX_2C('r','u'), "Rssia", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Arbia 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'), "Sucia", 0,0,0 }, +{ IDX_2C('s','g'), "Singapur", 0,0,0 }, +{ IDX_2C('s','h'), "Santa Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Eslovnia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard i Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Eslovquia", 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'), "Somlia", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "So Tome i Prncipe", 0,0,0 }, +{ IDX_2C('s','u'), "Uni Sovitica", 0,0,0 }, +{ IDX_2C('s','v'), "el Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Sria", 0,0,0 }, +{ IDX_2C('s','z'), "Suazilndia", 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'), "Tailnda", 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'), "Tunsia", 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 Perifriques Menors dels EUA",0,0,0 }, +{ IDX_2C('u','s'), "Estats Units d'Amrica", 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'), "Veneuela", 0,0,0 }, +{ IDX_2C('v','g'), "Illes Verges Britniques", 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'), "Iugoslvia", 0,0,0 }, +{ IDX_2C('z','a'), "Repblica de Sud-frica", 0,0,0 }, +{ IDX_2C('z','m'), "Zmbia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbbue", 0,0,0 }, +{ IDX_2C('a','1'), "Servidor intermediari annim", 0,0,0 }, +{ IDX_2C('a','2'), "Provedor satllit", 0,0,0 }, +{ IDX_2C('o','1'), "Altres", 0,0,0 }, +{ IDX_2C('a','p'), "Regi sia/Pacfic", 0,0,0 }, +{ IDX_3C('l','a','n'), "Xarxa local (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.chinese b/webalizer-2.23-08/lang/webalizer_lang.chinese new file mode 100644 index 0000000..9b23028 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.chinese @@ -0,0 +1,633 @@ +/* + webalizer_lang.chinese + + Webalizer V2.0x Language Support file for Chinese. + 30-Apr-1999 Translated to Chinese by Daniel Gau + 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 = "~GLk}ҰO"; +char *msg_log_use = "ϥΰO"; +char *msg_dir_err = "~GLkܧؿ"; +char *msg_dir_use = "ͿX"; +char *msg_cur_dir = "ثeؿ"; +char *msg_hostname= "DW٬O"; +char *msg_ign_hist= "evO(history)"; +char *msg_no_hist = "vO(history file)䤣K"; +char *msg_get_hist= "ŪvO"; +char *msg_put_hist= "xsvOT"; +char *msg_hist_err= "~GLkgJvO"; +char *msg_bad_hist= "~GLĪvO"; +char *msg_bad_conf= "~GLk}ҳ]w"; +char *msg_bad_key = "ĵiGLĪr"; +char *msg_bad_date= "~GLӵO]榡D^"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "䤣즳ĪOI"; +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= "CJ`έp"; +char *msg_main_sum= "CJ`έ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 = "ǰeq]KB^"; +char *msg_h_hname = "DW"; +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 = "Cpɲέ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 = "`ǰeq]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 = "Ūɤ^NX"; + +/* daily total table */ +char *msg_dtot_ds = "Cέp "; + +/* hourly total table */ +char *msg_htot_hs = "Cpɲέp "; + +/* country pie chart */ +char *msg_ctry_use= "ӷaέp "; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "CXe"; +char *msg_top_of = "WA@"; +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@", "QG"}; + +/* long month names - can be any length */ +char *l_month[12]={ "@", "G", "T", + "|", "", "", + "C", "K", "E", + "Q", "Q@", "QG"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Usage Statistics for"; +char *msg_h_other = "Other"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.croatian b/webalizer-2.23-08/lang/webalizer_lang.croatian new file mode 100644 index 0000000..cbd921d --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.croatian @@ -0,0 +1,629 @@ +/* + webalizer_lang.croatian + + Webalizer V2.0x Language Support file for Croatian. + 28-Jun-1999 Original translation by Dinko Korunic and Mia Carapina + 30-Apr-2001 updated for v2.0 by Dinko Korunic + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Croatian"; +char *langcode = "hr"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Period zbrajanja"; +char *msg_hhdr_gt = "Generirano"; + +/* main index strings */ +char *msg_main_us = "Pregled pristupa za"; +/* char *msg_main_per= "Posljednjih 12 mjeseci"; */ +char *msg_main_per= "Pregled po mjesecima"; +char *msg_main_sum= "Pregled po mjesecima"; +char *msg_main_da = "Dnevni prosjek"; +char *msg_main_mt = "Mjesecni zbrojevi"; + +/* month HTML page strings */ +char *msg_hmth_du = "Pristupi po danu za"; +char *msg_hmth_hu = "Pristupi po satu za"; + +/* table header strings */ +char *msg_h_by = "po"; +char *msg_h_avg = "prosjek"; +char *msg_h_max = "Max"; +char *msg_h_total = "Ukupno"; +char *msg_h_totals= "Ukupno za sve"; +char *msg_h_day = "Dan"; +char *msg_h_mth = "Mjesec"; +char *msg_h_hour = "Sat"; +char *msg_h_hits = "Pristupa"; +char *msg_h_pages = "Stranica"; +char *msg_h_visits= "Posjeta"; +char *msg_h_files = "Datoteka"; +char *msg_h_sites = "Kompjutera"; +char *msg_h_xfer = "KB"; +char *msg_h_hname = "Kompjuter"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Korisnicki program"; +char *msg_h_ref = "Referer"; +char *msg_h_ctry = "Zemlja"; +char *msg_h_search= "Tekst pretrazivanja"; +char *msg_h_uname = "Korisnik"; + +/* links along top of page */ +char *msg_hlnk_ds = "Dnevna statistika"; +char *msg_hlnk_hs = "Statistika po satu"; +char *msg_hlnk_u = "URL-ovi"; +char *msg_hlnk_s = "Kompjuteri"; +char *msg_hlnk_a = "Browseri"; +char *msg_hlnk_c = "Zemlje"; +char *msg_hlnk_r = "Referiranja"; +char *msg_hlnk_en = "Ulaz"; +char *msg_hlnk_ex = "Izlaz"; +char *msg_hlnk_sr = "Pretraga"; +char *msg_hlnk_i = "Korisnici"; + +/* monthly total table */ +char *msg_mtot_ms = "Mjesecna statistika za"; +char *msg_mtot_th = "Ukupno pristupa"; +char *msg_mtot_tf = "Ukupno datoteka"; +char *msg_mtot_tx = "Ukupno KBajta"; +char *msg_mtot_us = "Ukupno razlicitih kompjutera"; +char *msg_mtot_ur = "Ukupno razlicitih referiranja"; +char *msg_mtot_ua = "Ukupno razlicitih browsera"; +char *msg_mtot_uu = "Ukupno razlicitih URL-ova"; +char *msg_mtot_ui = "Ukupno razlicitih korisnickih imena"; +char *msg_mtot_mhd= "Pristupa na dan"; +char *msg_mtot_mhh= "Pristupa na sat"; +char *msg_mtot_mfd= "Datoteka na dan"; +char *msg_mtot_mpd= "Datoteka na sat"; +char *msg_mtot_msd= "Kompjutera na dan"; +char *msg_mtot_mvd= "Posjeta na dan"; +char *msg_mtot_mkd= "KBajta na dan"; +char *msg_mtot_rc = "Pristupa po kodu"; + +/* daily total table */ +char *msg_dtot_ds = "Dnevna statistika za"; + +/* hourly total table */ +char *msg_htot_hs = "Statistika po satu za"; + +/* country pie chart */ +char *msg_ctry_use= "Pristup po zemljama za"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Prvih"; +char *msg_top_of = "od"; +char *msg_top_s = "kompjutera"; +char *msg_top_u = "URL-ova"; +char *msg_top_r = "referiranja"; +char *msg_top_a = "korisnickih programa"; +char *msg_top_c = "zemalja"; +char *msg_top_en = "ulaznih stranica"; +char *msg_top_ex = "izlaznih stranica"; +char *msg_top_sr = "tekstova pretrazivanja"; +char *msg_top_i = "korisnickih imena"; +char *msg_v_sites = "Pregled svih kompjutera"; +char *msg_v_urls = "Pregled svih URL-ova"; +char *msg_v_refs = "Pregled svih referisanja"; +char *msg_v_agents= "Pregled svih korisnickih programa"; +char *msg_v_search= "Pregled svih tekstova pretrazivanja"; +char *msg_v_users = "Pregled svih korisnickih imena"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Sij", "Vel", "Ozu", + "Tra", "Svi", "Lip", + "Srp", "Kol", "Ruj", + "Lis", "Stu", "Pro"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Sijecanj", "Veljaca", "Ozujak", "Travanj", + "Svibanj", "Lipanj", "Srpanj", "Kolovoz", + "Rujan", "Listopad", "Studeni", "Prosinac"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Statistika pristupa za"; +char *msg_h_other = "Ostalo"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nedefinirano/Nepoznato", 0,0,0 }, +{ IDX_3C('c','o','m'), "Komercijalni (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Obrazovni (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "SAD vlada (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Medjunarodni (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "SAD vojni (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Mrezne domene (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizacije (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Stari Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"NATO (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andora", 0,0,0 }, +{ IDX_2C('a','e'), "Ujedinjeni Arapski Emirati", 0,0,0 }, +{ IDX_2C('a','f'), "Afganistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua i Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguila", 0,0,0 }, +{ IDX_2C('a','l'), "Albanija", 0,0,0 }, +{ IDX_2C('a','m'), "Armenija", 0,0,0 }, +{ IDX_2C('a','n'), "Nizozemski Antili", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antartik", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "Americka Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austrija", 0,0,0 }, +{ IDX_2C('a','u'), "Australija", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbedzan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosna i Hercegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Banglades", 0,0,0 }, +{ IDX_2C('b','e'), "Belgija", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bugarska", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermude", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivija", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahami", 0,0,0 }, +{ IDX_2C('b','t'), "Butan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet otok", 0,0,0 }, +{ IDX_2C('b','w'), "Bocvana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Kanada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) otoci", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Centralnoafricka republika", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Svicarska", 0,0,0 }, +{ IDX_2C('c','i'), "Obala bjelokosti", 0,0,0 }, +{ IDX_2C('c','k'), "Cookovi otoci", 0,0,0 }, +{ IDX_2C('c','l'), "Cile", 0,0,0 }, +{ IDX_2C('c','m'), "Kamerun", 0,0,0 }, +{ IDX_2C('c','n'), "Kina", 0,0,0 }, +{ IDX_2C('c','o'), "Kolumbija", 0,0,0 }, +{ IDX_2C('c','r'), "Kostarika", 0,0,0 }, +{ IDX_2C('c','u'), "Kuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Bozicni otok", 0,0,0 }, +{ IDX_2C('c','y'), "Cipar", 0,0,0 }, +{ IDX_2C('c','z'), "Ceska republika", 0,0,0 }, +{ IDX_2C('d','e'), "Njemacka", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Danska", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominikanska republika", 0,0,0 }, +{ IDX_2C('d','z'), "Algerija", 0,0,0 }, +{ IDX_2C('e','c'), "Ekvador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonija", 0,0,0 }, +{ IDX_2C('e','g'), "Egipat", 0,0,0 }, +{ IDX_2C('e','h'), "Zapadna Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritreja", 0,0,0 }, +{ IDX_2C('e','s'), "Spanjolska", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopija", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finska", 0,0,0 }, +{ IDX_2C('f','j'), "Fidzi", 0,0,0 }, +{ IDX_2C('f','k'), "Falklandski otoci (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Mikronezija", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe otoci", 0,0,0 }, +{ IDX_2C('f','r'), "Francuska", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Velika Britanija (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "Francuska Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Gana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Grenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Gvineja", 0,0,0 }, +{ IDX_2C('g','p'), "Gvadelopa", 0,0,0 }, +{ IDX_2C('g','q'), "Ekvatorijalna Gvineja", 0,0,0 }, +{ IDX_2C('g','r'), "Grcka", 0,0,0 }, +{ IDX_2C('g','s'), "Juzna Georgia and Juzni Sandwich otoci", 0,0,0 }, +{ IDX_2C('g','t'), "Gvatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Gvinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Gvajana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard i McDonald otoci", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Hrvatska", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Madjarska", 0,0,0 }, +{ IDX_2C('i','d'), "Indonezija", 0,0,0 }, +{ IDX_2C('i','e'), "Irska", 0,0,0 }, +{ IDX_2C('i','l'), "Izrael", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "Indija", 0,0,0 }, +{ IDX_2C('i','o'), "Britanski Indijski oceanski teritorij", 0,0,0 }, +{ IDX_2C('i','q'), "Irak", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italija", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamajka", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenija", 0,0,0 }, +{ IDX_2C('k','g'), "Kirgistan", 0,0,0 }, +{ IDX_2C('k','h'), "Kambodza", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Komoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts i Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Koreja (Sjeverna)", 0,0,0 }, +{ IDX_2C('k','r'), "Koreja (Juzna)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuvajt", 0,0,0 }, +{ IDX_2C('k','y'), "Kajmanski otoci", 0,0,0 }, +{ IDX_2C('k','z'), "Kazahstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Libanon", 0,0,0 }, +{ IDX_2C('l','c'), "Sveta Lucija", 0,0,0 }, +{ IDX_2C('l','i'), "Lihtenstajn", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberija", 0,0,0 }, +{ IDX_2C('l','s'), "Lesoto", 0,0,0 }, +{ IDX_2C('l','t'), "Litva", 0,0,0 }, +{ IDX_2C('l','u'), "Luksemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvija", 0,0,0 }, +{ IDX_2C('l','y'), "Libija", 0,0,0 }, +{ IDX_2C('m','a'), "Maroko", 0,0,0 }, +{ IDX_2C('m','c'), "Monako", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagaskar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall otoci", 0,0,0 }, +{ IDX_2C('m','k'), "Makedonija", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolija", 0,0,0 }, +{ IDX_2C('m','o'), "Makao", 0,0,0 }, +{ IDX_2C('m','p'), "Sjeverni Marijanski otoci", 0,0,0 }, +{ IDX_2C('m','q'), "Martinik", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritanija", 0,0,0 }, +{ IDX_2C('m','s'), "Monserat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauricij", 0,0,0 }, +{ IDX_2C('m','v'), "Maldivi", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Meksiko", 0,0,0 }, +{ IDX_2C('m','y'), "Malezija", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambija", 0,0,0 }, +{ IDX_2C('n','a'), "Namibija", 0,0,0 }, +{ IDX_2C('n','c'), "Nova Kaledonija", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk otok", 0,0,0 }, +{ IDX_2C('n','g'), "Nigerija", 0,0,0 }, +{ IDX_2C('n','i'), "Nikaragva", 0,0,0 }, +{ IDX_2C('n','l'), "Nizozemska", 0,0,0 }, +{ IDX_2C('n','o'), "Norveska", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Novi Zeland", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Francuska Polinezija", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Nova Gvineja", 0,0,0 }, +{ IDX_2C('p','h'), "Filipini", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poljska", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre i Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Portoriko", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paragvaj", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Rumunjska", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Ruska federacija", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudijska Arabija", 0,0,0 }, +{ IDX_2C('s','b'), "Solomonski otoci", 0,0,0 }, +{ IDX_2C('s','c'), "Sejseli", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Svedska", 0,0,0 }, +{ IDX_2C('s','g'), "Singapur", 0,0,0 }, +{ IDX_2C('s','h'), "Sveta Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenija", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard i Jan Mayen otoci", 0,0,0 }, +{ IDX_2C('s','k'), "Slovacka republika", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalija", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome i Principe", 0,0,0 }, +{ IDX_2C('s','u'), "SSSR (bivsi)", 0,0,0 }, +{ IDX_2C('s','v'), "Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Svazilend", 0,0,0 }, +{ IDX_2C('t','c'), "Turks i Caicos otoci", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "Francuski juzni teritoriji", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tajland", 0,0,0 }, +{ IDX_2C('t','j'), "Tadjikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunizija", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Istocni Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turska", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad i Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Tajvan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzanija", 0,0,0 }, +{ IDX_2C('u','a'), "Ukrajina", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Ujedinjeno kraljevstvo (UK)", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying otoci", 0,0,0 }, +{ IDX_2C('u','s'), "Sjedinjene americke drzave", 0,0,0 }, +{ IDX_2C('u','y'), "Urugvaj", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent i Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venecuela", 0,0,0 }, +{ IDX_2C('v','g'), "Djevicanski otoci (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Djevicanski otoci (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vijetnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis i Futuna otoci", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Jemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavija", 0,0,0 }, +{ IDX_2C('z','a'), "Juzna Afrika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambija", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabve", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.czech b/webalizer-2.23-08/lang/webalizer_lang.czech new file mode 100644 index 0000000..647c057 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.czech @@ -0,0 +1,640 @@ +/* + webalizer_lang.czech + + Webalizer V2.0x Language Support file for Czech. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 15-Oct-1998 Translation by Jiri T. Pelech (pes@inway.cz) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 07-Jun-2000 translation added words (Jindrich.Fucik@sh.cvut.cz) + 28-Mar-2002 Fixes/corrections by Pavel Kolesnikov (k@les.cz) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + 30-Mar-2009 translations/fixes by Vitezslav Samel (vita@samel.cz) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Czech"; +char *langcode = "cs"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "zaznamu"; +char *msg_addresses="adres"; +char *msg_ignored = "ignorovano"; +char *msg_bad = "chybnych"; +char *msg_in = "za"; +char *msg_seconds = "vterin"; + +/* progress and setup error messages */ +char *msg_log_err = "Chyba: Nemohu otevrit log soubor"; +char *msg_log_use = "Pouzivam log soubor"; +char *msg_dir_err = "Chyba: Nemohu prejit do adresare"; +char *msg_dir_use = "Vytvarim vystup v"; +char *msg_cur_dir = "aktualnim adresari"; +char *msg_hostname= "Jmeno pocitace pro sestavy je"; +char *msg_ign_hist= "Ignoruji predchozi historii..."; +char *msg_no_hist = "Nemohu najit soubor historie..."; +char *msg_get_hist= "Ctu soubor historie..."; +char *msg_put_hist= "Ukladam soubor historie..."; +char *msg_hist_err= "Chyba: Nemohu zapsat soubor historie"; +char *msg_bad_hist= "Chyba: Ignoruji chybny zaznam v historii"; +char *msg_bad_conf= "Chyba: Nemohu otevrit konfiguracni soubor"; +char *msg_bad_key = "Pozor: Neplatne klicove slovo"; +char *msg_bad_date= "Chyba: Preskakuji zaznam (spatne datum)"; +char *msg_ign_nscp= "Preskakuji hlavickovy zaznam z Netscape"; +char *msg_bad_rec = "Preskakuji spatny zaznam"; +char *msg_no_vrec = "Nenalezeny platne zaznamy!"; +char *msg_gen_rpt = "Vytvarim sestavu pro"; +char *msg_gen_sum = "Vytvarim sumarni sestavu"; +char *msg_get_data= "Ctu udaje z minuleho zpracovani..."; +char *msg_put_data= "Ukladam udaje aktualniho zpracovani..."; +char *msg_no_data = "Nemohu najit udaje z minuleho zpracovani..."; +/*char *msg_bad_data= "Neplatny datovy zaznam"; */ +char *msg_bad_data= "Chyba: Nemohu obnovit data aktualniho zpracovani"; +char *msg_data_err= "Chyba: Nemohu ulozit udaje aktualniho zpracovani"; +char *msg_dup_data= "Pozor: Nalezeny pravdepodobne duplicitni udaje"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nejsou specifikovany zadne cache soubory, koncim..."; +char *msg_dns_nodb= "Chyba: Nemohu otevrit soubory DNS cache"; +char *msg_dns_nolk= "Chyba: Nemohu zamknout soubory DNS cache"; +char *msg_dns_usec= "Pouzivam soubory DNS cache"; +char *msg_dns_rslv= "DNS Kontrola"; +char *msg_dns_none= "Neni co zpracovat"; +char *msg_dns_abrt= "Neni podpora pro DNS, koncim..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Nemohu otevrit soubor"; +char *msg_geo_use = "Pouzivam"; +char *msg_geo_nolu= "vyhledavani vypnuto"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Nemohu alokovat dost pameti, Nej mista jsou nefunkcni!"; +char *msg_nomem_tr= "Nemohu alokovat dost pameti, Nej odkazovace jsou nefunkcni!"; +char *msg_nomem_tu= "Nemohu alokovat dost pameti, Nej URL jsou nefunkcni!"; +char *msg_nomem_tc= "Nemohu alokovat dost pameti, Nej zeme jsou nefunkcni!"; +char *msg_nomem_ta= "Nemohu alokovat dost pameti, Nej prohlizece jsou nefunkcni!"; +char *msg_nomem_tsr="Nemohu alokovat dost pameti, Nej hledane retezce jsou nefunkcni!"; +char *msg_nomem_ti= "Nemohu alokovat dost pameti, Nej uzivatele jsou nefunkcni!"; +char *msg_nomem_dh= "Chyba doplneni bloku pocitace (denni), preskakuji"; +char *msg_nomem_mh= "Chyba doplneni bloku pocitace (mesicni), preskakuji"; +char *msg_nomem_u = "Chyba doplneni bloku URL, preskakuji"; +char *msg_nomem_a = "Chyba doplneni bloku prohlizece, preskakuji"; +char *msg_nomem_r = "Chyba doplneni bloku odkazovace, preskakuji"; +char *msg_nomem_sc= "Chyba doplneni hledanych retezcu, preskakuji"; +char *msg_nomem_i = "Chyba doplneni uzivatelu, preskakuji"; + +/* log record errors */ +char *msg_big_rec = "Chyba: Preskakuji prilis dlouhy zaznam v logu"; +char *msg_big_host= "Pozor: Orezavam prilis dlouhe jmeno pocitace"; +char *msg_big_date= "Pozor: Orezavam prilis dlouhe pole datumu"; +char *msg_big_req = "Pozor: Orezavam prilis dlouhe pole zadosti"; +char *msg_big_ref = "Pozor: Orezavam prilis dlouhe pole odkazovace"; +char *msg_big_user= "Pozor: Orezavam prilis dlouhe jmeno uzivatele"; +char *msg_big_one = "Pozor: Retezec prekrocil velikost ukladaciho mista"; + +/* misc errors */ +char *msg_no_open = "Chyba: Nemohu otevrit soubor"; + +/* Help display... */ +char *h_usage1 = "Pouzivani"; +char *h_usage2 = "[volby] [log soubor]"; +char *h_msg[]= { + "-h = vypis tento help" , + "-V = vypis informaci o verzi" , + "-v = bud upovidany" , + "-d = vypis dalsi ladici informace" , + "-F type = typ logu. type= (clf | ftp | squid | w3c)", + "-f = chyby v prekladu stranek" , + "-i = ignoruj soubor historie" , + "-p = zapamatuj stav (inkrementalne)" , + "-b = ignoruj stav (inkrementalne)" , + "-q = potlac informativni zpravy" , + "-Q = potlac VSECHNY zpravy" , + "-Y = potlac graf statu" , + "-G = potlac hodinovy graf" , + "-H = potlac hodinove statistiky" , + "-L = potlac barevne kody v legendach grafu" , + "-l poc = pouzij 'num' radek v podkladu grafu" , + "-m poc = cas pro navstevu (seconds)" , + "-T = vypis casove informace" , + "-c file = pouzij konfig. soubor 'file'" , + "-n name = pouzij jmeno pocitace" , + "-o adr = vystupni adresar" , + "-t name = nazev sestavy 'name'" , + "-a name = skryj prohlizec 'name'" , + "-r name = skryj odkazovac 'name'" , + "-s name = skryj misto 'name'" , + "-u name = skryj URL 'name'" , + "-x name = pouzij priponu souboru 'name'" , + "-O name = vynechej stranku 'name'" , + "-P name = stranky maji priponu 'name'" , + "-I name = nazev Index(u) 'name'" , + "-K poc = zobraz 'poc' mesicu v prehledu" , + "-k poc = zobraz 'poc' mesicu v prehledovem grafu", + "-A poc = zobraz 'poc' Nej prohlizecu" , + "-C poc = zobraz 'poc' Nej zemi" , + "-R poc = zobraz 'poc' Nej odkazovacu" , + "-S poc = zobraz 'poc' Nej mist" , + "-U poc = zobraz 'poc' Nej URL" , + "-e poc = zobraz 'poc' vstupnich stranek" , + "-E poc = zobraz 'poc' odchozich stranek" , + "-g poc = seskup domeny do 'poc' urovni" , + "-X = skryt jednotlive site" , + "-z dir = vlajky zemi jsou v adresari 'dir'" , +#ifdef USE_DNS + "-D name = pouzij DNS Cache 'name'" , + "-N poc = pocet DNS procesu (0=zakazat)" , + "-j = pouzij vestavene vyhledavani v GeoDB" , + "-J name = pouzij GeoDB databazi 'name'" , +#endif +#ifdef USE_GEOIP + "-w = pouzij vyhledavani pomoci GeoIP" , + "-W name = pouzij GeoIP databazi 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Obdob statistiky"; +char *msg_hhdr_gt = "Generovno"; + +/* main index strings */ +char *msg_main_us = "Statistiky pstup pro"; +/* char *msg_main_per= "Poslednch 12 msc"; */ +char *msg_main_per= "Msn pehled"; +char *msg_main_sum= "Msn pehled"; +char *msg_main_da = "Denn prmr"; +char *msg_main_mt = "Msn souty"; + +/* month HTML page strings */ +char *msg_hmth_du = "Denn vyuit za"; +char *msg_hmth_hu = "Hodinov vyuit za"; + +/* table header strings */ +char *msg_h_by = "podle"; +char *msg_h_avg = "Prm"; +char *msg_h_max = "Max"; +char *msg_h_total = "Celkem"; +char *msg_h_totals= "Celkem"; +char *msg_h_day = "Den"; +char *msg_h_mth = "Msc"; +char *msg_h_hour = "Hodina"; +char *msg_h_hits = "Pstup"; +char *msg_h_pages = "Strnek"; +char *msg_h_visits= "Nvtv"; +char *msg_h_files = "Soubor"; +char *msg_h_sites = "Mst"; +char *msg_h_xfer = "KByt"; +char *msg_h_hname = "Pota"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Prohle"; +char *msg_h_ref = "Odkazova"; +char *msg_h_ctry = "Zem"; +char *msg_h_search= "Hledn"; +char *msg_h_uname = "Uivatel"; + +/* 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 = "Msta"; +char *msg_hlnk_a = "Prohlee"; +char *msg_hlnk_c = "Zem"; +char *msg_hlnk_r = "Odkazovae"; +char *msg_hlnk_en = "Vstupy"; +char *msg_hlnk_ex = "Vstupy"; +char *msg_hlnk_sr = "Hledn"; +char *msg_hlnk_i = "Uivatel"; + +/* monthly total table */ +char *msg_mtot_ms = "Msn statistiky za"; +char *msg_mtot_th = "Celkem nvtv"; +char *msg_mtot_tf = "Celkem soubor"; +char *msg_mtot_tx = "Celkem KByt"; +char *msg_mtot_us = "Celkem jedinench mst"; +char *msg_mtot_ur = "Celkem jedinench odkazova"; +char *msg_mtot_ua = "Celkem jedinench Prohle"; +char *msg_mtot_uu = "Celkem jedinench URL"; +char *msg_mtot_ui = "Celkem jedinench uivatel"; +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= "Strnek za den"; +char *msg_mtot_msd= "Mst za den"; +char *msg_mtot_mvd= "Nvtv za den"; +char *msg_mtot_mkd= "KByt za den"; +char *msg_mtot_rc = "Nvtvy podle kdu odpovdi"; + +/* 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= "Vyuit 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 = "mst celkem"; +char *msg_top_u = "URL celkem"; +char *msg_top_r = "odkazova celkem"; +char *msg_top_a = "prohle celkem"; +char *msg_top_c = "zem celkem"; +char *msg_top_en = "vstupnch strnek celkem"; +char *msg_top_ex = "vstupnch strnek celkem"; +char *msg_top_sr = "hledanch etzc celkem"; +char *msg_top_i = "uivatel celkem"; +char *msg_v_sites = "zobrazit vechny st"; +char *msg_v_urls = "zobrazit vechny URL"; +char *msg_v_refs = "zobrazit vechny referery"; +char *msg_v_agents= "zobrazit vechny uivatelsk prohlee"; +char *msg_v_search= "zobrazit vechny hledan strnky"; +char *msg_v_users = "zobrazit vechna uivatelsk jmna"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Led", "no", "Be", + "Dub", "Kv", "er", + "vc", "Srp", "Z", + "j", "Lis", "Pro"}; + +/* long month names - can be any length */ +char *l_month[12]={ "leden", "nor", "bezen", "duben", + "kvten", "erven", "ervenec", "srpen", + "z", "jen", "listopad", "prosinec"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Nedefinovan kd odpovdi", 0 }, + { "Kd 100 - Pokraovat", 0 }, + { "Kd 101 - Pepnn protokol", 0 }, + { "Kd 200 - OK", 0 }, + { "Kd 201 - Vytvoeno", 0 }, + { "Kd 202 - Pijato", 0 }, + { "Kd 203 - Neautoritativn informace", 0 }, + { "Kd 204 - dn obsah", 0 }, + { "Kd 205 - Obnovit obsah", 0 }, + { "Kd 206 - sten obsah", 0 }, + { "Kd 300 - Vcensobn volby", 0 }, + { "Kd 301 - Pesunuto trvale", 0 }, + { "Kd 302 - Ptomno", 0 }, + { "Kd 303 - Viz dal", 0 }, + { "Kd 304 - Nezmnno", 0 }, + { "Kd 305 - Pouij proxy", 0 }, + { "Kd 307 - Pesunuto doasn", 0 }, + { "Kd 400 - patn poadavek", 0 }, + { "Kd 401 - Neautorizovn", 0 }, + { "Kd 402 - Vyadovna platba", 0 }, + { "Kd 403 - Zakzno", 0 }, + { "Kd 404 - Nenalezeno", 0 }, + { "Kd 405 - Nepovolen Metoda", 0 }, + { "Kd 406 - Neppustn", 0 }, + { "Kd 407 - Vyadovna autentikace proxy", 0 }, + { "Kd 408 - Pekroen asov limit", 0 }, + { "Kd 409 - Konflikt", 0 }, + { "Kd 410 - Zrueno", 0 }, + { "Kd 411 - dost o dlku", 0 }, + { "Kd 412 - Podmnka nesplnna", 0 }, + { "Kd 413 - Poadavek je pli velk", 0 }, + { "Kd 414 - URI je pli dlouh", 0 }, + { "Kd 415 - Nepodporovan typ mdia", 0 }, + { "Kd 416 - Poadovan rozsah neodpovd", 0 }, + { "Kd 417 - Oekvn selhalo", 0 }, + { "Kd 500 - Intenrn chyba serveru", 0 }, + { "Kd 501 - Nezavedeno", 0 }, + { "Kd 502 - patn brna", 0 }, + { "Kd 503 - Sluba nedostupn", 0 }, + { "Kd 504 - Brna neodpovdla", 0 }, + { "Kd 505 - Nepodporovan verze HTTP", 0 } }; + +char *msg_title = "Statistiky pstup pro"; +char *msg_h_other = "Jin"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nezjitn/neznm", 0,0,0 }, +{ IDX_3C('c','o','m'), "Komern (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Akademick (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US vldn (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Mezinrodn (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 spolenosti (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Katalnsk komunita (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Globln adres kontakt (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Leteck prmysl (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asijsko/pacifick komunita (asia)",0,0,0 }, +{ IDX_4C('c','o','o','p'),"Drustva (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'),"Pvodn 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 emirty", 0,0,0 }, +{ IDX_2C('a','f'), "Afghnistn", 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'), "Albnie", 0,0,0 }, +{ IDX_2C('a','m'), "Armnie", 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'), "Austrlie", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Alandy", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbajdn", 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 Bartolomj", 0,0,0 }, +{ IDX_2C('b','m'), "Bermudy", 0,0,0 }, +{ IDX_2C('b','n'), "Brunej", 0,0,0 }, +{ IDX_2C('b','o'), "Bolvie", 0,0,0 }, +{ IDX_2C('b','r'), "Brazlie", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamy", 0,0,0 }, +{ IDX_2C('b','t'), "Bhtn", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Blorusko", 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'), "Stedoafrick republika", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "vcarsko", 0,0,0 }, +{ IDX_2C('c','i'), "Pobe 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'), "Vnon 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'), "Nmecko", 0,0,0 }, +{ IDX_2C('d','j'), "Dibuti", 0,0,0 }, +{ IDX_2C('d','k'), "Dnsko", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominiknsk republika", 0,0,0 }, +{ IDX_2C('d','z'), "Alrsko", 0,0,0 }, +{ IDX_2C('e','c'), "Ekvdor", 0,0,0 }, +{ IDX_2C('e','e'), "Estonsko", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Zpadn Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "panlsko", 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'), "Fidi", 0,0,0 }, +{ IDX_2C('f','k'), "Falklandsk ostrovy (Malvny)", 0,0,0 }, +{ IDX_2C('f','m'), "Mikronzie", 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 Britnie (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'), "Grnsko", 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'), "Rovnkov Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "ecko", 0,0,0 }, +{ IDX_2C('g','s'), "Jin Georgia a Jin 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'), "Maarsko", 0,0,0 }, +{ IDX_2C('i','d'), "Indonsie", 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 indickoocensk zem", 0,0,0 }, +{ IDX_2C('i','q'), "Irk", 0,0,0 }, +{ IDX_2C('i','r'), "rn", 0,0,0 }, +{ IDX_2C('i','s'), "Island", 0,0,0 }, +{ IDX_2C('i','t'), "Itlie", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamajka", 0,0,0 }, +{ IDX_2C('j','o'), "Jordnsko", 0,0,0 }, +{ IDX_2C('j','p'), "Japonsko", 0,0,0 }, +{ IDX_2C('k','e'), "Kea", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstn", 0,0,0 }, +{ IDX_2C('k','h'), "Kamboda", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Komory", 0,0,0 }, +{ IDX_2C('k','n'), "Svat Krytof a Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Severn Korea", 0,0,0 }, +{ IDX_2C('k','r'), "Jin 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'), "Kazachstn", 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'), "Lichtentejnsko", 0,0,0 }, +{ IDX_2C('l','k'), "Sr Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Librie", 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'), "Lotysko", 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'), "Mauretnie", 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'), "Nigrie", 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'), "Nepl", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Nov Zland", 0,0,0 }, +{ IDX_2C('o','m'), "Omn", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Francouzsk Polynsie", 0,0,0 }, +{ IDX_2C('p','g'), "Papua-Nov Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filipny", 0,0,0 }, +{ IDX_2C('p','k'), "Pkistn", 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'), "Runion", 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'), "Sadsk Arbie", 0,0,0 }, +{ IDX_2C('s','b'), "alamounovy ostrovy", 0,0,0 }, +{ IDX_2C('s','c'), "Seychely", 0,0,0 }, +{ IDX_2C('s','d'), "Sdn", 0,0,0 }, +{ IDX_2C('s','e'), "vdsko", 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'), "Somlsko", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Svat Tom a Princv ostrov", 0,0,0 }, +{ IDX_2C('s','u'), "Sovtsk svaz", 0,0,0 }, +{ IDX_2C('s','v'), "Salvdor", 0,0,0 }, +{ IDX_2C('s','y'), "Srie", 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 jin 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'), "Tdikistn", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Vchodn Timor", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistn", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisko", 0,0,0 }, +{ IDX_2C('t','o'), "Tongo", 0,0,0 }, +{ IDX_2C('t','p'), "Vchodn 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'), "Tanznie", 0,0,0 }, +{ IDX_2C('u','a'), "Ukrajina", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Velk Britnie (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'), "Uzbekistn", 0,0,0 }, +{ IDX_2C('v','a'), "Vatikn", 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'), "Jugoslvie", 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'), "Lokln s (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.danish b/webalizer-2.23-08/lang/webalizer_lang.danish new file mode 100644 index 0000000..7cbfab9 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.danish @@ -0,0 +1,632 @@ +/* + webalizer_lang.danish + + Webalizer V2.0x Language Support file for Danish. + 13-Jul-1999 by Michael B. Jenner (mj@kom.auc.dk) + 13-Nov-1999 Major update by Jonas Koch Bentzen (post@jonaskochbentzen.dk) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Danish"; +char *langcode = "da"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "poster"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignorerede"; +char *msg_bad = "fejlagtige"; +char *msg_in = "p"; +char *msg_seconds = "sekunder"; + +/* progress and setup error messages */ +char *msg_log_err = "Fejl: kan ikke bne logfil"; +char *msg_log_use = "Anvender logfil"; +char *msg_dir_err = "Fejl: kan ikke skifte bibliotek til"; +char *msg_dir_use = "Opretter output i biblioteket"; +char *msg_cur_dir = "aktivt bibliotek"; +char *msg_hostname= "Rapporterne ligger p maskinen med vrtsnavnet"; +char *msg_ign_hist= "Ignorerer tidligere historie ..."; +char *msg_no_hist = "Historiefilen findes ikke..."; +char *msg_get_hist= "Lser 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 ngleord"; +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= "Lser tidligere krselsdata.."; +char *msg_put_data= "Gemmer aktive krselsdata..."; +char *msg_no_data = "Tidligere krselsdata ikke fundet..."; +char *msg_bad_data= "Fejl: Kan ikke genindlse krselsdata"; +char *msg_data_err= "Fejl: Kan ikke gemme aktive krselsdata"; +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 Gster sls fra!"; +char *msg_nomem_tr= "Kan ikke allokere nok hukommelse, Top Referer sls fra!"; +char *msg_nomem_tu= "Kan ikke allokere nok hukommelse, Top URL sls fra!"; +char *msg_nomem_tc= "Kan ikke allokere nok hukommelse, Top Lande sls fra!"; +char *msg_nomem_ta= "Kan ikke allokere nok hukommelse, Top Web browsere sls fra!"; +char *msg_nomem_tsr="Kan ikke allokere nok hukommelse, Top Sgestrenge sles fra!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Fejl ved tilfjelse af host-node (daglig), skipping"; +char *msg_nomem_mh= "Fejl ved tilfjelse af host-node (mnedlig), skipping"; +char *msg_nomem_u = "Fejl ved tilfjelse af URL-node, skipping"; +char *msg_nomem_a = "Fejl ved tilfjelse af Web browsere node, skipping"; +char *msg_nomem_r = "Fejl ved tilfjelse af Referer node, skipping"; +char *msg_nomem_sc= "Fejl ved tilfjelse af Sgestrenge 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 vrtsnavn)"; +char *msg_big_date= "Advarsel: Afkorter strengen (for stort datofelt)"; +char *msg_big_req = "Advarsel: Afkorter strengen (for stort foresprgsel-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 hjlpebesked" , + "-V = udskriv versionsoplysninger" , + "-v = be verbose" , + "-d = udskriv ekstra fejlsgningsinformation", + "-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 = Undersg timeout-vrdi (seconds)" , + "-T = udskriv timing-information" , + "-c file = brug konfigurationsfilen 'file'" , + "-n name = vrtsnavn 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 gste '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 gster" , + "-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 mneder"; */ +char *msg_main_per= "Opsummering / mned"; +char *msg_main_sum= "Opsummering / mned"; +char *msg_main_da = "Dagligt gennemsnit"; +char *msg_main_mt = "Sammenlagt pr. mned"; + +/* 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 = "Mned"; +char *msg_h_hour = "Time"; +char *msg_h_hits = "Foresprgsler"; +char *msg_h_pages = "Sider"; +char *msg_h_visits= "Besg"; +char *msg_h_files = "Filer"; +char *msg_h_sites = "Gster"; +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= "Sgestreng"; +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 = "Gster"; +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 = "Sg"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = "Mnedlig statistik for"; +char *msg_mtot_th = "Foresprgsler"; +char *msg_mtot_tf = "Filer"; +char *msg_mtot_tx = "kB"; +char *msg_mtot_us = "Unikke gster"; +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= "Foresprgsler pr. dag"; +char *msg_mtot_mhh= "Foresprgsler pr. time"; +char *msg_mtot_mfd= "Filer pr. dag"; +char *msg_mtot_mpd= "Sider pr. dag"; +char *msg_mtot_msd= "Gster pr. dag"; +char *msg_mtot_mvd= "Besg pr. dag"; +char *msg_mtot_mkd= "kB pr. dag"; +char *msg_mtot_rc = "Foresprgsler 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= "Foresprgsler 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 = "gster"; +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 = "sgestrenge"; +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 - Fortst", 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 foresprgsel", 0 }, + { "Kode 401 - Ingen adgang", 0 }, + { "Kode 402 - Betaling pkrvet", 0 }, + { "Kode 403 - Forbudt", 0 }, + { "Kode 404 - Findes ikke", 0 }, + { "Kode 405 - Metoden ikke tilladt", 0 }, + { "Kode 406 - Ikke acceptabelt", 0 }, + { "Kode 407 - Proxygodkendelse pkrvet", 0 }, + { "Kode 408 - Tiden er udlbet for foresprgslen", 0 }, + { "Kode 409 - Konflikt", 0 }, + { "Kode 410 - Forsvundet", 0 }, + { "Kode 411 - Lngde pkrvet", 0 }, + { "Kode 412 - Forudstning ikke opfyldt", 0 }, + { "Kode 413 - Foresprgselsenhed for stor", 0 }, + { "Kode 414 - Adresse for lang", 0 }, + { "Kode 415 - Medietypen understttes ikke", 0 }, + { "Kode 416 - Forespurgt omrde 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 tilgngelig", 0 }, + { "Kode 504 - Tiden er udlbet for gateway'en", 0 }, + { "Kode 505 - HTTP-versionen understttes 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 (militret)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Netvrk (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'), "Juleerne", 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'), "Falklandserne (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Mikronesien", 0,0,0 }, +{ IDX_2C('f','o'), "Frerne", 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'), "Grnland", 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'), "Grkenland", 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'), "Rumnien", 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'), "Jomfruerne (de britiske)", 0,0,0 }, +{ IDX_2C('v','i'), "Jomfruerne (de amerikanske)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis og Futuna-erne", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavien", 0,0,0 }, +{ IDX_2C('z','a'), "Sydafrika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.dutch b/webalizer-2.23-08/lang/webalizer_lang.dutch new file mode 100644 index 0000000..cdc0cea --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.dutch @@ -0,0 +1,651 @@ +/* + webalizer_lang.dutch + + Webalizer V2.0x Language Support file for Dutch. + 02-Jun-1998 Translated by J.Q. la Poutre (jlpoutre@inter.nl.net) + 02-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 03-Jun-1998 Translation Level 1.1 by J.Q. La Poutre + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 15-Jul-1999 Changes in translation by M. Mackenbach (marcom@websource.nl) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 02-May-2000 Translation level 2.0 by Richard Huveneers (richard@hacom.nl) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + ### Nederlandstalige versie aangepast vanwege de snelle vertaling + ### M. Mackenbach (marcom@websource.nl) + ### versie 1.2/01 + + ### Nederlandse versie (1.00 - 2 juni 1998) + ### J.Q. la Poutre' of + ### versie 1.1/01 - 03 jun 1998 + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Nederlands"; +char *langcode = "nl"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="adressen"; +char *msg_ignored = "genegeerd"; +char *msg_bad = "fout"; +char *msg_in = "in"; +char *msg_seconds = "seconden"; + +/* progress and setup error messages */ +char *msg_log_err = "Fout: kan het logbestand niet openen"; +char *msg_log_use = "Gebruik logbestand"; +char *msg_dir_err = "Fout: kan werk-directory niet veranderen naar"; +char *msg_dir_use = "Schrijf gegevens naar"; +char *msg_cur_dir = "werk-directory"; +char *msg_hostname= "De 'Hostname' voor het rapport is"; +char *msg_ign_hist= "Negeer oude history..."; +char *msg_no_hist = "History bestand niet gevonden..."; +char *msg_get_hist= "Lees history bestand..."; +char *msg_put_hist= "Bewaar history informatie..."; +char *msg_hist_err= "Fout: kan history bestand niet schrijven"; +char *msg_bad_hist= "Fout: ongeldig history record (wordt genegeerd)"; +char *msg_bad_conf= "Fout: kan configuratie-bestand niet openen"; +char *msg_bad_key = "Waarschuwing: ongeldig 'keyword'"; +char *msg_bad_date= "Fout: foute datum (record overgeslagen)"; +char *msg_ign_nscp= "Netscape header record (wordt genegeerd)"; +char *msg_bad_rec = "Foutief record (wordt genegeerd)"; +char *msg_no_vrec = "Geen geldige records gevonden!"; +char *msg_gen_rpt = "Genereer rapport voor"; +char *msg_gen_sum = "Genereer samenvattingsrapport"; +char *msg_get_data= "Lees gegevens van eerdere sessie..."; +char *msg_put_data= "Bewaar gegevens huidige sessie..."; +char *msg_no_data = "Gegevens eerdere sessie niet gevonden..."; +/*char *msg_bad_data= "Ongeldig record (gegevenstype)";*/ +char *msg_bad_data= "Fout: kan sessie (gegevens) niet inlezen"; +char *msg_data_err= "Fout: kan sessie (gegevens) niet bewaren"; +char *msg_dup_data= "Waarschuwing: mogelijk dubbele gegevens gevonden"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Geen cache bestand opgegeven, programma wordt afgebroken..."; +char *msg_dns_nodb= "Fout: kan het DNS cache bestand niet openen"; +char *msg_dns_nolk= "Fout: kan het DNS cache bestand niet reserveren"; +char *msg_dns_usec= "Het DNS cache bestand wordt gebruikt"; +char *msg_dns_rslv= "DNS Aanvraag"; +char *msg_dns_none= "Niets te verwerken"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Onvoldoende geheugen beschikbaar, Top hosts overgeslagen!"; +char *msg_nomem_tr= "Onvoldoende geheugen beschikbaar, Top verwijzende pagina's overgeslagen!"; +char *msg_nomem_tu= "Onvoldoende geheugen beschikbaar, Top URL's overgeslagen!"; +char *msg_nomem_tc= "Onvoldoende geheugen beschikbaar, Top landen overgeslagen!"; +char *msg_nomem_ta= "Onvoldoende geheugen beschikbaar, Top browsers overgeslagen!"; +char *msg_nomem_tsr="Onvoldoende geheugen beschikbaar, Top zoekopdrachten overgeslagen!"; +char *msg_nomem_ti= "Onvoldoende geheugen beschikbaar, Top gebruikersnamen overgeslagen!"; +char *msg_nomem_dh= "Fout bij toevoegen van host (dagrapport), overgeslagen!"; +char *msg_nomem_mh= "Fout bij toevoegen van host (maandrapport), overgeslagen!"; +char *msg_nomem_u = "Fout bij toevoegen van URL, overgeslagen!"; +char *msg_nomem_a = "Fout bij toevoegen van browser, overgeslagen!"; +char *msg_nomem_r = "Fout bij toevoegen van verwijzende pagina, overgeslagen!"; +char *msg_nomem_sc= "Fout bij toevoegen van tekst-node, overgeslagen!"; +char *msg_nomem_i = "Fout bij toevoegen van Gebruikersnaam, overgeslagen!"; + +/* log record errors */ +char *msg_big_rec = "Fout: te groot log-record (overgeslagen)"; +char *msg_big_host= "Waarschuwing: te lange hostnaam: ingekort"; +char *msg_big_date= "Waarschuwing: te lang datum veld: ingekort"; +char *msg_big_req = "Waarschuwing: te lang aanvraag veld: ingekort"; +char *msg_big_ref = "Waarschuwing: te lang veld voor verwijzende pagina: ingekort"; +char *msg_big_user= "Waarschuwing: te lang veld voor gebruikersnaam: ingekort"; +char *msg_big_one = "Waarschuwing: regel past niet in beschikbare geheugenruimte"; + +/* misc errors */ +char *msg_no_open = "Fout: kan bestand niet openen!"; + +/* Help display... */ +char *h_usage1 = "Gebruiksaanwijzing"; +char *h_usage2 = "[opties] [log-bestand]"; +char *h_msg[]= { + "-h = Deze helptekst", + "-V = Toon versie-informatie", + "-v = be verbose", + "-d = Debug informatie", + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Forceer chronologische volgorde", + "-i = Negeer 'history' bestand", + "-p = Bewaar status (incremental)", + "-b = Negeer status (incremental)", + "-q = Geen informatieve info, wel foutmeldingen", + "-Q = Geen enkele info, ook geen foutmeldingen", + "-Y = Geen land-grafieken", + "-G = Geen uur-grafieken", + "-H = Geen uur-statistieken", + "-L = Geen legenda", + "-l num = Gebruik [num] achtergrondregels in grafiek", + "-m num = Bezoeker-onderbreking waarde (seconds)", + "-T = Geef verwerkingstijd informatie", + "-c bestand = Gebruik configuratie 'bestand'", + "-n naam = Gebruik host 'naam'", + "-o dir = Schrijf bestanden naar directory 'dir'", + "-t naam = Rapporttitel 'naam'", + "-a naam = Laat browser 'naam' weg", + "-r naam = Laat verwijzende pagina 'naam' weg", + "-s naam = Laat host 'naam' weg", + "-u naam = Laat URL 'naam' weg", + "-x naam = Gebruik bestands-extensie 'naam'", + "-O naam = Omit page 'naam'" , + "-P naam = Paginatype-extensie 'naam'", + "-I naam = Index alias 'naam'", + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Toon top 'num' browsers", + "-C num = Toon top 'num' landen", + "-R num = Toon top 'num' verwijzende pagina's", + "-S num = Toon top 'num' hosts", + "-U num = Toon top 'num' URL's", + "-e num = Toon top 'num' eerste pagina's van bezoekers", + "-E num = Toon top 'num' laatste pagina's van bezoekers", + "-g num = Groepeer Domeinen op 'num' niveaus", + "-X = Laat alle individuele hosts weg", + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D naam = Gebruik DNS Cache bestand 'naam'", + "-N num = Aantal DNS processen (0=uitschakelen)", + "-j = Enable native GeoDB lookups" , + "-J naam = Use GeoDB database 'naam'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W naam = Use GeoIP database 'naam'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Samenvatting periode"; +char *msg_hhdr_gt = "Gegenereerd op"; + +/* main index strings */ +char *msg_main_us = "Samenvatting -"; +/* char *msg_main_per= "afgelopen 12 maanden"; */ +char *msg_main_per= "Samenvatting per maand"; +char *msg_main_sum= "Samenvatting per maand"; +char *msg_main_da = "Dagelijks gemiddelde"; +char *msg_main_mt = "Totalen per maand"; + +/* month HTML page strings */ +char *msg_hmth_du = "Dagelijks bezoek -"; +char *msg_hmth_hu = "Bezoek per uur -"; + +/* table header strings */ +char *msg_h_by = "gesorteerd op"; +char *msg_h_avg = "Gem."; +char *msg_h_max = "Max."; +char *msg_h_total = "Totaal"; +char *msg_h_totals= "Totalen"; +char *msg_h_day = "Dag"; +char *msg_h_mth = "Maand"; +char *msg_h_hour = "Uur"; +char *msg_h_hits = "Hits"; /* "Aanvragen" is te lang en minder duidelijk */ +char *msg_h_pages = "Pagina's"; +char *msg_h_visits= "Bezoeken"; +char *msg_h_files = "Bestanden"; +char *msg_h_sites = "Hosts"; +char *msg_h_xfer = "kB"; /* afgekort i.v.m. onderschrift grafiek */ +char *msg_h_hname = "Host(naam)"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Browser"; +char *msg_h_ref = "Verwijzing"; +char *msg_h_ctry = "Land"; +char *msg_h_search= "Zoekopdracht"; +char *msg_h_uname = "Gebruikersnaam"; + +/* links along top of page */ +char *msg_hlnk_ds = "Overzicht per dag"; +char *msg_hlnk_hs = "Overzicht per uur"; +char *msg_hlnk_u = "URL's"; +char *msg_hlnk_s = "Hosts"; +char *msg_hlnk_a = "Browsers"; +char *msg_hlnk_c = "Landen"; +char *msg_hlnk_r = "Verwijzers"; +char *msg_hlnk_en = "Eerste"; +char *msg_hlnk_ex = "Laatste"; +char *msg_hlnk_sr = "Zoekopdrachten"; +char *msg_hlnk_i = "Gebruikersnamen"; + +/* monthly total table */ +char *msg_mtot_ms = "Maandoverzicht -"; +char *msg_mtot_th = "Totaal hits"; +char *msg_mtot_tf = "Totaal bestanden"; +char *msg_mtot_tx = "Totaal kilobytes"; +char *msg_mtot_us = "Totaal verschillende hosts"; +char *msg_mtot_ur = "Totaal verschillende verwijzers"; +char *msg_mtot_ua = "Totaal verschillende browsers"; +char *msg_mtot_uu = "Totaal verschillende URL's"; +char *msg_mtot_ui = "Totaal verschillende gebruikersnamen"; +char *msg_mtot_mhd= "Hits per dag"; +char *msg_mtot_mhh= "Hits per uur"; +char *msg_mtot_mfd= "Bestanden per dag"; +char *msg_mtot_mpd= "Pagina's per dag"; +char *msg_mtot_msd= "Hosts per dag"; +char *msg_mtot_mvd= "Bezoeken per dag"; +char *msg_mtot_mkd= "Kilobytes per dag"; +char *msg_mtot_rc = "Hits per 'Response Code'"; + +/* daily total table */ +char *msg_dtot_ds = "Overzicht per dag -"; + +/* hourly total table */ +char *msg_htot_hs = "Overzicht per uur -"; + +/* country pie chart */ +char *msg_ctry_use= "Overzicht per land -"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Top"; +char *msg_top_of = "van"; +char *msg_top_s = "hosts"; +char *msg_top_u = "URL's"; +char *msg_top_r = "verwijzende pagina's"; +char *msg_top_a = "browsers"; +char *msg_top_c = "landen"; +char *msg_top_en = "eerste pagina's"; +char *msg_top_ex = "laatste pagina's"; +char *msg_top_sr = "zoekopdrachten"; +char *msg_top_i = "gebruikersnamen"; +char *msg_v_sites = "Toon alle hosts"; +char *msg_v_urls = "Toon alle URL's"; +char *msg_v_refs = "Toon alle verwijzende pagina's"; +char *msg_v_agents= "Toon alle browsers"; +char *msg_v_search= "Toon alle zoekopdrachten"; +char *msg_v_users = "Toon alle gebruikersnamen"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "jan", "feb", "mar", + "apr", "mei", "jun", + "jul", "aug", "sep", + "okt", "nov", "dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "januari", "februari", "maart", "april", + "mei", "juni", "juli", "augustus", + "september","oktober", "november","december"}; + +/* response code descriptions... order IS important! */ +/* NIET vertaald omdat m.i. de Engelse benaming meer + bekendheid heeft dan een mogelijk onduidelijke + Nederlandse vertaling - Joe, 05 jun 1998 */ +struct response_code response[] = + { { "Onbekende 'response code'", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Rapport voor website"; +char *msg_h_other = "Anders"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Numeriek IP/onbekend", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercieel (.com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Onderwijs/onderzoek (.edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "Overheid (.gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Internationaal (.int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "Militair (.mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "'Netwerk' (.net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (.org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Arpanet (arpa, oude stijl)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato (.nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra (.ad)", 0,0,0 }, +{ IDX_2C('a','e'), "Ver. Arab. Emiraten (.ae)", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan (.af)", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua en Barbuda (.ag)", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla (.ai)", 0,0,0 }, +{ IDX_2C('a','l'), "Albanie (.al)", 0,0,0 }, +{ IDX_2C('a','m'), "Armenie (.am)", 0,0,0 }, +{ IDX_2C('a','n'), "Nederlandse Antillen (.an)", 0,0,0 }, +{ IDX_2C('a','o'), "Angola (.ao)", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica (.aq)", 0,0,0 }, +{ IDX_2C('a','r'), "Argentinie (.ar)", 0,0,0 }, +{ IDX_2C('a','s'), "Amerikaans Samoa (.as)", 0,0,0 }, +{ IDX_2C('a','t'), "Oostenrijk (.at)", 0,0,0 }, +{ IDX_2C('a','u'), "Australie (.au)", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba (.aw)", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azarbadzjan (.az)", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnie / Herzegovina (.ba)", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados (.bb)", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh (.bd)", 0,0,0 }, +{ IDX_2C('b','e'), "Belgie (.be)", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso (.bf)", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgarije (.bg)", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrijn (.bh)", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi (.bi)", 0,0,0 }, +{ IDX_2C('b','j'), "Benin (.bj)", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda (.bm)", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam (.bn)", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivie (.bo)", 0,0,0 }, +{ IDX_2C('b','r'), "Brazilie (.br)", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas (.bs)", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan (.bt)", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Eiland (.bv)", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana (.bw)", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus (.by)", 0,0,0 }, +{ IDX_2C('b','z'), "Belize(.bz)", 0,0,0 }, +{ IDX_2C('c','a'), "Canada (.ca)", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Eilanden (.cc)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central Afrikaanse Republiek (.cf)",0,0,0 }, +{ IDX_2C('c','g'), "Congo (.cg)", 0,0,0 }, +{ IDX_2C('c','h'), "Zwitserland (.ch)", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivoorkust) (.ci)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Eilanden (.ck)", 0,0,0 }, +{ IDX_2C('c','l'), "Chili (.cl)", 0,0,0 }, +{ IDX_2C('c','m'), "Kameroen (.cm)", 0,0,0 }, +{ IDX_2C('c','n'), "China (.cn)", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia (.co)", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica (.cr)", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba (.cu)", 0,0,0 }, +{ IDX_2C('c','v'), "Kaapverdie (.cv)", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island (.cx)", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus (.cy)", 0,0,0 }, +{ IDX_2C('c','z'), "Tsjechische republiek (.cz)", 0,0,0 }, +{ IDX_2C('d','e'), "Duitsland (.de)", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti (.dj)", 0,0,0 }, +{ IDX_2C('d','k'), "Denemarken (.dk)", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica (.dm)", 0,0,0 }, +{ IDX_2C('d','o'), "Dominikaanse Republiek (.do)", 0,0,0 }, +{ IDX_2C('d','z'), "Algarije (.dz)", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador (.ec)", 0,0,0 }, +{ IDX_2C('e','e'), "Estland (.ee)", 0,0,0 }, +{ IDX_2C('e','g'), "Egypte (.eg)", 0,0,0 }, +{ IDX_2C('e','h'), "Westelijke Sahara (.eh)", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea (.er)", 0,0,0 }, +{ IDX_2C('e','s'), "Spanje (.es)", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopie (.et)", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland (.fi)", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji (.fj)", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Eilanden (Malvinas, .fk)",0,0,0 }, +{ IDX_2C('f','m'), "Micronesie (.fm)", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Eilanden (.fo)", 0,0,0 }, +{ IDX_2C('f','r'), "Frankrijk (.fr)", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon (.ga)", 0,0,0 }, +{ IDX_2C('g','b'), "Groot Britannie (UK, .gb)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada (.gd)", 0,0,0 }, +{ IDX_2C('g','e'), "Georgie (.ge)", 0,0,0 }, +{ IDX_2C('g','f'), "Frans Guiana (.gf)", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana (.gh)", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar (.gi)", 0,0,0 }, +{ IDX_2C('g','l'), "Groenland (.gl)", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia (.gm)", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea (.gn)", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe (.gp)", 0,0,0 }, +{ IDX_2C('g','q'), "Equatoriaal Guinea (.gq)", 0,0,0 }, +{ IDX_2C('g','r'), "Griekenland (.gr)", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia en S. Sandwich Eil. (.gs)",0,0,0 }, +{ IDX_2C('g','t'), "Guatemala (.gt)", 0,0,0 }, +{ IDX_2C('g','u'), "Guam (.gu)", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau (.gw)", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana (.gy)", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong (.hk)", 0,0,0 }, +{ IDX_2C('h','m'), "Heard en McDonald Eilanden (.hm)", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras (.hn)", 0,0,0 }, +{ IDX_2C('h','r'), "Kroatie (.hr)", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti (.ht)", 0,0,0 }, +{ IDX_2C('h','u'), "Hongarije (.hu)", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesie (.id)", 0,0,0 }, +{ IDX_2C('i','e'), "Ierland (.ie)", 0,0,0 }, +{ IDX_2C('i','l'), "Israel (.il)", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India (.in)", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory (.io)",0,0,0 }, +{ IDX_2C('i','q'), "Iraq (.iq)", 0,0,0 }, +{ IDX_2C('i','r'), "Iran (.ir)", 0,0,0 }, +{ IDX_2C('i','s'), "IJsland (.is)", 0,0,0 }, +{ IDX_2C('i','t'), "Italie (.it)", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica (.jm)", 0,0,0 }, +{ IDX_2C('j','o'), "Jordanie (.jo)", 0,0,0 }, +{ IDX_2C('j','p'), "Japan (.jp)", 0,0,0 }, +{ IDX_2C('k','e'), "Kenia (.ke)", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan (.kg)", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodja (.kh)", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati (.ki)", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros (.km)", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts en Nevis (.kn)", 0,0,0 }, +{ IDX_2C('k','p'), "Korea (Noord, .kp)", 0,0,0 }, +{ IDX_2C('k','r'), "Korea (Zuid, .kr)", 0,0,0 }, +{ IDX_2C('k','w'), "Koeweit (.kw)", 0,0,0 }, +{ IDX_2C('k','y'), "Kaaiman Eilanden (.ky)", 0,0,0 }, +{ IDX_2C('k','z'), "Kazachstan (.kz)", 0,0,0 }, +{ IDX_2C('l','a'), "Laos (.la)", 0,0,0 }, +{ IDX_2C('l','b'), "Libanon (.lb)", 0,0,0 }, +{ IDX_2C('l','c'), "Sint Lucia (.lc)", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein (.li)", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka (.lk)", 0,0,0 }, +{ IDX_2C('l','r'), "Liberie (.lr)", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho (.ls)", 0,0,0 }, +{ IDX_2C('l','t'), "Litauwen (.lt)", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburg (.lu)", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia (.lv)", 0,0,0 }, +{ IDX_2C('l','y'), "Libie (.ly)", 0,0,0 }, +{ IDX_2C('m','a'), "Marokko (.ma)", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco (.mc)", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova (.md)", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar (.mg)", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Eilanden (.mh)", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonie (.mk)", 0,0,0 }, +{ IDX_2C('m','l'), "Mali (.ml)", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar (.mm)", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolie (.mn)", 0,0,0 }, +{ IDX_2C('m','o'), "Macau (.mo)", 0,0,0 }, +{ IDX_2C('m','p'), "Noordelijke Mariana Eilanden (.mp)",0,0,0 }, +{ IDX_2C('m','q'), "Martinique (.mq)", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritanie (.mr)", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat (.ms)", 0,0,0 }, +{ IDX_2C('m','t'), "Malta (.mt)", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius (.mu)", 0,0,0 }, +{ IDX_2C('m','v'), "Maldiven (.mv)", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi (.mw)", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico (.mx)", 0,0,0 }, +{ IDX_2C('m','y'), "Maleisie (.my)", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique (.mz)", 0,0,0 }, +{ IDX_2C('n','a'), "Namibie (.na)", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia (.nc)", 0,0,0 }, +{ IDX_2C('n','e'), "Niger (.ne)", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Eiland (.nf)", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria (.ng)", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua (.ni)", 0,0,0 }, +{ IDX_2C('n','l'), "Nederland (.nl)", 0,0,0 }, +{ IDX_2C('n','o'), "Noorwegen (.no)", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal (.np)", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru (.nr)", 0,0,0 }, +{ IDX_2C('n','u'), "Niue (.nu)", 0,0,0 }, +{ IDX_2C('n','z'), "Nieuw Zeeland (.nz)", 0,0,0 }, +{ IDX_2C('o','m'), "Oman (.om)", 0,0,0 }, +{ IDX_2C('p','a'), "Panama (.pa)", 0,0,0 }, +{ IDX_2C('p','e'), "Peru (.pe)", 0,0,0 }, +{ IDX_2C('p','f'), "Frans Polynesie (.pf)", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Nieuw Guinea (.pg)", 0,0,0 }, +{ IDX_2C('p','h'), "Philippijnen (.ph)", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan (.pk)", 0,0,0 }, +{ IDX_2C('p','l'), "Polen (.pl)", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre en Miquelon (.pm)", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn (.pn)", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico (.pr)", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal (.pt)", 0,0,0 }, +{ IDX_2C('p','w'), "Palau (.pw)", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay (.py)", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar (.qa)", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion (.re)", 0,0,0 }, +{ IDX_2C('r','o'), "Romania (.ro)", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russische Federatie (.ru)", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda (.rs)", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabie (.sa)", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Eilanden (.sb)", 0,0,0 }, +{ IDX_2C('s','c'), "Seychellen (.sc)", 0,0,0 }, +{ IDX_2C('s','d'), "Soedan (.sd)", 0,0,0 }, +{ IDX_2C('s','e'), "Zweden (.se)", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore (.sg)", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena (.sh)", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenie (.si)", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard en Jan Mayen Eilanden (.sj)",0,0,0 }, +{ IDX_2C('s','k'), "Slovakije (.sk)", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone (.sl)", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino (.sm)", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal (.sn)", 0,0,0 }, +{ IDX_2C('s','o'), "Somalie (.so)", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname (.sr)", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome en Principe (.st)", 0,0,0 }, +{ IDX_2C('s','u'), "USSR (voorheen, .su)", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador (.sv)", 0,0,0 }, +{ IDX_2C('s','y'), "Syrie (.sy)", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland (.sz)", 0,0,0 }, +{ IDX_2C('t','c'), "Turkse- en Caicos Eilanden (.tc)", 0,0,0 }, +{ IDX_2C('t','d'), "Tsjaad (.td)", 0,0,0 }, +{ IDX_2C('t','f'), "Zuidelijke Franse Terr. (.tf)", 0,0,0 }, +{ IDX_2C('t','g'), "Togo (.tg)", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand (.th)", 0,0,0 }, +{ IDX_2C('t','j'), "Tadzjikistan (.tj)", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau (.tk)", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan (.tm)", 0,0,0 }, +{ IDX_2C('t','n'), "Tunesie (.tn)", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga (.to)", 0,0,0 }, +{ IDX_2C('t','p'), "Oost Timor (.tp)", 0,0,0 }, +{ IDX_2C('t','r'), "Turkije (.tr)", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad en Tobago (.tt)", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu (.tv)", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan (.tw)", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania (.tz)", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine (.ua)", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda (.ug)", 0,0,0 }, +{ IDX_2C('u','k'), "Ver. Koninkrijk (UK, .uk)", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor buitenliggende eilanden (.um)",0,0,0 }, +{ IDX_2C('u','s'), "Verenigde Staten (USA, .us)", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay (.uy)", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan (.uz)", 0,0,0 }, +{ IDX_2C('v','a'), "Vatikaanstad (.va)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent en de Grenadinen (.vc)",0,0,0 }, +{ IDX_2C('v','e'), "Venezuela (.ve)", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British, .vg)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S., .vi)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam (.vn)", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu (.vu)", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis en Futuna Eilanden (.wf)", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa (.ws)", 0,0,0 }, +{ IDX_2C('y','e'), "Jemen (.ye)", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte (.yt)", 0,0,0 }, +{ IDX_2C('y','u'), "Joegoslavie (.yu)", 0,0,0 }, +{ IDX_2C('z','a'), "Zuid Africa (.za)", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia (.zm)", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe (.zw)", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.english b/webalizer-2.23-08/lang/webalizer_lang.english new file mode 100644 index 0000000..bda83d9 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.english @@ -0,0 +1,633 @@ +/* + webalizer_lang.english + + Webalizer V2.0x Language Support file for English. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "English"; +char *langcode = "en"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Summary Period"; +char *msg_hhdr_gt = "Generated"; + +/* main index strings */ +char *msg_main_us = "Usage summary for"; +/* char *msg_main_per= "Summary by Month"; */ +char *msg_main_per= "Summary by Month"; +char *msg_main_sum= "Summary by Month"; +char *msg_main_da = "Daily Avg"; +char *msg_main_mt = "Monthly Totals"; + +/* month HTML page strings */ +char *msg_hmth_du = "Daily usage for"; +char *msg_hmth_hu = "Hourly usage for"; + +/* table header strings */ +char *msg_h_by = "By"; +char *msg_h_avg = "Avg"; +char *msg_h_max = "Max"; +char *msg_h_total = "Total"; +char *msg_h_totals= "Totals"; +char *msg_h_day = "Day"; +char *msg_h_mth = "Month"; +char *msg_h_hour = "Hour"; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Pages"; +char *msg_h_visits= "Visits"; +char *msg_h_files = "Files"; +char *msg_h_sites = "Sites"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Hostname"; +char *msg_h_url = "URL"; +char *msg_h_agent = "User Agent"; +char *msg_h_ref = "Referrer"; +char *msg_h_ctry = "Country"; +char *msg_h_search= "Search String"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "Daily Statistics"; +char *msg_hlnk_hs = "Hourly Statistics"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Sites"; +char *msg_hlnk_a = "Agents"; +char *msg_hlnk_c = "Countries"; +char *msg_hlnk_r = "Referrers"; +char *msg_hlnk_en = "Entry"; +char *msg_hlnk_ex = "Exit"; +char *msg_hlnk_sr = "Search"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = "Monthly Statistics for"; +char *msg_mtot_th = "Total Hits"; +char *msg_mtot_tf = "Total Files"; +char *msg_mtot_tx = "Total KBytes"; +char *msg_mtot_us = "Total Unique Sites"; +char *msg_mtot_ur = "Total Unique Referrers"; +char *msg_mtot_ua = "Total Unique User Agents"; +char *msg_mtot_uu = "Total Unique URLs"; +char *msg_mtot_ui = "Total Unique Usernames"; +char *msg_mtot_mhd= "Hits per Day"; +char *msg_mtot_mhh= "Hits per Hour"; +char *msg_mtot_mfd= "Files per Day"; +char *msg_mtot_mpd= "Pages per Day"; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "Visits per Day"; +char *msg_mtot_mkd= "KBytes per Day"; +char *msg_mtot_rc = "Hits by Response Code"; + +/* daily total table */ +char *msg_dtot_ds = "Daily Statistics for"; + +/* hourly total table */ +char *msg_htot_hs = "Hourly Statistics for"; + +/* country pie chart */ +char *msg_ctry_use= "Usage by Country for"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Top"; +char *msg_top_of = "of"; +char *msg_top_s = "Total Sites"; +char *msg_top_u = "Total URLs"; +char *msg_top_r = "Total Referrers"; +char *msg_top_a = "Total User Agents"; +char *msg_top_c = "Total Countries"; +char *msg_top_en = "Total Entry Pages"; +char *msg_top_ex = "Total Exit Pages"; +char *msg_top_sr = "Total Search Strings"; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "View All Sites"; +char *msg_v_urls = "View All URLs"; +char *msg_v_refs = "View All Referrers"; +char *msg_v_agents= "View All User Agents"; +char *msg_v_search= "View All Search Strings"; +char *msg_v_users = "View All Usernames"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "January", "February", "March", "April", + "May", "June", "July", "August", + "September","October", "November","December"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Usage Statistics for"; +char *msg_h_other = "Other"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.estonian b/webalizer-2.23-08/lang/webalizer_lang.estonian new file mode 100644 index 0000000..e260368 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.estonian @@ -0,0 +1,632 @@ +/* + webalizer_lang.estonian + + Webalizer V2.0x Language Support file for Estonian. + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 11-Aug-1999 Translation into estonian by Mrt Laak + 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 tkataloogi"; +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 vtmesna"; +char *msg_bad_date= "Viga: Ignoreerin kirjet (vigane kuupev)"; +char *msg_ign_nscp= "Ignoreerin Netscape piskirjet"; +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 kokkuvtterapotit"; +char *msg_get_data= "Loen eelmise kivitamise andmeid..."; +char *msg_put_data= "Salvestan antud (jooksva) kivitamise andmeid..."; +char *msg_no_data = "Eelmise kivitamise andmeid ei leitud..."; +char *msg_bad_data= "Viga: Ei suuda lugeda eelmise kivitamise andmeid"; +char *msg_data_err= "Viga: Ei suuda salvestada kivitamise andmeid"; +char *msg_dup_data= "Hoiatus: Tenoliselt 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 mlu, Arvutite edetabelit ei tee!"; +char *msg_nomem_tr= "Ei suuda reserveerida piisavalt mlu, Linkijate edetabelit ei tee!"; +char *msg_nomem_tu= "Ei suuda reserveerida piisavalt mlu, Aadresside edetabelit ei tee!"; +char *msg_nomem_tc= "Ei suuda reserveerida piisavalt mlu, Maade edetabelit ei tee!"; +char *msg_nomem_ta= "Ei suuda reserveerida piisavalt mlu, Lehitsejate edetabelit ei tee!"; +char *msg_nomem_tsr="Ei suuda reserveerida piisavalt mlu, Otsistringide edetabelit ei tee!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Arvuti lisamisel (pevade kaupa) viga, jtan vahele"; +char *msg_nomem_mh= "Arvuti lisamisel (kuude kaupa) viga, jtan vahele"; +char *msg_nomem_u = "URLi lisamisel viga, jtan vahele"; +char *msg_nomem_a = "Lehitseja lisamisel viga, jtan vahele"; +char *msg_nomem_r = "Linkija lisamisel viga, jtan vahele"; +char *msg_nomem_sc= "Otsistringi lisamisel viga, jtan vahele"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Viga: jtan vahele liigpika logikirje"; +char *msg_big_host= "Hoiatus: Teen lhemaks liigpika arvutinime"; +char *msg_big_date= "Hoiatus: Teen lhemaks liigpika kuupevavlja"; +char *msg_big_req = "Hoiatus: Teen lhemaks liigpika pringuvlja"; +char *msg_big_ref = "Hoiatus: Teen lhemaks liigpika linkija-vlja"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Hoiatus: Stringi pikkus letab lubatud mlumahu"; + +/* 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 tiendav debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = ignoreeri kirjete jrjestuse vigu" , + "-i = ignoreeri ajaloofaili" , + "-p = silita olek (inkrementaalne rezhiim)", + "-b = ignoreeri olek (inkrementaalne rezhiim)", + "-q = keela informatiivsed teated" , + "-Q = keela KIK teated" , + "-Y = keela maade graafik" , + "-G = keela tunnigraafik" , + "-H = keela tunnistatistika" , + "-L = keela vrvilegendide kuva" , + "-l num = kasuta graafikutel {num} horisontaaljoont", + "-m num = viisidi timeout vrtus (seconds)" , + "-T = kuva ajakulu info" , + "-c file = kasuta konfiguratsioonifaili 'file'" , + "-n name = kasuta nime {hostname}" , + "-o dir = kasuta vljundiks 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 = lehekljeks 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} vljundpunkti" , + "-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 = "Kokkuvte perioodile"; +char *msg_hhdr_gt = "genereeritud"; + +/* main index strings */ +char *msg_main_us = "Kasutuse kokkuvte"; +/* char *msg_main_per= "Viimased 12 kuud"; */ +char *msg_main_per= "Kokkuvtted kuude kaupa"; +char *msg_main_sum= "Kokkuvtted kuude kaupa"; +char *msg_main_da = "Peva keskm."; +char *msg_main_mt = "Kuu kokku"; + +/* month HTML page strings */ +char *msg_hmth_du = "Kasutuspevad"; +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 = "Pev"; +char *msg_h_mth = "Kuu"; +char *msg_h_hour = "Tund"; +char *msg_h_hits = "Prdumisi"; +char *msg_h_pages = "Leheklgi"; +char *msg_h_visits= "Klastusi"; +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 = "Pevade 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 = "Vljundpunkt"; +char *msg_hlnk_sr = "Otsisna"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = "Kuu statistika"; +char *msg_mtot_th = "Kokku Prdumisi"; +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= "Prdumisi Pevas"; +char *msg_mtot_mhh= "Prdumisi Tunnis"; +char *msg_mtot_mfd= "Faile Pevas"; +char *msg_mtot_mpd= "Leheklgi Pevas"; +char *msg_mtot_msd= "Klastajaarvutist Pevas"; +char *msg_mtot_mvd= "Visiite Pevas"; +char *msg_mtot_mkd= "KBaite Pevas"; +char *msg_mtot_rc = "Prdumisi vastusetpide kaupa"; + +/* daily total table */ +char *msg_dtot_ds = "Pevade 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 = "kigist"; +char *msg_top_s = "klastajaarvutist"; +char *msg_top_u = "klastatud aadressist"; +char *msg_top_r = "ettetulnud linkijast"; +char *msg_top_a = "kasutatud lehitsejast"; +char *msg_top_c = "klastajamaast"; +char *msg_top_en = "sisendpunktist"; +char *msg_top_ex = "vljundpunktist"; +char *msg_top_sr = "kasutatud otsisnast"; +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", "Mr", + "Apr", "Mai", "Jun", + "Jul", "Aug", "Sep", + "Okt", "Nov", "Det"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Jaanuar", "Veebruar", "Mrts", "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 Sjaline (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'), "Julusaared", 0,0,0 }, +{ IDX_2C('c','y'), "Kpros", 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'), "Lne 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'), "Krgzstan", 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'), "Phja-Korea", 0,0,0 }, +{ IDX_2C('k','r'), "Luna-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'), "Lti", 0,0,0 }, +{ IDX_2C('l','y'), "Liiba", 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 Polneesia", 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 Fderatsioon", 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'), "Sria", 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'), "Trgi", 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'), "Luna-Aafrika Vabariik", 0,0,0 }, +{ IDX_2C('z','m'), "Sambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.finnish b/webalizer-2.23-08/lang/webalizer_lang.finnish new file mode 100644 index 0000000..d99fbd0 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.finnish @@ -0,0 +1,640 @@ +/* + webalizer_lang.finnish + + Webalizer V2.0x Language Support file for Finnish. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 25-Feb-2000 Translate to Finnish by Eero Martikainen + (eero.martikainen@flamenet.com) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 05-Feb-2001 Grammar and spelling corrections by Osma Suominen (ozone@iki.fi) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Finnish"; +char *langcode = "fi"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ +/* Errors, help and setup messages not translated by finnish. */ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Virhe: Tiedostoa ei voi avata:"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* Tst 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 = "Kyttyhteenveto:"; +/* char *msg_main_per= "Viimeisimmt 12 kuukautta"; */ +char *msg_main_per= "Kuukausittainen yhteenveto"; +char *msg_main_sum= "Kuukausittainen yhteenveto"; +char *msg_main_da = "Pivien keskiarvo"; +char *msg_main_mt = "Yhteens kuukaudessa"; + +/* month HTML page strings */ +char *msg_hmth_du = "Pivittinen kytt"; +char *msg_hmth_hu = "Tunnittainen kytt"; + +/* 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 = "Piv"; +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 = "Vlityspalvelin"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Kytetyt selaimet"; +char *msg_h_ref = "Hakupalvelimet / Linkit sivuille"; +char *msg_h_ctry = "Valtiot"; +char *msg_h_search= "Hakusana"; +char *msg_h_uname = "Kyttjnimi"; + +/* links along top of page */ +char *msg_hlnk_ds = "Pivtilastot"; +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 = "Sisntulosivut"; +char *msg_hlnk_ex = "Ulosmenosivut"; +char *msg_hlnk_sr = "Hakusanat"; +char *msg_hlnk_i = "Kyttjt"; + +/* 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 kyttjnimi"; +char *msg_mtot_mhd= "Osumia / piv"; +char *msg_mtot_mhh= "Osumia / tunti"; +char *msg_mtot_mfd= "Tiedostoja / piv"; +char *msg_mtot_mpd= "Sivuja / piv"; +char *msg_mtot_msd= "Koneita / piv"; +char *msg_mtot_mvd= "Vierailuja / piv"; +char *msg_mtot_mkd= "Kilotavuja / piv"; +char *msg_mtot_rc = "Osumien vastauskoodit"; + +/* daily total table */ +char *msg_dtot_ds = "Pivittiset tilastot"; + +/* hourly total table */ +char *msg_htot_hs = "Tuntitilastot"; + +/* country pie chart */ +char *msg_ctry_use= "Kyttji 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 = "sisntulosivusta"; +char *msg_top_ex = "ulosmenosivusta"; +char *msg_top_sr = "hakusanasta"; +char *msg_top_i = "kyttjnimest"; +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 kyttjnimet"; + +/* 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", "keskuussa", "heinkuussa", "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 - Hyvksytty", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - Ei sislt", 0 }, + { "Code 205 - Tyhjenn sislt", 0 }, + { "Code 206 - Osittainen sislt", 0 }, + { "Code 300 - Useita vaihtoehtoja", 0 }, + { "Code 301 - Siirretty pysyvsti", 0 }, + { "Code 302 - Lytyi", 0 }, + { "Code 303 - Katso toinen", 0 }, + { "Code 304 - Ei muutettu", 0 }, + { "Code 305 - Kyt vlityspalvelinta", 0 }, + { "Code 307 - Siirretty tilapisesti", 0 }, + { "Code 400 - Huono pyynt", 0 }, + { "Code 401 - Ei kyttoikeutta", 0 }, + { "Code 402 - Maksu vaaditaan", 0 }, + { "Code 403 - Kielletty", 0 }, + { "Code 404 - Ei lytynyt", 0 }, + { "Code 405 - Metodi ei ole sallittu", 0 }, + { "Code 406 - Ei hyvksyttv", 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 sisinen 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 = "Kytttilastot"; +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'), "Kansainvlinen (.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'), "Etelnapamantere", 0,0,0 }, +{ IDX_2C('a','r'), "Argentiina", 0,0,0 }, +{ IDX_2C('a','s'), "Amerikan Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Itvalta", 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-Venj", 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'), "Lntinen 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'), "Frsaaret", 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'), "Venj", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Ruotsi", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakian Tasavalta", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegali", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Neuvostoliitto (ent.)", 0,0,0 }, +{IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{IDX_2C('s','y'), "Syyria", 0,0,0 }, +{IDX_2C('s','z'), "Swazimaa", 0,0,0 }, +{IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{IDX_2C('t','d'), "Chad", 0,0,0 }, +{IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{IDX_2C('t','g'), "Togo", 0,0,0 }, +{IDX_2C('t','h'), "Thaimaa", 0,0,0 }, +{IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{IDX_2C('t','o'), "Tonga", 0,0,0 }, +{IDX_2C('t','p'), "It Timori", 0,0,0 }, +{IDX_2C('t','r'), "Turkki", 0,0,0 }, +{IDX_2C('t','t'), "Trinidad ja Tobago", 0,0,0 }, +{IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{IDX_2C('t','z'), "Tansania", 0,0,0 }, +{IDX_2C('u','a'), "Ukraina", 0,0,0 }, +{IDX_2C('u','g'), "Uganda", 0,0,0 }, +{IDX_2C('u','k'), "Iso-Britannia", 0,0,0 }, +{IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{IDX_2C('u','s'), "Yhdysvallat", 0,0,0 }, +{IDX_2C('u','y'), "Uruguai", 0,0,0 }, +{IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{IDX_2C('v','a'), "Vatikaani", 0,0,0 }, +{IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{IDX_2C('w','s'), "Samoa", 0,0,0 }, +{IDX_2C('y','e'), "Jemen", 0,0,0 }, +{IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{IDX_2C('y','u'), "Jugoslavia", 0,0,0 }, +{IDX_2C('z','a'), "Etel-Afrikka", 0,0,0 }, +{IDX_2C('z','m'), "Sambia", 0,0,0 }, +{IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.french b/webalizer-2.23-08/lang/webalizer_lang.french new file mode 100644 index 0000000..843f8df --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.french @@ -0,0 +1,676 @@ +/* + webalizer_lang.french + + Webalizer V2.0x Language Support file for French. + 04-Jun-1998 Translation by Sylvain Avril (savril@oceanet.fr) + 04-Jun-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 20-Feb-1999 Added non-extended char l_month array (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 27-Jan-2000 Translation complements by Christophe Aubert (ca@tgi.fr) + 11-Fev-2000 Minor complements by Laurent Monin(lmonin@metaconcept.com) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 17-Mar-2000 French support for level 2.0 (lmonin@metaconcept.com) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net + +*/ + +/* + Traduit par Sylvain AVRIL (savril@oceanet.fr, + http://www.coucounet.com/sylvain/) + - Oceanet (http://www.oceanet.fr/) + + Je n'ai pas traduit les messages d'erreurs qui me paraissaient etre plus + clairs en anglais +*/ + +/* + Complements de traduction par Christophe AUBERT (ca@tgi.fr) + - TGI (http://www.tgi.fr/) + + J'ai traduit les noms de pays ainsi que differents titres ... + Les messages d'erreurs restent en anglais +*/ + +/* + Complements mineurs de traduction par Laurent MONIN + - lmonin@metaconcept.com + + J'ai traduit Kbytes --> KOctets + et certains pays conformement DNS/BIND 3eme edition + Les messages d'erreurs restent en anglais + Adaptation pour version 2.0 +*/ + + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "French"; +char *langcode = "fr"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data..."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timeout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Pé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 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.galician b/webalizer-2.23-08/lang/webalizer_lang.galician new file mode 100644 index 0000000..faf0ee9 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.galician @@ -0,0 +1,639 @@ +/* + webalizer_lang.galician + + Webalizer V2.0x Language Support file for Galician + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 22-Apr-2001 Galician translation by Alberto Cifuentes (balea@arrakis.es) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Galician"; +char *langcode = "gl"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "rexistros"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignorados"; +char *msg_bad = "errneos"; +char *msg_in = "en"; +char *msg_seconds = "segundos"; + +/* progress and setup erro messages */ +char *msg_log_err = "Erro: Non podo abrir histrico"; +char *msg_log_use = "Utilizando histrico"; +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 mquina no informe "; +char *msg_ign_hist= "Ignorando rexistro anterior..."; +char *msg_no_hist = "Non atopo o arquivo histrico..."; +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 vlido no arquivo"; +char *msg_bad_conf= "Erro: non podo abri-lo arquivo de configuracin"; +char *msg_bad_key = "Aviso: palabra chave errnea"; +char *msg_bad_date= "Erro: ignorando rexistro (data errnea)"; +char *msg_ign_nscp= "Saltando rexistro de cabeceira Netscape"; +char *msg_bad_rec = "Saltando rexistro errneo"; +char *msg_no_vrec = "Non atopo ningun rexistro vlido"; +char *msg_gen_rpt = "Xerando informe de"; +char *msg_gen_sum = "Xerando informe resumido"; +char *msg_get_data= "Lendo datos dunha execucin previa..."; +char *msg_put_data= "Grabando datos da execucin actual..."; +char *msg_no_data = "Datos de execucin previa non atopados..."; +/*char *msg_bad_data= "Rexistro de datos invlidos";*/ +char *msg_bad_data= "Erro: Non podo carga-os datos da execucin"; +char *msg_data_err= "Erro: Non podo graba-os datos da execucin 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 ligazns"; +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 pases"; +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 (dario), 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 ligazn 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 histrico grande de abondoh"; +char *msg_big_host= "Aviso: Cortando nome de mquina 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 ligazn 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 = "[opcins] [arquivo histrico]"; +char *h_msg[]= { + "-h = sacar esta mensaxe" , + "-V = ver informacion de versin" , + "-v = be verbose" , + "-d = sacar informacin adicional para depuracin" , + "-F type = Log type. type= (clf | ftp | squid | w3c)" , + "-f = procesa historicos fra de secuencia (ver man)", + "-i = ignorar arquivo" , + "-p = lembrar estado (incremental)" , + "-b = ignorar estado (incremental)" , + "-q = suprimir mensaxes de informacion" , + "-Q = suprimir TDALAS mensaxes" , + "-Y = suprimir grafico de pases" , + "-G = suprimir grfico horario" , + "-H = suprimir estatsticas horarias" , + "-L = suprimir lendas coloreadas dos grficos" , + "-l num = usar num las de fondo nos grficos" , + "-m num = especificar temporizador de visitas (seconds)", + "-T = sacar informacion de horario" , + "-c arquivo= usar arquivo de configuracion 'arquivo'" , + "-n nome = nome de mquina" , + "-o dir = directorio de sada" , + "-t nome = titula-lo informe 'nome'" , + "-a nome = acocha-lo programa cliente 'nome'" , + "-r nome = acocha-la ligazn orixe 'nome'" , + "-s nome = acocha-lo servidor 'nome'" , + "-u nome = acocha-lo URL 'nome'" , + "-x nome = usa extensin de arquivos 'nome'" , + "-O nome = Omit page 'nome'" , + "-P nome = usa extensin de pxinas '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 pases" , + "-R n = Mostra-las n primeiras ligazns orixe" , + "-S n = Mostra-los n primeiros clientes" , + "-U n = Mostra-los n primeiros URLs" , + "-e n = Mostra-las n primeiras pxinas de entrada" , + "-E n = Mostra-las n primeiras pxinas de sada" , + "-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 = "Perodo 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 = "Meda daria"; +char *msg_main_mt = "Totais mensuais"; + +/* month HTML page strings */ +char *msg_hmth_du = "Uso dario en"; +char *msg_hmth_hu = "Uso por horas en"; + +/* table header strings */ +char *msg_h_by = "Por"; +char *msg_h_avg = "Meda"; +char *msg_h_max = "Mx."; +char *msg_h_total = "Total"; +char *msg_h_totals= "Totais"; +char *msg_h_day = "Da"; +char *msg_h_mth = "Mes"; +char *msg_h_hour = "Hora"; +char *msg_h_hits = "Accesos"; +char *msg_h_pages = "Pxinas"; +char *msg_h_visits= "Visitas"; +char *msg_h_files = "Arquivos"; +char *msg_h_sites = "Clientes"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Mquina"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Programa cliente"; +char *msg_h_ref = "Ligazn orixe"; +char *msg_h_ctry = "Pases"; +char *msg_h_search= "Cadea de Bsca"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "Estatsiticas darias"; +char *msg_hlnk_hs = "Estatsticas por horas"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Clientes"; +char *msg_hlnk_a = "Programas visores"; +char *msg_hlnk_c = "Pases"; +char *msg_hlnk_r = "Ligazns orixe"; +char *msg_hlnk_en = "Entrada"; +char *msg_hlnk_ex = "Sada"; +char *msg_hlnk_sr = "Busca"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = "Estatsticas 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 Ligazns 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 Da"; +char *msg_mtot_mhh= "Accesos por Hora"; +char *msg_mtot_mfd= "Arquivos por Da"; +char *msg_mtot_mpd= "Pxinas por Da"; +char *msg_mtot_msd= "Clientes por Da"; +char *msg_mtot_mvd= "Visitas por Da"; +char *msg_mtot_mkd= "KBytes por Da"; +char *msg_mtot_rc = "Accesos por cdigo de resposta"; + +/* daily total table */ +char *msg_dtot_ds = "Estatsticas diarias de"; + +/* hourly total table */ +char *msg_htot_hs = "Estatsticas horarias de"; + +/* country pie chart */ +char *msg_ctry_use= "Accesos por pases 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 = "ligazns orixe"; +char *msg_top_a = "programas de cliente"; +char *msg_top_c = "pases"; +char *msg_top_en = "Total Pxinas de Entrada"; +char *msg_top_ex = "Total Pxinas de Sada"; +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", "Xuo", "Xullo", "Agosto", + "Setembro","Outubro", "Novembro","Decembro"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Cdigo de resposta indefinido", 0 }, + { "100 - Contnua", 0 }, + { "101 - Cambiando de protocolo", 0 }, + { "200 - OK", 0 }, + { "201 - Creado", 0 }, + { "202 - Aceptado", 0 }, + { "203 - Informacin non autorizada", 0 }, + { "204 - Non hai contido", 0 }, + { "205 - Contido renovado", 0 }, + { "206 - Contido parcial", 0 }, + { "300 - Varias opcins", 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 - Peticin errnea", 0 }, + { "401 - Non autorizado", 0 }, + { "402 - precisoun pago", 0 }, + { "403 - Prohibido", 0 }, + { "404 - Non se atopa", 0 }, + { "405 - Mtodo non permitido", 0 }, + { "406 - Non aceptable", 0 }, + { "407 - precisa a autentificacin de proxy", 0 }, + { "408 - Fn de tempo de espera", 0 }, + { "409 - Conflicto", 0 }, + { "410 - Abandoado", 0 }, + { "411 - precisa a lonxitude", 0 }, + { "412 - Falla a condicin previa", 0 }, + { "413 - Entidad de peticin grande de abondo", 0 }, + { "414 - URL de peticin demasiado longa", 0 }, + { "415 - Medio non soportado", 0 }, + { "416 - Non se pode satisface-lo rango pedido", 0 }, + { "417 - Falla o que agardbase", 0 }, + { "500 - Erro interno do servidor", 0 }, + { "501 - Non implementado", 0 }, + { "502 - Porta de ligazn incorrecta", 0 }, + { "503 - Servicio non disponible", 0 }, + { "504 - Fn de tempo de espera para a porta de ligazn", 0 }, + { "505 - Versin de HTTP non soportada", 0 } }; + +char *msg_title = "Estatsticas de uso para"; +char *msg_h_other = "Outro"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Non resolve/descoecido", 0,0,0 }, +{ IDX_3C('c','o','m'), "Comercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educacin (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'), "Exrcito EUA (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Redo (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizacins 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'), "Afganistn", 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'), "Antrtida", 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'), "Azerbaixn", 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'), "Blxica", 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'), "Bhutn", 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'), "Repblica Centroafricana", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Suza", 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'), "Camern", 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'), "Repblica Checa", 0,0,0 }, +{ IDX_2C('d','e'), "Alemaa", 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'), "Repblica 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'), "Shara Occidental", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Espaa", 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'), "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'), "Gabn", 0,0,0 }, +{ IDX_2C('g','b'), "Gran Bretaa (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 Ocano ndico", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Irn", 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'), "Xamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Xordania", 0,0,0 }, +{ IDX_2C('j','p'), "Xapn", 0,0,0 }, +{ IDX_2C('k','e'), "Quenia", 0,0,0 }, +{ IDX_2C('k','g'), "Quirxizstn", 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 Caimn", 0,0,0 }, +{ IDX_2C('k','z'), "Cazacstn", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Libano", 0,0,0 }, +{ IDX_2C('l','c'), "Santa Luca", 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'), "Mnaco", 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'), "Mxico", 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'), "Omn", 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'), "Paquistn", 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'), "Reunin", 0,0,0 }, +{ IDX_2C('r','o'), "Rumania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Federacin 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 Slomon", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudn", 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'), "Repblica 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'), "Swazilanda", 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'), "Tailanda", 0,0,0 }, +{ IDX_2C('t','j'), "Taxiquistn", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turcmenistn", 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'), "Turqua", 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'), "Uzbequistn", 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 Vrxenes (Britnicas)", 0,0,0 }, +{ IDX_2C('v','i'), "Illas Vrxenes (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'), "Sudfrica", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; + diff --git a/webalizer-2.23-08/lang/webalizer_lang.german b/webalizer-2.23-08/lang/webalizer_lang.german new file mode 100644 index 0000000..4e3b68d --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.german @@ -0,0 +1,666 @@ +/* + webalizer_lang.german + + Webalizer V2.0x language support file for German. + 28-May-1998 translated by Dirk Meyer + 31-May-1998 portions by Bernd Dau + 31-May-1998 modified for level 1.1 support + 02-Jun-1998 translation level 1.1 by Dirk Meyer + 30-Jun-1998 typing errors fixed by Dirk Kocherscheidt + 23-Jul-1998 modified for level 1.2 support + 01-Aug-1998 translation redone by SysWolf + 09-Oct-1998 changes added by Soren Gust + 09-Oct-1998 changes added by Martin Kraemer + 24-Dec-1998 names of countries by Dirk Kocherscheidt + 24-Dec-1998 grammar and spelling by Dirk Meyer + 10-Jan-1999 improvements by Winfried Trmper + 05-Mrz-1999 improvements by Winfried Trmper + 06-Mrz-1999 new usage by Dirk Meyer + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 09-Mrz-1999 new result codes by Dirk Meyer + 24-May-1999 fixed umlaut coding by Arne Blankerts + 11-Jun-1999 clean-up by Wolfgang Schemmel + 12-Jun-1999 remove english terms by Dirk Meyer + 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 + 04-Feb-2000 Minor fixes by Marcus Schommer + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 05-Feb-2000 level 2.0 by Dirk Meyer + 16-Jun-2003 grammar and spelling by Dirk Randhahn + 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 + + + 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 = "Eintrge"; +char *msg_addresses="Adressen"; +char *msg_ignored = "ignoriert"; +char *msg_bad = "ungltig"; +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 fr 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 ungltigen historischen Eintrag."; +char *msg_bad_conf= "Fehler: Kann die Konfigurations-Datei nicht lesen."; +char *msg_bad_key = "Warnung: unbekanntes Schlsselwort"; +char *msg_bad_date= "Fehler: Der Eintrag wird bersprungen (Datum ungltig)."; +char *msg_ign_nscp= "berspringe den Netscape Kopfeintrag."; +char *msg_bad_rec = "berspringe den ungltigen Eintrag."; +char *msg_no_vrec = "Keine gltigen Eintrge gefunden!"; +char *msg_gen_rpt = "Erzeuge den Bericht fr"; +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: Mglicherweise wurden Daten doppelt gelesen."; + +/* DNS Stuff */ +char *msg_dns_nocf= "Es wurde keine Datei fr den DNS-Cache angegeben, breche ab..."; +char *msg_dns_nodb= "Fehler: Die Datei fr den DNS-Cache konnte nicht geffnet werden."; +char *msg_dns_nolk= "Fehler: Die Datei fr den DNS-Cache konnte nicht verriegelt werden."; +char *msg_dns_usec= "Benutze die Datei fr den DNS-Cache"; +char *msg_dns_rslv= "DNS Abfrage"; +char *msg_dns_none= "Nichts zu bearbeiten"; +char *msg_dns_abrt= "DNS Unterstzung 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 Suchausdrcke wurden deaktiviert!"; +char *msg_nomem_ti= "Nicht genug Speicher vorhanden, Top Benutzer wurden deaktiviert!"; +char *msg_nomem_dh= "Fehler beim Hinzufgen Rechner-node (daily), berspringe den Eintrag."; +char *msg_nomem_mh= "Fehler beim Hinzufgen Rechner-node (monthly), berspringe den Eintrag."; +char *msg_nomem_u = "Fehler beim Hinzufgen URL-node, berspringe den Eintrag."; +char *msg_nomem_a = "Fehler beim Hinzufgen User-Agent-node, berspringe den Eintrag."; +char *msg_nomem_r = "Fehler beim Hinzufgen Verweis-node, berspringe den Eintrag."; +char *msg_nomem_sc= "Fehler beim Hinzufgen Suchausdrucks-node, berspringe den Eintrag."; +char *msg_nomem_i = "Fehler beim Hinzufgen 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 = zustzliche 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 unterdrcken" , + "-Q = alle Meldungen unterdrcken" , + "-Y = Lndergrafik unterdrcken" , + "-G = Stundengrafik unterdrcken" , + "-H = Stundenstatistik unterdrcken" , + "-L = Farbige Lnderlegende unterdrcken" , + "-l anz = 'Anz' Hintergrundlinien in Grafik verwenden", + "-m num = Timeout fr 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' unterdrcken", + "-r name = Verweiser 'name' unterdrcken" , + "-s name = Rechner 'name' unterdrcken" , + "-u name = URL 'name' unterdrcken" , + "-x name = Dateiendung 'name' verwenden" , + "-O name = Lasse die Seite 'name' weg." , + "-P name = Seitenendung 'name' verwenden" , + "-I name = weiteren Name fr 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' Lnder 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 Domnen zu 'anz' Ebenen" , + "-X = Verstecke einzelne Rechner" , + "-z dir = Verwende Fahnen fr die Lnder in 'dir'", +#ifdef USE_DNS + "-D name = Benutze die Datei 'name' fr DNS-Cache" , + "-N num = Anzahl Prozesse fr 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 = "Lndern"; +char *msg_top_en = "Eingangsseiten Gesamt"; +char *msg_top_ex = "Ausgangsseiten Gesamt"; +char *msg_top_sr = "Suchausdrcke 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 Suchausdrcke"; +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 ungltig", 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 Gerte (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-Barthlemy", 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'), "Europische 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 (franzsisch)", 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'), "Palstinas", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau (Belau)", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Katar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Rumaenien", 0,0,0 }, +{ IDX_2C('r','s'), "Serbien", 0,0,0 }, +{ IDX_2C('r','u'), "Russische Foederation", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabien", 0,0,0 }, +{ IDX_2C('s','b'), "Solomonen", 0,0,0 }, +{ IDX_2C('s','c'), "Seychellen", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Schweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapur", 0,0,0 }, +{ IDX_2C('s','h'), "Sankt Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slowenien", 0,0,0 }, +{ IDX_2C('s','j'), "Spitzbergen und Jan Mayen Inseln", 0,0,0 }, +{ IDX_2C('s','k'), "Slowakei", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome und Principe", 0,0,0 }, +{ IDX_2C('s','u'), "UdSSR (alt)", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrien", 0,0,0 }, +{ IDX_2C('s','z'), "Swasiland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks und Caicos Inseln", 0,0,0 }, +{ IDX_2C('t','d'), "Tschad", 0,0,0 }, +{ IDX_2C('t','f'), "Franz. Sued-Territorien", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tadschikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunesien", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Ost-Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Tuerkei", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad und Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tansania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda (alt)", 0,0,0 }, +{ IDX_2C('u','k'), "Grossbritannien", 0,0,0 }, +{ IDX_2C('u','m'), "USA Inseln", 0,0,0 }, +{ IDX_2C('u','s'), "USA", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Usbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatikan", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent und Grenadinen", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Jungferninseln (Britisch)", 0,0,0 }, +{ IDX_2C('v','i'), "Jungferninseln (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu (Neue Hebriden)", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis und Futuna Inseln", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Jemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslawien (Serbien)", 0,0,0 }, +{ IDX_2C('z','a'), "Suedafrika", 0,0,0 }, +{ IDX_2C('z','m'), "Sambia", 0,0,0 }, +{ IDX_2C('z','w'), "Simbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymisierter Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satelliten Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Sonstige", 0,0,0 }, +{ IDX_2C('a','p'), "Gebiet Asien/Pacifik", 0,0,0 }, +{ IDX_3C('l','a','n'), "Loakales Netzwerk (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.greek b/webalizer-2.23-08/lang/webalizer_lang.greek new file mode 100644 index 0000000..f127db9 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.greek @@ -0,0 +1,631 @@ +/* + webalizer_lang.greek + + Webalizer V2.0x Language Support file for Greek + 19-Aug-1999 Translated in Greek by Christos Cheretakis (xalkina@otenet.gr) + 22-Feb-2000 Modified for level 2.0x support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Greek"; +char *langcode = "el"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = ""; +char *msg_addresses="addresses"; +char *msg_ignored = ""; +char *msg_bad = ""; +char *msg_in = ""; +char *msg_seconds = ""; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username field"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = " "; +char *msg_hhdr_gt = " "; + +/* main index strings */ +char *msg_main_us = " "; +/* char *msg_main_per= " 12 "; */ +char *msg_main_per= " "; +char *msg_main_sum= " "; +char *msg_main_da = " "; +char *msg_main_mt = " "; + +/* month HTML page strings */ +char *msg_hmth_du = " : "; +char *msg_hmth_hu = " : "; + +/* table header strings */ +char *msg_h_by = ""; +char *msg_h_avg = ""; +char *msg_h_max = ""; +char *msg_h_total = ""; +char *msg_h_totals= ""; +char *msg_h_day = ""; +char *msg_h_mth = ""; +char *msg_h_hour = ""; +char *msg_h_hits = "Hits"; +char *msg_h_pages = ""; +char *msg_h_visits= ""; +char *msg_h_files = ""; +char *msg_h_sites = ""; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = ""; +char *msg_h_url = "URL"; +char *msg_h_agent = ""; +char *msg_h_ref = ""; +char *msg_h_ctry = ""; +char *msg_h_search= ""; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = " "; +char *msg_hlnk_hs = " "; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = ""; +char *msg_hlnk_a = ""; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = ""; +char *msg_hlnk_en = " "; +char *msg_hlnk_ex = " "; +char *msg_hlnk_sr = ""; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = " "; +char *msg_mtot_th = " Hits"; +char *msg_mtot_tf = " "; +char *msg_mtot_tx = " KBytes"; +char *msg_mtot_us = " "; +char *msg_mtot_ur = " "; +char *msg_mtot_ua = " "; +char *msg_mtot_uu = " URLs"; +char *msg_mtot_ui = "Total Unique Usernames"; +char *msg_mtot_mhd= "Hits "; +char *msg_mtot_mhh= "Hits "; +char *msg_mtot_mfd= " "; +char *msg_mtot_mpd= " "; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= " "; +char *msg_mtot_mkd= "KBytes "; +char *msg_mtot_rc = "Hits "; + +/* daily total table */ +char *msg_dtot_ds = " -"; + +/* hourly total table */ +char *msg_htot_hs = " -"; + +/* country pie chart */ +char *msg_ctry_use= " -"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = ""; +char *msg_top_of = ""; +char *msg_top_s = ""; +char *msg_top_u = "URLs"; +char *msg_top_r = ""; +char *msg_top_a = ""; +char *msg_top_c = ""; +char *msg_top_en = " "; +char *msg_top_ex = " "; +char *msg_top_sr = ""; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "View All Sites"; +char *msg_v_urls = "View All URLs"; +char *msg_v_refs = "View All Referrers"; +char *msg_v_agents= "View All User Agents"; +char *msg_v_search= "View All Search Strings"; +char *msg_v_users = "View All Usernames"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "", "", "", + "", "", "", + "", "", "", + "", "", ""}; + +/* long month names - can be any length */ +char *l_month[12]={ "", "", "", "", + "", "", "", "", + "", "", "", ""}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = " "; +char *msg_h_other = ""; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "", 0,0,0 }, +{ IDX_3C('c','o','m'), " (...)", 0,0,0 }, +{ IDX_3C('e','d','u'), " (...)", 0,0,0 }, +{ IDX_3C('g','o','v'), " (...)", 0,0,0 }, +{ IDX_3C('i','n','t'), " ", 0,0,0 }, +{ IDX_3C('m','i','l'), " (...)", 0,0,0 }, +{ IDX_3C('n','e','t'), " ", 0,0,0 }, +{ IDX_3C('o','r','g'), " ", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a')," (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"....", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "", 0,0,0 }, +{ IDX_2C('a','e'), " ", 0,0,0 }, +{ IDX_2C('a','f'), "", 0,0,0 }, +{ IDX_2C('a','g'), " ", 0,0,0 }, +{ IDX_2C('a','i'), "", 0,0,0 }, +{ IDX_2C('a','l'), "", 0,0,0 }, +{ IDX_2C('a','m'), "", 0,0,0 }, +{ IDX_2C('a','n'), " ", 0,0,0 }, +{ IDX_2C('a','o'), "", 0,0,0 }, +{ IDX_2C('a','q'), "", 0,0,0 }, +{ IDX_2C('a','r'), "", 0,0,0 }, +{ IDX_2C('a','s'), " ", 0,0,0 }, +{ IDX_2C('a','t'), "", 0,0,0 }, +{ IDX_2C('a','u'), "", 0,0,0 }, +{ IDX_2C('a','w'), "", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "", 0,0,0 }, +{ IDX_2C('b','a'), " ", 0,0,0 }, +{ IDX_2C('b','b'), "", 0,0,0 }, +{ IDX_2C('b','d'), "", 0,0,0 }, +{ IDX_2C('b','e'), "", 0,0,0 }, +{ IDX_2C('b','f'), " ", 0,0,0 }, +{ IDX_2C('b','g'), "", 0,0,0 }, +{ IDX_2C('b','h'), "", 0,0,0 }, +{ IDX_2C('b','i'), "", 0,0,0 }, +{ IDX_2C('b','j'), "", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "", 0,0,0 }, +{ IDX_2C('b','n'), " ", 0,0,0 }, +{ IDX_2C('b','o'), "", 0,0,0 }, +{ IDX_2C('b','r'), "", 0,0,0 }, +{ IDX_2C('b','s'), "", 0,0,0 }, +{ IDX_2C('b','t'), "", 0,0,0 }, +{ IDX_2C('b','v'), "", 0,0,0 }, +{ IDX_2C('b','w'), "", 0,0,0 }, +{ IDX_2C('b','y'), "", 0,0,0 }, +{ IDX_2C('b','z'), "", 0,0,0 }, +{ IDX_2C('c','a'), "", 0,0,0 }, +{ IDX_2C('c','c'), " ", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), " ", 0,0,0 }, +{ IDX_2C('c','g'), "", 0,0,0 }, +{ IDX_2C('c','h'), "", 0,0,0 }, +{ IDX_2C('c','i'), " ", 0,0,0 }, +{ IDX_2C('c','k'), " ", 0,0,0 }, +{ IDX_2C('c','l'), "", 0,0,0 }, +{ IDX_2C('c','m'), "", 0,0,0 }, +{ IDX_2C('c','n'), "", 0,0,0 }, +{ IDX_2C('c','o'), "", 0,0,0 }, +{ IDX_2C('c','r'), " ", 0,0,0 }, +{ IDX_2C('c','u'), "", 0,0,0 }, +{ IDX_2C('c','v'), " ", 0,0,0 }, +{ IDX_2C('c','x'), " ", 0,0,0 }, +{ IDX_2C('c','y'), "", 0,0,0 }, +{ IDX_2C('c','z'), "", 0,0,0 }, +{ IDX_2C('d','e'), "", 0,0,0 }, +{ IDX_2C('d','j'), "", 0,0,0 }, +{ IDX_2C('d','k'), "", 0,0,0 }, +{ IDX_2C('d','m'), "", 0,0,0 }, +{ IDX_2C('d','o'), " ", 0,0,0 }, +{ IDX_2C('d','z'), "", 0,0,0 }, +{ IDX_2C('e','c'), "", 0,0,0 }, +{ IDX_2C('e','e'), "", 0,0,0 }, +{ IDX_2C('e','g'), "", 0,0,0 }, +{ IDX_2C('e','h'), " ", 0,0,0 }, +{ IDX_2C('e','r'), "", 0,0,0 }, +{ IDX_2C('e','s'), "", 0,0,0 }, +{ IDX_2C('e','t'), "", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "", 0,0,0 }, +{ IDX_2C('f','j'), "", 0,0,0 }, +{ IDX_2C('f','k'), " ", 0,0,0 }, +{ IDX_2C('f','m'), "", 0,0,0 }, +{ IDX_2C('f','o'), " ", 0,0,0 }, +{ IDX_2C('f','r'), "", 0,0,0 }, +{ IDX_2C('g','a'), "", 0,0,0 }, +{ IDX_2C('g','b'), " ", 0,0,0 }, +{ IDX_2C('g','d'), "", 0,0,0 }, +{ IDX_2C('g','e'), "", 0,0,0 }, +{ IDX_2C('g','f'), " ", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "", 0,0,0 }, +{ IDX_2C('g','i'), "", 0,0,0 }, +{ IDX_2C('g','l'), "", 0,0,0 }, +{ IDX_2C('g','m'), "", 0,0,0 }, +{ IDX_2C('g','n'), "", 0,0,0 }, +{ IDX_2C('g','p'), "", 0,0,0 }, +{ IDX_2C('g','q'), " ", 0,0,0 }, +{ IDX_2C('g','r'), "", 0,0,0 }, +{ IDX_2C('g','s'), " ", 0,0,0 }, +{ IDX_2C('g','t'), "", 0,0,0 }, +{ IDX_2C('g','u'), "", 0,0,0 }, +{ IDX_2C('g','w'), " ", 0,0,0 }, +{ IDX_2C('g','y'), "", 0,0,0 }, +{ IDX_2C('h','k'), " ", 0,0,0 }, +{ IDX_2C('h','m'), " ", 0,0,0 }, +{ IDX_2C('h','n'), "", 0,0,0 }, +{ IDX_2C('h','r'), "", 0,0,0 }, +{ IDX_2C('h','t'), "", 0,0,0 }, +{ IDX_2C('h','u'), "", 0,0,0 }, +{ IDX_2C('i','d'), "", 0,0,0 }, +{ IDX_2C('i','e'), "", 0,0,0 }, +{ IDX_2C('i','l'), "", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "", 0,0,0 }, +{ IDX_2C('i','o'), " ", 0,0,0 }, +{ IDX_2C('i','q'), "", 0,0,0 }, +{ IDX_2C('i','r'), "", 0,0,0 }, +{ IDX_2C('i','s'), "", 0,0,0 }, +{ IDX_2C('i','t'), "", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "", 0,0,0 }, +{ IDX_2C('j','o'), "", 0,0,0 }, +{ IDX_2C('j','p'), "", 0,0,0 }, +{ IDX_2C('k','e'), "", 0,0,0 }, +{ IDX_2C('k','g'), "", 0,0,0 }, +{ IDX_2C('k','h'), "", 0,0,0 }, +{ IDX_2C('k','i'), "", 0,0,0 }, +{ IDX_2C('k','m'), "", 0,0,0 }, +{ IDX_2C('k','n'), " ", 0,0,0 }, +{ IDX_2C('k','p'), " ", 0,0,0 }, +{ IDX_2C('k','r'), " ", 0,0,0 }, +{ IDX_2C('k','w'), "", 0,0,0 }, +{ IDX_2C('k','y'), " ", 0,0,0 }, +{ IDX_2C('k','z'), "", 0,0,0 }, +{ IDX_2C('l','a'), "", 0,0,0 }, +{ IDX_2C('l','b'), "", 0,0,0 }, +{ IDX_2C('l','c'), " ", 0,0,0 }, +{ IDX_2C('l','i'), "", 0,0,0 }, +{ IDX_2C('l','k'), " ", 0,0,0 }, +{ IDX_2C('l','r'), "", 0,0,0 }, +{ IDX_2C('l','s'), "", 0,0,0 }, +{ IDX_2C('l','t'), "", 0,0,0 }, +{ IDX_2C('l','u'), "", 0,0,0 }, +{ IDX_2C('l','v'), "", 0,0,0 }, +{ IDX_2C('l','y'), "", 0,0,0 }, +{ IDX_2C('m','a'), "", 0,0,0 }, +{ IDX_2C('m','c'), "", 0,0,0 }, +{ IDX_2C('m','d'), "", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "", 0,0,0 }, +{ IDX_2C('m','h'), " ", 0,0,0 }, +{ IDX_2C('m','k'), "", 0,0,0 }, +{ IDX_2C('m','l'), "", 0,0,0 }, +{ IDX_2C('m','m'), "", 0,0,0 }, +{ IDX_2C('m','n'), "", 0,0,0 }, +{ IDX_2C('m','o'), "", 0,0,0 }, +{ IDX_2C('m','p'), " ", 0,0,0 }, +{ IDX_2C('m','q'), "", 0,0,0 }, +{ IDX_2C('m','r'), "", 0,0,0 }, +{ IDX_2C('m','s'), "", 0,0,0 }, +{ IDX_2C('m','t'), "", 0,0,0 }, +{ IDX_2C('m','u'), "", 0,0,0 }, +{ IDX_2C('m','v'), "", 0,0,0 }, +{ IDX_2C('m','w'), "", 0,0,0 }, +{ IDX_2C('m','x'), "", 0,0,0 }, +{ IDX_2C('m','y'), "", 0,0,0 }, +{ IDX_2C('m','z'), "", 0,0,0 }, +{ IDX_2C('n','a'), "", 0,0,0 }, +{ IDX_2C('n','c'), " ", 0,0,0 }, +{ IDX_2C('n','e'), "", 0,0,0 }, +{ IDX_2C('n','f'), " ", 0,0,0 }, +{ IDX_2C('n','g'), "", 0,0,0 }, +{ IDX_2C('n','i'), "", 0,0,0 }, +{ IDX_2C('n','l'), "", 0,0,0 }, +{ IDX_2C('n','o'), "", 0,0,0 }, +{ IDX_2C('n','p'), "", 0,0,0 }, +{ IDX_2C('n','r'), "", 0,0,0 }, +{ IDX_2C('n','u'), "", 0,0,0 }, +{ IDX_2C('n','z'), " ", 0,0,0 }, +{ IDX_2C('o','m'), "", 0,0,0 }, +{ IDX_2C('p','a'), "", 0,0,0 }, +{ IDX_2C('p','e'), "", 0,0,0 }, +{ IDX_2C('p','f'), " ", 0,0,0 }, +{ IDX_2C('p','g'), " ", 0,0,0 }, +{ IDX_2C('p','h'), "", 0,0,0 }, +{ IDX_2C('p','k'), "", 0,0,0 }, +{ IDX_2C('p','l'), "", 0,0,0 }, +{ IDX_2C('p','m'), " ", 0,0,0 }, +{ IDX_2C('p','n'), "", 0,0,0 }, +{ IDX_2C('p','r'), " ", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "", 0,0,0 }, +{ IDX_2C('p','w'), "", 0,0,0 }, +{ IDX_2C('p','y'), "", 0,0,0 }, +{ IDX_2C('q','a'), "", 0,0,0 }, +{ IDX_2C('r','e'), "", 0,0,0 }, +{ IDX_2C('r','o'), "", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "", 0,0,0 }, +{ IDX_2C('r','w'), "", 0,0,0 }, +{ IDX_2C('s','a'), " ", 0,0,0 }, +{ IDX_2C('s','b'), " ", 0,0,0 }, +{ IDX_2C('s','c'), "", 0,0,0 }, +{ IDX_2C('s','d'), "", 0,0,0 }, +{ IDX_2C('s','e'), "", 0,0,0 }, +{ IDX_2C('s','g'), "", 0,0,0 }, +{ IDX_2C('s','h'), " ", 0,0,0 }, +{ IDX_2C('s','i'), "", 0,0,0 }, +{ IDX_2C('s','j'), " ", 0,0,0 }, +{ IDX_2C('s','k'), "", 0,0,0 }, +{ IDX_2C('s','l'), " ", 0,0,0 }, +{ IDX_2C('s','m'), " ", 0,0,0 }, +{ IDX_2C('s','n'), "", 0,0,0 }, +{ IDX_2C('s','o'), "", 0,0,0 }, +{ IDX_2C('s','r'), "", 0,0,0 }, +{ IDX_2C('s','t'), " ", 0,0,0 }, +{ IDX_2C('s','u'), " ....", 0,0,0 }, +{ IDX_2C('s','v'), " ", 0,0,0 }, +{ IDX_2C('s','y'), "", 0,0,0 }, +{ IDX_2C('s','z'), "", 0,0,0 }, +{ IDX_2C('t','c'), " ", 0,0,0 }, +{ IDX_2C('t','d'), "", 0,0,0 }, +{ IDX_2C('t','f'), " ", 0,0,0 }, +{ IDX_2C('t','g'), "", 0,0,0 }, +{ IDX_2C('t','h'), "", 0,0,0 }, +{ IDX_2C('t','j'), "", 0,0,0 }, +{ IDX_2C('t','k'), "", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "", 0,0,0 }, +{ IDX_2C('t','n'), "", 0,0,0 }, +{ IDX_2C('t','o'), "", 0,0,0 }, +{ IDX_2C('t','p'), " ", 0,0,0 }, +{ IDX_2C('t','r'), "", 0,0,0 }, +{ IDX_2C('t','t'), " ", 0,0,0 }, +{ IDX_2C('t','v'), "", 0,0,0 }, +{ IDX_2C('t','w'), "", 0,0,0 }, +{ IDX_2C('t','z'), "", 0,0,0 }, +{ IDX_2C('u','a'), "", 0,0,0 }, +{ IDX_2C('u','g'), "", 0,0,0 }, +{ IDX_2C('u','k'), " ", 0,0,0 }, +{ IDX_2C('u','m'), " ...", 0,0,0 }, +{ IDX_2C('u','s'), "...", 0,0,0 }, +{ IDX_2C('u','y'), "", 0,0,0 }, +{ IDX_2C('u','z'), "", 0,0,0 }, +{ IDX_2C('v','a'), "", 0,0,0 }, +{ IDX_2C('v','c'), " ", 0,0,0 }, +{ IDX_2C('v','e'), "", 0,0,0 }, +{ IDX_2C('v','g'), " ", 0,0,0 }, +{ IDX_2C('v','i'), " (...)", 0,0,0 }, +{ IDX_2C('v','n'), "", 0,0,0 }, +{ IDX_2C('v','u'), "", 0,0,0 }, +{ IDX_2C('w','f'), " ", 0,0,0 }, +{ IDX_2C('w','s'), "", 0,0,0 }, +{ IDX_2C('y','e'), "", 0,0,0 }, +{ IDX_2C('y','t'), "", 0,0,0 }, +{ IDX_2C('y','u'), "", 0,0,0 }, +{ IDX_2C('z','a'), " ", 0,0,0 }, +{ IDX_2C('z','m'), "", 0,0,0 }, +{ IDX_2C('z','w'), "", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.hungarian b/webalizer-2.23-08/lang/webalizer_lang.hungarian new file mode 100644 index 0000000..9504f2a --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.hungarian @@ -0,0 +1,638 @@ +/* + webalizer_lang.hungarian + + Webalizer V2.0x Language Support file for Hungarian. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 20-Jul-1999 Translated by Viktor Haas (haasviki@hotmail.com) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 27-Mar-2000 Modified hungarian translation for level 2.0 by + Viktor Haas (haasviki@hotmail.com) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Magyar"; +char *langcode = "hu"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "rekord"; +char *msg_addresses="addresses"; +char *msg_ignored = "mellztt"; +char *msg_bad = "rossz"; +char *msg_in = ""; +char *msg_seconds = "msodperc alatt"; + +/* progress and setup error messages */ +char *msg_log_err = "Hiba: Nem tudom megnyitni a log file-t"; +char *msg_log_use = "Hasznlom a logfile-t"; +char *msg_dir_err = "Hiba: Nem tudom megvltoztatni a knyvtrat erre: "; +char *msg_dir_use = "Ksztem a kimenetet:"; +char *msg_cur_dir = "jelenlegi knyvtr"; +char *msg_hostname= "A jelentsnek a hostneve:"; +char *msg_ign_hist= "Mellzm az elz history-t..."; +char *msg_no_hist = "History file-t nem tallom..."; +char *msg_get_hist= "Olvasom a history file-t..."; +char *msg_put_hist= "Mentem a history informcit..."; +char *msg_hist_err= "Hiba: Nem tudom rni a history file-t"; +char *msg_bad_hist= "Hiba: Mellzm rvnytelen history rekordot"; +char *msg_bad_conf= "Hiba: Nem tudom megnyitni a konfigurcis file-t"; +char *msg_bad_key = "Figyelmeztets: rvnytelen kulcssz"; +char *msg_bad_date= "Hiba: Kihagyom a rekordot (rossz dtum)"; +char *msg_ign_nscp= "Kihagyom Netscape header rekordot"; +char *msg_bad_rec = "Kihagyom a rossz rekordot"; +char *msg_no_vrec = "Nem talltam rvnyes rekordokat!"; +char *msg_gen_rpt = "Ksztem a jelents:"; +char *msg_gen_sum = "Ksztem az sszefoglalt jelentst"; +char *msg_get_data= "Olvasom az elz futatott adatokat.."; +char *msg_put_data= "Mentem a jelenlegi futatott adatokat..."; +char *msg_no_data = "Az elz futatott adatokat nem tallom..."; +char *msg_bad_data= "Hiba: Nem tudom helyrelltani a futatott adatokat"; +char *msg_data_err= "Hiba: Nem tudom menteni a jelenlegi futatott adatokat"; +char *msg_dup_data= "Figyelmeztets: Lehetsges ismtelt adatot talltam"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nincs cache file elrva, megszakts..."; +char *msg_dns_nodb= "Hiba: Nem lehet megnyitni a DNS cache file-t"; +char *msg_dns_nolk= "Hiba: Nem lehet zrni a DNS cache file-t"; +char *msg_dns_usec= "Hasznlom a DNS cache file-t"; +char *msg_dns_rslv= "DNS kikeress"; +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 memrit lefoglalni, Top Oldal tiltva!"; +char *msg_nomem_tr= "Nem tudok elegend memrit lefoglalni, Top Hivatkozs tiltva!"; +char *msg_nomem_tu= "Nem tudok elegend memrit lefoglalni, Top URL tiltva!"; +char *msg_nomem_tc= "Nem tudok elegend memrit lefoglalni, Top Orszg tiltva!"; +char *msg_nomem_ta= "Nem tudok elegend memrit lefoglalni, Top Felhasznl bngszje tiltva!"; +char *msg_nomem_tsr="Nem tudok elegend memrit lefoglalni, Top Keressi string tiltva!"; +char *msg_nomem_ti= "Nem tudok elegend memrit lefoglalni, Top Felhasznlnevek tiltva!"; +char *msg_nomem_dh= "Hiba a hozzadsnl host node (napi), kihagyom"; +char *msg_nomem_mh= "Hiba a hozzadsnl host node (havi), kihagyom"; +char *msg_nomem_u = "Hiba a hozzadsnl URL node, kihagyom"; +char *msg_nomem_a = "Hiba a hozzadsnl Agent node, kihagyom"; +char *msg_nomem_r = "Hiba a hozzadsnl Hivatkozs node, kihagyom"; +char *msg_nomem_sc= "Hiba a hozzadsnl Keressi string Node, kihagyom"; +char *msg_nomem_i = "Hiba a felhasznlnv node hozzadsnl, kihagyom"; + +/* log record errors */ +char *msg_big_rec = "Hiba: Kihagyom a tl nagy log rekordot"; +char *msg_big_host= "Figyelmeztets: Lervidtem a tl hossz hostnevet"; +char *msg_big_date= "Figyelmeztets: Levgom a tl nagy adat mezt"; +char *msg_big_req = "Figyelmeztets: Levgom a tl nagy krs mezt"; +char *msg_big_ref = "Figyelmeztets: Levgom a tl nagy hivatkozs mezt"; +char *msg_big_user= "Figyelmeztets: Levgom a tl nagy felhasznlnevet"; +char *msg_big_one = "Figyelmeztets: String nagyob a trolhat mretnl"; + +/* misc errors */ +char *msg_no_open = "Hiba: Nem tudom megnytni a file-t"; + +/* Help display... */ +char *h_usage1 = "Hasznlat"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = Kirja ezt a sug zenetet" , + "-V = Kirja a verziszmot" , + "-v = be verbose" , + "-d = Kirja a tovbbi debug inft" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = sszefogja a sorozatos hibkat" , + "-i = Mellzi a history file-t" , + "-p = Megrzi 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 = Hasznlja a konfigurcis file-t 'file'", + "-n name = Hostnv amit hasznljon" , + "-o dir = Kimeneti knyvtr" , + "-t name = Report cme 'name'" , + "-a name = Rejtse a felhasznl bngszjt 'name'", + "-r name = Rejtse a hivatkozst 'name'" , + "-s name = Rejtse az oldalt 'name'" , + "-u name = Rejtse az URL-t 'name'" , + "-x name = Hasznlja a filenv kiterjesztst 'name'", + "-O name = Omit page 'name'" , + "-P name = Oldal tipusnak a kiterjesztse '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 = Hasznlja 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 = "Vizsglati idszak"; +char *msg_hhdr_gt = "Kszlt:"; + +/* main index strings */ +char *msg_main_us = "Hasznlat sszegzse:"; +/* char *msg_main_per= "Elmlt 12 Hnap"; */ +char *msg_main_per= "Havi sszefoglals"; +char *msg_main_sum= "Havi sszefoglals"; +char *msg_main_da = "Napi tlag"; +char *msg_main_mt = "Havi sszegzs"; + +/* month HTML page strings */ +char *msg_hmth_du = "Napi hasznlat:"; +char *msg_hmth_hu = "rnknti hasznlat:"; + +/* 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= "sszegzs"; +char *msg_h_day = "Nap"; +char *msg_h_mth = "Hnap"; +char *msg_h_hour = "ra"; +char *msg_h_hits = "Tallatok"; +char *msg_h_pages = "Lapok"; +char *msg_h_visits= "Ltogatk"; +char *msg_h_files = "File-ok"; +char *msg_h_sites = "Oldalak"; +char *msg_h_xfer = "KByte"; +char *msg_h_hname = "Hostnv"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Felhasznl bngszje"; +char *msg_h_ref = "Hivatkozs"; +char *msg_h_ctry = "Orszg"; +char *msg_h_search= "Keressi String"; +char *msg_h_uname = "Felhasznlnv"; + +/* links along top of page */ +char *msg_hlnk_ds = "Napi Statisztika"; +char *msg_hlnk_hs = "rnknti Statisztika"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Oldalak"; +char *msg_hlnk_a = "Bngszk"; +char *msg_hlnk_c = "Orszgok"; +char *msg_hlnk_r = "Hivatkozsok"; +char *msg_hlnk_en = "Belps"; +char *msg_hlnk_ex = "Kilps"; +char *msg_hlnk_sr = "Keress"; +char *msg_hlnk_i = "Felhasznlk"; + +/* monthly total table */ +char *msg_mtot_ms = "Havi Statisztika:"; +char *msg_mtot_th = "sszes Tallat"; +char *msg_mtot_tf = "sszes File"; +char *msg_mtot_tx = "sszes KByte"; +char *msg_mtot_us = "sszes klnbz Oldal"; +char *msg_mtot_ur = "sszes klnbz Hivatkozs"; +char *msg_mtot_ua = "sszes klnbz Felhasznl bngszje"; +char *msg_mtot_uu = "sszes klnbz URL"; +char *msg_mtot_ui = "sszes klnbz Felhasznlnevek"; +char *msg_mtot_mhd= "Tallat/nap"; +char *msg_mtot_mhh= "Tallat/ra"; +char *msg_mtot_mfd= "File/nap"; +char *msg_mtot_mpd= "Lap/nap"; +char *msg_mtot_msd= "Oldal/nap"; +char *msg_mtot_mvd= "Ltogat/nap"; +char *msg_mtot_mkd= "KByte/nap"; +char *msg_mtot_rc = "Vlaszkdok ltali tallatok"; + +/* daily total table */ +char *msg_dtot_ds = "Napi Statisztika:"; + +/* hourly total table */ +char *msg_htot_hs = "rnknti Statisztika:"; + +/* country pie chart */ +char *msg_ctry_use= "Orszgok ltali hasznlat:"; + +/* 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 Hivatkozs"; +char *msg_top_a = "sszes Felhasznl bngszje"; +char *msg_top_c = "sszes Orszg"; +char *msg_top_en = "sszes Belpsi lap"; +char *msg_top_ex = "sszes Kilpsi lap"; +char *msg_top_sr = "sszes Keressi string"; +char *msg_top_i = "sszes Felhasznlnevek"; +char *msg_v_sites = "sszes Oldal megtekintse"; +char *msg_v_urls = "sszes URL megtekintse"; +char *msg_v_refs = "sszes Hivatkozs megtekintse"; +char *msg_v_agents= "sszes Felhasznl bngszje megtekintse"; +char *msg_v_search= "sszes Keressi string megtekintse"; +char *msg_v_users = "sszes Felhasznl megtekintse"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mr", + "pr", "Mj", "Jn", + "Jl", "Aug", "Sep", + "Okt", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Janur", "Februr", "Mrcius", "prilis", + "Mjus", "Jnius", "Jlius", "Augusztus", + "Szeptember","Oktber", "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 = "Hasznlati Statisztika:"; +char *msg_h_other = "Ms"; + +/* 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'), "Magyarorszg", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.icelandic b/webalizer-2.23-08/lang/webalizer_lang.icelandic new file mode 100644 index 0000000..387d9a0 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.icelandic @@ -0,0 +1,640 @@ +/* + webalizer_lang.icelandic + + Webalizer V2.0x Language Support file for Icelandic. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 15-Dec-2000 Translated to icelandic (isak@snerpa.is] + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + I used as a guide an older file that Kristofer & Veigar had + Translated for 1.3. + This was originally the english version...i just translated it. + Still a few lines i didn't have time do dig up translations on maybe + i'll do it later...or maybe someone else will? ;) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Icelandic"; +char *langcode = "is"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "skrningar"; +char *msg_addresses="fr"; +char *msg_ignored = "hunsaar"; +char *msg_bad = "gallaar"; +char *msg_in = ""; +char *msg_seconds = "sekndum"; + +/* progress and setup error messages */ +char *msg_log_err = "Villa: Get ekki opna annla"; +char *msg_log_use = "Nota annla"; +char *msg_dir_err = "Villa: Get ekki fari mppuna:"; +char *msg_dir_use = "B til ttak "; +char *msg_cur_dir = "Nverandi mappa"; +char *msg_hostname= "Nafn jns fyrir skrslur er:"; +char *msg_ign_hist= "Hunsa fyrri atburi..."; +char *msg_no_hist = "Finn ekki atburaskr..."; +char *msg_get_hist= "Les atburaskr..."; +char *msg_put_hist= "Vista atburaskr..."; +char *msg_hist_err= "Villa: Get ekki skrifa atburaskr"; +char *msg_bad_hist= "Villa: Gllu atburaskrning"; +char *msg_bad_conf= "Villa: Get ekki opna stillingaskr"; +char *msg_bad_key = "Var: Rangt lykilor"; +char *msg_bad_date= "Villa: Sleppi skrningu, gllu dagsetning"; +char *msg_ign_nscp= "Sleppi Netscape hausskrningu"; +char *msg_bad_rec = "Sleppi gallari skrningu"; +char *msg_no_vrec = "Engar skrningar fundnar lagi!"; +char *msg_gen_rpt = "B til skrningu fyrir"; +char *msg_gen_sum = "B til stutta skrningu"; +char *msg_get_data= "Les eldri ggn.."; +char *msg_put_data= "Vista nverandi ggn..."; +char *msg_no_data = "Eldri ggn fundust ekki..."; +char *msg_bad_data= "Villa: Get ekki endurheimt ggn"; +char *msg_data_err= "Villa: Get ekki vista nverandi ggn"; +char *msg_dup_data= "Avrun: Mguleiki tvskrum ggnum"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Enginn cache skr skilgreind, htti vi..."; +char *msg_dns_nodb= "Villa: Get ekki opna DNS cache skr"; +char *msg_dns_nolk= "Villa: Get get ekki lsta 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 ng minni, sleppi Top Sites!"; +char *msg_nomem_tr= "Get ekki fundi ng minni, Top Referrers!"; +char *msg_nomem_tu= "Get ekki fundi ng minni, Top URLs!"; +char *msg_nomem_tc= "Get ekki fundi ng minni, Top Countries!"; +char *msg_nomem_ta= "Get ekki fundi ng minni, Top User Agents!"; +char *msg_nomem_tsr="Get ekki fundi ng minni, Top Search Strings!"; +char *msg_nomem_ti= "Get ekki fundi ng 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 strum annlum"; +char *msg_big_host= "Avrun: Minnka of strt host nafn"; +char *msg_big_date= "Avrun: Minnka of stra dags. lnu"; +char *msg_big_req = "Avrun: Minnka of stra request lnu"; +char *msg_big_ref = "Avrun: Minnka of stra referrer lnu"; +char *msg_big_user= "Avrun: Minnka of strt notandanafn"; +char *msg_big_one = "Avrun: Strengur er strri en geymsluplss"; + +/* 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 hjlp" , + "-V = prentar tgfu upplsingar" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F tegund = Annla 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 = "Tmabil"; +char *msg_hhdr_gt = "Skrsla ger"; + +/* main index strings */ +char *msg_main_us = "Yfirlit heimskn fyrir"; +/* char *msg_main_per= "Sustu 12 mnuir "; */ +char *msg_main_per= "Yfirlit eftir mnuum"; +char *msg_main_sum= "Yfirlit eftir mnuum"; +char *msg_main_da = "Dags mealtal"; +char *msg_main_mt = "Samtals mnui"; + +/* 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 = "Mealtal"; +char *msg_h_max = "Mest"; +char *msg_h_total = "Samtals"; +char *msg_h_totals= "Samtals"; +char *msg_h_day = "Dagur"; +char *msg_h_mth = "Mnuur"; +char *msg_h_hour = "Klukkustund"; +char *msg_h_hits = "Beinir"; +char *msg_h_pages = "Sur"; +char *msg_h_visits= "Heimsknir"; +char *msg_h_files = "Skrr"; +char *msg_h_sites = "Sites"; +char *msg_h_xfer = "KBti"; +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 samtlur"; +char *msg_hlnk_hs = "Klukkustundar samtlur"; +char *msg_hlnk_u = "Slir"; +char *msg_hlnk_s = "Sur"; +char *msg_hlnk_a = "Agents"; +char *msg_hlnk_c = "Lnd"; +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 = "Mnaar Samtlur fyrir"; +char *msg_mtot_th = "Samtals Beinir"; +char *msg_mtot_tf = "Samtals Skrr"; +char *msg_mtot_tx = "Samtals KBti"; +char *msg_mtot_us = "Samtals Einstakar Sur"; +char *msg_mtot_ur = "Samtals Unique Referrers"; +char *msg_mtot_ua = "Samtals Unique User Agents"; +char *msg_mtot_uu = "Samtals Einstakar Slir"; +char *msg_mtot_ui = "Samtals Einstk Notandanfn"; +char *msg_mtot_mhd= "Beinir Dag"; +char *msg_mtot_mhh= "Beinir Klukkustund"; +char *msg_mtot_mfd= "Skrr Dag"; +char *msg_mtot_mpd= "Sur Dag"; +char *msg_mtot_msd= "Sur (sites) Dag"; +char *msg_mtot_mvd= "Heimsknir Dag"; +char *msg_mtot_mkd= "KBti Dag"; +char *msg_mtot_rc = "Hits by Response Code"; + +/* daily total table */ +char *msg_dtot_ds = "Daglegar Samtlur fyrir"; + +/* hourly total table */ +char *msg_htot_hs = "Klukkustundar Samtlur 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 Sur"; +char *msg_top_u = "Heildar slir"; +char *msg_top_r = "Heildar Referrers"; +char *msg_top_a = "Heildar User Agents"; +char *msg_top_c = "Heildar Lnd"; +char *msg_top_en = "Heildar Byrjunarsum"; +char *msg_top_ex = "Heildar Lokasum"; +char *msg_top_sr = "Heildar Leitarstrengir"; +char *msg_top_i = "Heildar Notendanfn"; +char *msg_v_sites = "Skoa Allar sur"; +char *msg_v_urls = "Skoa Allar Slir"; +char *msg_v_refs = "Skoa Allar Referrers"; +char *msg_v_agents= "Skoa Alla User Agents"; +char *msg_v_search= "Skoa Alla Leitarstrengi"; +char *msg_v_users = "Skoa ll Notandanfn"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "Ma", "Jn", + "Jl", "Ag", "Sep", + "Okt", "Nv", "Des"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Janar", "Febrar", "Mars", "Aprl", + "Ma", "Jn", "Jl", "gst", + "September","Oktber", "Nvember","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 - Bi til", 0 }, + { "Code 202 - Samykkt", 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 Mguleikar", 0 }, + { "Code 301 - Frt", 0 }, + { "Code 302 - Fundi", 0 }, + { "Code 303 - Sj Anna", 0 }, + { "Code 304 - Ekki Breytt", 0 }, + { "Code 305 - Nota Proxy", 0 }, + { "Code 307 - Frt Um Stundarsakir", 0 }, + { "Code 400 - Slm Beini", 0 }, + { "Code 401 - leyfilegt", 0 }, + { "Code 402 - Greislu Krafist", 0 }, + { "Code 403 - leyfilegt", 0 }, + { "Code 404 - Fannst Ekki", 0 }, + { "Code 405 - Afer Ekki Leyf", 0 }, + { "Code 406 - Ekki sttanlegt", 0 }, + { "Code 407 - Proxy Aukenning Nausynleg", 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 Strt", 0 }, + { "Code 414 - Request-URI Of Langt", 0 }, + { "Code 415 - studd Media Tegund", 0 }, + { "Code 416 - Umbei svi Ekki sttanlegt", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Innlg jna villa", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Rangur Gateway", 0 }, + { "Code 503 - jnusta Ekki Fyrir Hendi", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP tgfa Ekki Studd", 0 } }; + +char *msg_title = "Yfirlit Heimskna 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 Rkisnet (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 Arabsku Furstadmin",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'), "Albana", 0,0,0 }, +{ IDX_2C('a','m'), "Armena", 0,0,0 }, +{ IDX_2C('a','n'), "Holland", 0,0,0 }, +{ IDX_2C('a','o'), "Angla", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentna", 0,0,0 }, +{ IDX_2C('a','s'), "Amersku Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austurrki", 0,0,0 }, +{ IDX_2C('a','u'), "strala", 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'), "Bosna 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'), "Belga", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Blgara", 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'), "Bermda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bliva", 0,0,0 }, +{ IDX_2C('b','r'), "Brasila", 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'), "Kkos (Keeling) Eyjur", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Mi Afrkulveldi ", 0,0,0 }, +{ IDX_2C('c','g'), "Kong", 0,0,0 }, +{ IDX_2C('c','h'), "Swiss", 0,0,0 }, +{ IDX_2C('c','i'), "Flabeinsstrndin (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'), "Kamern", 0,0,0 }, +{ IDX_2C('c','n'), "Kna", 0,0,0 }, +{ IDX_2C('c','o'), "Klumba", 0,0,0 }, +{ IDX_2C('c','r'), "Kosta Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Kba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Jlaeyja", 0,0,0 }, +{ IDX_2C('c','y'), "Kpur", 0,0,0 }, +{ IDX_2C('c','z'), "Tkkneska Lveldi", 0,0,0 }, +{ IDX_2C('d','e'), "skaland", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Danmrk", 0,0,0 }, +{ IDX_2C('d','m'), "Dminka", 0,0,0 }, +{ IDX_2C('d','o'), "Dminska Lveldi", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estna", 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'), "Spnn", 0,0,0 }, +{ IDX_2C('e','t'), "Epa", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fj", 0,0,0 }, +{ IDX_2C('f','k'), "Flkeyjur (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Mkrnesa", 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'), "Stra Bretland (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georga", 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'), "Gbraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Grnland", 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'), "Hondras", 0,0,0 }, +{ IDX_2C('h','r'), "Krata", 0,0,0 }, +{ IDX_2C('h','t'), "Hat", 0,0,0 }, +{ IDX_2C('h','u'), "Ungverjaland", 0,0,0 }, +{ IDX_2C('i','d'), "Indnesa", 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'), "Inda", 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'), "tala", 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'), "Kambda", 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'), "Krea (Norur)", 0,0,0 }, +{ IDX_2C('k','r'), "Krea (Suur)", 0,0,0 }, +{ IDX_2C('k','w'), "Kweit", 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'), "Lxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Lettland", 0,0,0 }, +{ IDX_2C('l','y'), "Liba", 0,0,0 }, +{ IDX_2C('m','a'), "Marokko", 0,0,0 }, +{ IDX_2C('m','c'), "Mnak", 0,0,0 }, +{ IDX_2C('m','d'), "Moldva", 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'), "Makedna", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongla", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Norur Mariana eyjur", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritana", 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'), "Mexko", 0,0,0 }, +{ IDX_2C('m','y'), "Malasa", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambk", 0,0,0 }, +{ IDX_2C('n','a'), "Namiba", 0,0,0 }, +{ IDX_2C('n','c'), "Nja 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'), "Nigera", 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'), "Nja Sjland", 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 Plnesa", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Nja Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filippseyjar", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Plland", 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'), "Perto Rko", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portgal", 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'), "Rmena", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Rssneska Sambandi", 0,0,0 }, +{ IDX_2C('r','w'), "Randa", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Araba", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Eyjur", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sdan", 0,0,0 }, +{ IDX_2C('s','e'), "Svj", 0,0,0 }, +{ IDX_2C('s','g'), "Singapr", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slvena", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbari og Jan Mayen Eyjarnar", 0,0,0 }, +{ IDX_2C('s','k'), "Slvenska lveldi", 0,0,0 }, +{ IDX_2C('s','l'), "Serra Lone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marin", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Smala", 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'), "Srland", 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'), "Taland", 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'), "Trkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tnis", 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'), "Trindad og Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Tawan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "krane", 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'), "Venesela", 0,0,0 }, +{ IDX_2C('v','g'), "Jmfreyjar-eyjar (Bresku)", 0,0,0 }, +{ IDX_2C('v','i'), "Jmfreyjar-eyjar (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vet 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'), "Sama", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "jgslava", 0,0,0 }, +{ IDX_2C('z','a'), "Suur Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zamba", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.indonesian b/webalizer-2.23-08/lang/webalizer_lang.indonesian new file mode 100644 index 0000000..6f04f5d --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.indonesian @@ -0,0 +1,636 @@ +/* + webalizer_lang.indonesian + + Webalizer V2.0x Language Support file for Indonesian. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 08-Oct-1999 Translated to Indonesian by Adhi eN (webmaster@adhi.findhere.com) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Indonesian"; +char *langcode = "id"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "record"; +char *msg_addresses="addresses"; +char *msg_ignored = "diabaikan"; +char *msg_bad = "buruk"; +char *msg_in = "dalam"; +char *msg_seconds = "detik"; + +/* progress and setup error messages */ +char *msg_log_err = "Salah: Tak dapat membuka file log"; +char *msg_log_use = "Menggunakan file log"; +char *msg_dir_err = "Salah: Tak dapat berpindah ke direktori"; +char *msg_dir_use = "Membuat keluaran dalam"; +char *msg_cur_dir = "direktori saat ini"; +char *msg_hostname= "Nama host yang akan dilaporkan adalah"; +char *msg_ign_hist= "Abaikan history sebelumnya..."; +char *msg_no_hist = "File history tak dapat ditemukan..."; +char *msg_get_hist= "Sedang membaca file history..."; +char *msg_put_hist= "Menyimpan informasi history..."; +char *msg_hist_err= "Salah: Tak dapat menulisi file history"; +char *msg_bad_hist= "Salah: Abaikan record history yang cacat"; +char *msg_bad_conf= "Salah: Tak dapat membuka file konfigurasi"; +char *msg_bad_key = "Peringatan: Kata kunci tidak valid"; +char *msg_bad_date= "Salah: Melompati record (tanggal salah)"; +char *msg_ign_nscp= "Melompati record header Netscape"; +char *msg_bad_rec = "Melompati record yang salah"; +char *msg_no_vrec = "Tak ditemukan record yang valid!"; +char *msg_gen_rpt = "Sedang memproses laporan untuk"; +char *msg_gen_sum = "Sedang membuat laporan singkat"; +char *msg_get_data= "Sedang membaca data yang dijalankan sebelumnya.."; +char *msg_put_data= "Sedang menyimpan data yang dijalankan saat ini..."; +char *msg_no_data = "Data yang dijalankan sebelumnya tak ditemukan..."; +char *msg_bad_data= "Salah: Tak dapat memulihkan data yang dijalankan"; +char *msg_data_err= "Salah: Tak dapat menyimpan data yang dijalankan saat ini"; +char *msg_dup_data= "Peringatan: Kemungkinan ditemukan data yang terduplikasi"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Tak dapat mengalokasikan cukup memori, Situs-situs urutan teratas tidak diaktifkan!"; +char *msg_nomem_tr= "Tak dapat mengalokasikan cukup memori, Acuan-acuan urutan teratas tidak diaktifkan!"; +char *msg_nomem_tu= "Tak dapat mengalokasikan cukup memori, URL-URL urutan teratas tidak diaktifkan!"; +char *msg_nomem_tc= "Tak dapat mengalokasikan cukup memori, Negara-negara urutan teratas tidak diaktifkan!"; +char *msg_nomem_ta= "Tak dapat mengalokasikan cukup memori, Browser-browser urutan teratas tidak diaktifkan!"; +char *msg_nomem_tsr="Tak dapat mengalokasikan cukup memori, String-string pencarian urutan teratas tidak diaktifkan!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Terjadi kesalahan saat menambahkan node host (harian), dilewati"; +char *msg_nomem_mh= "Terjadi kesalahan saat menambahkan node host (bulanan), dilewati"; +char *msg_nomem_u = "Terjadi kesalahan saat menambahkan node URL, dilewati"; +char *msg_nomem_a = "Terjadi kesalahan saat menambahkan node User Agent, dilewati"; +char *msg_nomem_r = "Terjadi kesalahan saat menambahkan node acuan, dilewati"; +char *msg_nomem_sc= "Terjadi kesalahan saat menambahkan node string pencarian, dilewati"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Salah: Melompati rekaman log yang oversize"; +char *msg_big_host= "Peringatan: Memotong nama host yang oversize"; +char *msg_big_date= "Peringatan: Memotong field tanggal yang oversize"; +char *msg_big_req = "Peringatan: Memotong field permintaan yang oversize"; +char *msg_big_ref = "Peringatan: Memotong acuan yang oversize"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Peringatan: String melampaui ukuran penyimpanan"; + +/* misc errors */ +char *msg_no_open = "Salah: Tak dapat membuka file"; + +/* Help display... */ +char *h_usage1 = "Penggunaan"; +char *h_usage2 = "[opsi] [file log]"; +char *h_msg[]= { + "-h = cetak pesan bantuan ini" , + "-V = cetak informasi versi" , + "-v = be verbose" , + "-d = cetak informasi debug tambahan" , + "-F type = Log type. type= (clf | ftp | squid | w3c)" , + "-f = kesalahan urutan Fold" , + "-i = abaikan file history" , + "-p = menjaga pernyataan (penambahan)" , + "-b = abaikan pernyataan (penambahan)" , + "-q = mengeluarkan pesan informasional" , + "-Q = mengeluarkan _SEMUA_ pesan" , + "-Y = mengeluarkan grafik negara" , + "-G = mengeluarkan grafik per jam" , + "-H = mengeluarkan statistik per jam" , + "-L = mengeluarkan legenda grafik terkode yang berwarna" , + "-l num = memakai num garis background di atas grafik" , + "-m num = Harga timeout kunjungan (seconds)" , + "-T = cetak informasi pewaktuan" , + "-c file = memakai file konfigurasi 'file'" , + "-n nama = nama host yang dipakai" , + "-o dir = direktori keluaran yang dipakai" , + "-t nama = judul laporan bernama 'nama'" , + "-a nama = sembunyikan browser bernama 'nama'" , + "-r nama = sembunyikan acuan bernama 'nama'" , + "-s nama = sembunyikan situs bernama 'nama'" , + "-u nama = sembunyikan URL bernama 'nama'" , + "-x nama = Pergunakan ekstensi nama file 'nama'" , + "-O nama = Omit page 'nama'" , + "-P nama = Ektensi tipe halaman bernama 'nama'" , + "-I nama = Alias indeks bernama 'nama'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Tampilkan browser teratas sejumlah num" , + "-C num = Tampilkan negara teratas sejumlah num" , + "-R num = Tampilkan acuan teratas sejumlah num" , + "-S num = Tampilkan situs teratas sejumlah num" , + "-U num = Tampilkan URL teratas sejumlah num" , + "-e num = Tampilkan Halaman Masuk teratas sejumlah num" , + "-E num = Tampilkan Halaman Keluar teratas sejumlah num" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nama = Use DNS Cache file 'nama'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J nama = Use GeoDB database 'nama'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W nama = Use GeoIP database 'nama'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Periode Ringkasan"; +char *msg_hhdr_gt = "Dibuat:"; + +/* main index strings */ +char *msg_main_us = "Grafik Akses untuk"; +/* char *msg_main_per= "12 bulan terakhir"; */ +char *msg_main_per= "Ringkasan berdasarkan bulan"; +char *msg_main_sum= "Ringkasan berdasarkan bulan"; +char *msg_main_da = "Rata-rata harian"; +char *msg_main_mt = "Total bulanan"; + +/* month HTML page strings */ +char *msg_hmth_du = "Pengaksesan harian untuk"; +char *msg_hmth_hu = "Pengaksesan per jam untuk"; + +/* table header strings */ +char *msg_h_by = "berdasarkan"; +char *msg_h_avg = "Rata-rata"; +char *msg_h_max = "Maks"; +char *msg_h_total = "Jumlah"; +char *msg_h_totals= "Total"; +char *msg_h_day = "Hari"; +char *msg_h_mth = "Bulan"; +char *msg_h_hour = "Jam"; +char *msg_h_hits = "Hit"; +char *msg_h_pages = "Halaman"; +char *msg_h_visits= "Kunjungan"; +char *msg_h_files = "File"; +char *msg_h_sites = "Situs"; +char *msg_h_xfer = "KByte"; +char *msg_h_hname = "Nama Host"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Browser/User Agent"; +char *msg_h_ref = "Acuan"; +char *msg_h_ctry = "Negara"; +char *msg_h_search= "String pencarian"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "Statistik harian"; +char *msg_hlnk_hs = "Statistik per jam"; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = "Situs"; +char *msg_hlnk_a = "Browser"; +char *msg_hlnk_c = "Negara"; +char *msg_hlnk_r = "Acuan"; +char *msg_hlnk_en = "Masuk"; +char *msg_hlnk_ex = "Keluar"; +char *msg_hlnk_sr = "Cari"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = "Statistik bulanan untuk"; +char *msg_mtot_th = "Jumlah Hit"; +char *msg_mtot_tf = "Jumlah File"; +char *msg_mtot_tx = "Jumlah KByte"; +char *msg_mtot_us = "Jumlah Situs unik"; +char *msg_mtot_ur = "Jumlah Acuan unik"; +char *msg_mtot_ua = "Jumlah Browser unik"; +char *msg_mtot_uu = "Jumlah URL unik"; +char *msg_mtot_ui = "Total Unique Usernames"; +char *msg_mtot_mhd= "Hit per hari"; +char *msg_mtot_mhh= "Hit per jam"; +char *msg_mtot_mfd= "File per hari"; +char *msg_mtot_mpd= "Halaman per hari"; +char *msg_mtot_msd= "Situs per hari"; +char *msg_mtot_mvd= "Kunjungan per hari"; +char *msg_mtot_mkd= "KByte per hari"; +char *msg_mtot_rc = "Hit oleh kode respon"; + +/* daily total table */ +char *msg_dtot_ds = "Statistik harian untuk"; + +/* hourly total table */ +char *msg_htot_hs = "Statistik per jam untuk"; + +/* country pie chart */ +char *msg_ctry_use= "Pengaksesan oleh negara untuk"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = ""; +char *msg_top_of = "urutan teratas dari sejumlah"; +char *msg_top_s = "situs"; +char *msg_top_u = "URL"; +char *msg_top_r = "acuan"; +char *msg_top_a = "browser/user agents"; +char *msg_top_c = "negara"; +char *msg_top_en = "halaman masuk"; +char *msg_top_ex = "halaman keluar"; +char *msg_top_sr = "string pencarian"; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "View All Sites"; +char *msg_v_urls = "View All URLs"; +char *msg_v_refs = "View All Referrers"; +char *msg_v_agents= "View All User Agents"; +char *msg_v_search= "View All Search Strings"; +char *msg_v_users = "View All Usernames"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "Mei", "Jun", + "Jul", "Agt", "Sep", + "Okt", "Nov", "Des"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Januari", "Februari", "Maret", "April", + "Mei", "Juni", "Juli", "Agustus", + "September","Oktober", "November","Desember"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Kode respon tak terdefinisi", 0 }, + { "Kode 100 - Teruskan", 0 }, + { "Kode 101 - Pertukaran Protokol", 0 }, + { "Kode 200 - OK", 0 }, + { "Kode 201 - Dibuat", 0 }, + { "Kode 202 - Diterima", 0 }, + { "Kode 203 - Informasi Non-Authoritatif", 0 }, + { "Kode 204 - Tak Ada Isi", 0 }, + { "Kode 205 - Reset Isi", 0 }, + { "Kode 206 - Berisi sebagian", 0 }, + { "Kode 300 - Multi Pilihan", 0 }, + { "Kode 301 - Pindah Permanen", 0 }, + { "Kode 302 - Ditemukan", 0 }, + { "Kode 303 - Lihat lainnya", 0 }, + { "Kode 304 - Tak dimodifikasi", 0 }, + { "Kode 305 - Memakai Proxy", 0 }, + { "Kode 307 - Dipindahkan secara Temporer", 0 }, + { "Kode 400 - Permintaan yang Buruk", 0 }, + { "Kode 401 - Tidak terotorisasi", 0 }, + { "Kode 402 - Mensyaratkan Pembayaran", 0 }, + { "Kode 403 - Terlarang", 0 }, + { "Kode 404 - Tidak ditemukan", 0 }, + { "Kode 405 - Metode Tidak Diizinkan", 0 }, + { "Kode 406 - Tak dapat diterima", 0 }, + { "Kode 407 - Otentikasi Proxy Diperlukan", 0 }, + { "Kode 408 - Permintaan Timeout", 0 }, + { "Kode 409 - Konflik", 0 }, + { "Kode 410 - Hilang", 0 }, + { "Kode 411 - Panjang Disyaratkan", 0 }, + { "Kode 412 - Prakondisi Gagal", 0 }, + { "Kode 413 - Entitas Permintaan Terlalu Besar", 0 }, + { "Kode 414 - Permintaan-URI Terlalu Panjang", 0 }, + { "Kode 415 - Tipe Media Tidak Didukung", 0 }, + { "Kode 416 - Kisaran yang Diminta Tidak Memuaskan", 0 }, + { "Kode 417 - Harapan Gagal", 0 }, + { "Kode 500 - Kesalahan Internal Server", 0 }, + { "Kode 501 - Tidak Diimplementasikan", 0 }, + { "Kode 502 - Gateway Jelek", 0 }, + { "Kode 503 - Layanan Tidak Tersedia", 0 }, + { "Kode 504 - Gateway Timeout", 0 }, + { "Kode 505 - Versi HTTP Tidak Didukung", 0 } }; + +char *msg_title = "Statistik pengaksesan untuk"; +char *msg_h_other = "Lainnya"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Tak Dapat Dilacak/Tidak Diketahui",0,0,0 }, +{ IDX_3C('c','o','m'), "Komersial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Edukasi (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "Pemerintahan dari US (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Internasional (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "Militer dari US (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Jaringan Komputer (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Arpanet Gaya Lama (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Field Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua dan Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia dan Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgia", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Kanada", 0,0,0 }, +{ IDX_2C('c','c'), "Kepulauan Cocos (Keeling)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Republik Afrika Tengah", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Swiss", 0,0,0 }, +{ IDX_2C('c','i'), "Pantai Gading", 0,0,0 }, +{ IDX_2C('c','k'), "Kepulauan Cook", 0,0,0 }, +{ IDX_2C('c','l'), "Chili", 0,0,0 }, +{ IDX_2C('c','m'), "Kamerun", 0,0,0 }, +{ IDX_2C('c','n'), "Cina", 0,0,0 }, +{ IDX_2C('c','o'), "Kolumbia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Kuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Pulau Christmas", 0,0,0 }, +{ IDX_2C('c','y'), "Siprus", 0,0,0 }, +{ IDX_2C('c','z'), "Republik Ceko", 0,0,0 }, +{ IDX_2C('d','e'), "Jerman", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominika", 0,0,0 }, +{ IDX_2C('d','o'), "Republik Dominika", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Equador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Mesir", 0,0,0 }, +{ IDX_2C('e','h'), "Sahara Barat", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spanyol", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlandia", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Kepulauan Falkland (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Kepulauan Faroe", 0,0,0 }, +{ IDX_2C('f','r'), "Perancis", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Yunani", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia dan S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard dan McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Kroasia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungaria", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Irlandia", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Islandia", 0,0,0 }, +{ IDX_2C('i','t'), "Italia", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaika", 0,0,0 }, +{ IDX_2C('j','o'), "Yordania", 0,0,0 }, +{ IDX_2C('j','p'), "Jepang", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Kamboja", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Komoro", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts dan Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea (Utara)", 0,0,0 }, +{ IDX_2C('k','r'), "Korea (Selatan)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Kepulauan Cayman", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Libanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Maroko", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagaskar", 0,0,0 }, +{ IDX_2C('m','h'), "Kepulauan Marshall", 0,0,0 }, +{ IDX_2C('m','k'), "Makedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Kepulauan Northern Mariana", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Kepulauan Norfolk", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nikaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norwegia", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Nugini", 0,0,0 }, +{ IDX_2C('p','h'), "Filipina", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polandia", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre dan Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Rumania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Federasi Rusia", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Kepulauan Solomon", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Swedia", 0,0,0 }, +{ IDX_2C('s','g'), "Singapura", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Kepulauan Svalbard dan Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Republik Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome dan Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Kepulauan Turks dan Caicos", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Timor Timur", 0,0,0 }, +{ IDX_2C('t','r'), "Turki", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad dan Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent dan the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Africa Selatan", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.italian b/webalizer-2.23-08/lang/webalizer_lang.italian new file mode 100644 index 0000000..370bbcb --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.italian @@ -0,0 +1,635 @@ +/* + webalizer_lang.italian + + Webalizer V2.0x Language Support file for Italian. + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 12-Jun-1998 Translation Level 1.1 by Alberto Benati (a_benati@4net.com) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 10-Jul-1999 Update for 1.3 by Massimiliano Masserelli (masserelli@interim.it) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 25-Sep-2000 Total Rewrite by Mattia Coatti (xkaos@galactica.it) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Italian"; +char *langcode = "it"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "record"; +char *msg_addresses="indirizzi"; +char *msg_ignored = "ignorato/i"; +char *msg_bad = "errato/i"; +char *msg_in = "in"; +char *msg_seconds = "secondi"; + +/* progress and setup error messages */ +char *msg_log_err = "Errore: Impossibile elaborare il file di log"; +char *msg_log_use = "Utilizzo il file di log"; +char *msg_dir_err = "Errore: Impossibile accedere alla directory"; +char *msg_dir_use = "Creo i file di output nella directory"; +char *msg_cur_dir = "Directory attuale"; +char *msg_hostname= "Il nome dell'host per il riepilogo e'"; +char *msg_ign_hist= "Ignoro il precedente file di history"; +char *msg_no_hist = "Impossibile trovare il file di history"; +char *msg_get_hist= "Elaboro il file di history"; +char *msg_put_hist= "Salvo le statistiche degli accessi nel file di history"; +char *msg_hist_err= "Errore: Impossibile modificare il file di history"; +char *msg_bad_hist= "Errore: Tralascio il record non valido nel file di history"; +char *msg_bad_conf= "Errore: Impossibile accedere al file di configurazione"; +char *msg_bad_key = "Attenzione: Keyword non valida"; +char *msg_bad_date= "Errore: Tralascio il record (data errata)"; +char *msg_ign_nscp= "Tralascio il record dell'header di Netscape"; +char *msg_bad_rec = "Tralascio il record errato"; +char *msg_no_vrec = "Nessun record valido rilevato"; +char *msg_gen_rpt = "Creo l'analisi statistica per"; +char *msg_gen_sum = "Creo il riassunto statistico"; +char *msg_get_data= "Elaboro i dati sull'esecuzione precedente"; +char *msg_put_data= "Salvo i dati sull'esecuzione attuale"; +char *msg_no_data = "Impossibile trovare i dati sull'esecuzione precedente"; +char *msg_bad_data= "Errore: Impossibile ripristinare i dati dell'esecuzione precedente"; +char *msg_data_err= "Errore: Impossibile salvare i dati dell'esecuzione attuale"; +char *msg_dup_data= "Attenzione: Possibile individuazione di dati duplicati"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nessun file di cache specificato"; +char *msg_dns_nodb= "Errore: Impossibile accedere al file contenente la cache DNS"; +char *msg_dns_nolk= "Errore: Impossibile effettuare il locking del file contenente la cache DNS"; +char *msg_dns_usec= "Utilizzo il file di cache DNS"; +char *msg_dns_rslv= "Risoluzione DNS"; +char *msg_dns_none= "Nessun dato da elaborare"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Impossibile allocare abbastanza memoria, classifica degli host disabilitata"; +char *msg_nomem_tr= "Impossibile allocare abbastanza memoria, classifica dei referrer disabilitata"; +char *msg_nomem_tu= "Impossibile allocare abbastanza memoria, classifica degli URL disabilitata"; +char *msg_nomem_tc= "Impossibile allocare abbastanza memoria, classifica dei paesi disabilitata"; +char *msg_nomem_ta= "Impossibile allocare abbastanza memoria, classifica dei browser disabilitata"; +char *msg_nomem_tsr="Impossibile allocare abbastanza memoria, classifica dei termini di ricerca disabilitata"; +char *msg_nomem_ti= "Impossibile allocare abbastanza memoria, classifica degli username disabilitata"; +char *msg_nomem_dh= "Errore nell'aggiungere il nome dell'host (giornaliero), tralasciato"; +char *msg_nomem_mh= "Errore nell'aggiungere il nome dell'host (mensile), tralasciato"; +char *msg_nomem_u = "Errore nell'aggiungere l'URL, tralasciato"; +char *msg_nomem_a = "Errore nell'aggiungere il browser, tralasciato"; +char *msg_nomem_r = "Errore nell'aggiungere il referrer, tralasciato"; +char *msg_nomem_sc= "Errore nell'aggiungere la stringa di ricerca, tralasciato"; +char *msg_nomem_i = "Errore nell'aggiungere l'username, tralasciato"; + +/* log record errors */ +char *msg_big_rec = "Attenzione: Tralascio il record di dimensione eccessiva"; +char *msg_big_host= "Attenzione: Troncato il record dell'hostname in quanto di dimensione eccessiva"; +char *msg_big_date= "Attenzione: Troncata il record della data in quanto di dimensione eccessiva"; +char *msg_big_req = "Attenzione: Troncato il record della richiesta in quanto di dimensione eccessiva"; +char *msg_big_ref = "Attenzione: Troncato il record del referrer in quanto di dimensione eccessiva"; +char *msg_big_user= "Attenzione: Troncato il record dell'username in quanto di dimensione eccessiva"; +char *msg_big_one = "Attenzione: La stringa e' di dimensione eccessiva"; + +/* misc errors */ +char *msg_no_open = "Errore: Impossibile accedere al file"; + +/* Help display... */ +char *h_usage1 = "Sintassi"; +char *h_usage2 = "[parametri] [file di log]"; +char *h_msg[]= { + "-h = visualizza questa schermata" , + "-V = mostra il numero di versione" , + "-v = be verbose" , + "-d = visualizza informazioni di debug addizionali", + "-F tipo = specifica il tipo di log (clf | ftp | squid | w3c)", + "-f = elenca sequenzialmente gli errori" , + "-i = tralascia il file di history" , + "-p = conserva le statistiche (modalita' incrementale)", + "-b = ignore state (incremental)" , + "-q = non visualizza i messaggi informativi", + "-Q = non visualizza alcun messaggio" , + "-Y = non visualizza il grafico relativo ai paesi", + "-G = non visualizza il grafico orario" , + "-H = non visualizza le statistiche orarie", + "-L = non visualizza le legende policromatiche nei grafici" , + "-l num = utilizza num linee nello sfondo dei grafici", + "-m num = valore di timeout per gli accessi (seconds)", + "-T = visualizza informazioni sul tempo di esecuzione", + "-c file = utilizza 'file' per le impostazioni di configurazione", + "-n nome = nome dell'host da utilizzare" , + "-o dir = directory in cui collocare i file di output", + "-t nome = nome da utilizzare per il titolo del rapporto statistico", + "-a nome = ignora il browser specificato" , + "-r nome = ignora il referrer specificato" , + "-s nome = ignora l'host specificato" , + "-u nome = ignora l'URL specificato" , + "-x ext = utilizza 'ext' come estensione per i file", + "-O nome = Omit page 'nome'" , + "-P ext = utilizza 'ext' come estensione per le pagine", + "-I nome = utilizza 'nome' come file di indice" , + "-K num = 'num' months in summary table" , + "-k num = 'num' months in summary graph" , + "-A num = visualizza 'num' browser nella classifica", + "-C num = visualizza 'num' paesi nella classifica", + "-R num = visualizza 'num' referrer nella classifica", + "-S num = visualizza 'num' nomi di host nella classifica", + "-U num = visualizza 'num' URL nella classifica", + "-e num = visualizza 'num' pagine in ingresso nella classifica", + "-E num = visualizza 'num' pagine in uscita nella classifica", + "-g num = raggruppa i domini fino a 'num' livelli", + "-X = non visualizza i singoli hostname" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nome = utilizza 'nome' come file di cache DNS", + "-N num = numero massimo di thread per la risoluzione DNS (0=non abilitata)", + "-j = Enable native GeoDB lookups" , + "-J nome = Use GeoDB database 'nome'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W nome = Use GeoIP database 'nome'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Riepilogo per il periodo"; +char *msg_hhdr_gt = "Generato"; + +/* main index strings */ +char *msg_main_us = "Riepilogo statistico per"; +/* char *msg_main_per= "Ultimi 12 mesi"; */ +char *msg_main_per= "Riepilogo mensile"; +char *msg_main_sum= "Riepilogo mensile"; +char *msg_main_da = "Media giornaliera"; +char *msg_main_mt = "Totale mensile"; + +/* month HTML page strings */ +char *msg_hmth_du = "Contatti giornalieri per"; +char *msg_hmth_hu = "Contatti orari per"; + +/* table header strings */ +char *msg_h_by = "Per"; +char *msg_h_avg = "Media"; +char *msg_h_max = "Max"; +char *msg_h_total = "Totale"; +char *msg_h_totals= "Totali"; +char *msg_h_day = "Giorno"; +char *msg_h_mth = "Mese"; +char *msg_h_hour = "Ora"; +char *msg_h_hits = "Contatti"; +char *msg_h_pages = "Pagine"; +char *msg_h_visits= "Visite"; +char *msg_h_files = "File"; +char *msg_h_sites = "Siti"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Nomi di Host"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Browser"; +char *msg_h_ref = "Referrer"; +char *msg_h_ctry = "Paese"; +char *msg_h_search= "Termini di Ricerca"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "Statistiche Giornaliere"; +char *msg_hlnk_hs = "Statistiche Orarie"; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = "Nomi di Host"; +char *msg_hlnk_a = "Browser"; +char *msg_hlnk_c = "Paesi"; +char *msg_hlnk_r = "Referrer"; +char *msg_hlnk_en = "Ingressi"; +char *msg_hlnk_ex = "Uscite"; +char *msg_hlnk_sr = "Ricerca"; +char *msg_hlnk_i = "Utenti"; + +/* monthly total table */ +char *msg_mtot_ms = "Statistiche Mensili per"; +char *msg_mtot_th = "Contatti"; +char *msg_mtot_tf = "File"; +char *msg_mtot_tx = "KBytes"; +char *msg_mtot_us = "Nomi di Host"; +char *msg_mtot_ur = "Referrer"; +char *msg_mtot_ua = "Browser"; +char *msg_mtot_uu = "URL"; +char *msg_mtot_ui = "Username"; +char *msg_mtot_mhd= "Contatti Giornalieri"; +char *msg_mtot_mhh= "Contatti Orari"; +char *msg_mtot_mfd= "File Giornalieri"; +char *msg_mtot_mpd= "Pagine Giornaliere"; +char *msg_mtot_msd= "Host Giornaliere"; +char *msg_mtot_mvd= "Visite Giornaliere"; +char *msg_mtot_mkd= "KBytes Giornalieri"; +char *msg_mtot_rc = "Contatti per Codice di Risposta"; + +/* daily total table */ +char *msg_dtot_ds = "Statistiche Giornaliere per"; + +/* hourly total table */ +char *msg_htot_hs = "Statistiche Orarie per"; + +/* country pie chart */ +char *msg_ctry_use= "Riepilogo dei Paesi per"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Top"; +char *msg_top_of = "di"; +char *msg_top_s = "Nomi di Host Totali"; +char *msg_top_u = "URL Totali"; +char *msg_top_r = "Referrer Totali"; +char *msg_top_a = "Browser Totali"; +char *msg_top_c = "Paesi Totali"; +char *msg_top_en = "Pagine in Ingresso Totali"; +char *msg_top_ex = "Pagine in Uscita Totali"; +char *msg_top_sr = "Total Search Strings"; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "Visualizza ogni Nome di Host"; +char *msg_v_urls = "Visualizza ogni URL"; +char *msg_v_refs = "Visualizza ogni Referrer"; +char *msg_v_agents= "Visualizza ogni Browser"; +char *msg_v_search= "Visualizza ogni Termine di Ricerca"; +char *msg_v_users = "Visualizza ogni Username"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Gen", "Feb", "Mar", + "Apr", "Mag", "Giu", + "Lug", "Ago", "Set", + "Ott", "Nov", "Dic"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Gennaio", "Febbraio", "Marzo", "Aprile", + "Maggio", "Giugno", "Luglio", "Agosto", + "Settembre","Ottobre", "Novembre","Dicembre"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continua", 0 }, + { "Code 101 - Scambio di Protocollo", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Creato", 0 }, + { "Code 202 - Accettato", 0 }, + { "Code 203 - Informazione non Autoritativa", 0 }, + { "Code 204 - Nessun Contenuto", 0 }, + { "Code 205 - Contenuto Reimpostato", 0 }, + { "Code 206 - Contenuto Parziale", 0 }, + { "Code 300 - Scelta Multipla", 0 }, + { "Code 301 - Spostato Permanentemente", 0 }, + { "Code 302 - Trovato", 0 }, + { "Code 303 - Vedere Altro", 0 }, + { "Code 304 - Non Modificato", 0 }, + { "Code 305 - Utilizzare Proxy", 0 }, + { "Code 307 - Spostato Temporaneamente", 0 }, + { "Code 400 - Richiesta Errata", 0 }, + { "Code 401 - Non Autorizzato", 0 }, + { "Code 402 - Richiesto Pagamento", 0 }, + { "Code 403 - Proibito", 0 }, + { "Code 404 - Non Trovato", 0 }, + { "Code 405 - Metodo Non Permesso", 0 }, + { "Code 406 - Non Accettabile", 0 }, + { "Code 407 - Il Proxy Richiede Autenticazione",0 }, + { "Code 408 - Richiesta Scaduta", 0 }, + { "Code 409 - Conflitto", 0 }, + { "Code 410 - Abbandonato", 0 }, + { "Code 411 - Lunghezza Richiesta", 0 }, + { "Code 412 - Prerequisito Fallito", 0 }, + { "Code 413 - Entita' Richiesta Troppo Estesa", 0 }, + { "Code 414 - Indirizzo Richiesto Troppo Lungo",0 }, + { "Code 415 - Media Non Supportato", 0 }, + { "Code 416 - Intervallo di Richiesta Non Soddisfabile", 0 }, + { "Code 417 - Aspettativa non Soddisfatta", 0 }, + { "Code 500 - Errore Interno del Server", 0 }, + { "Code 501 - Non Implementato", 0 }, + { "Code 502 - Gateway Errato", 0 }, + { "Code 503 - Servizio non Disponibile", 0 }, + { "Code 504 - Timeout nell'Accesso al Gateway", 0 }, + { "Code 505 - Versione HTTP Non Supportata", 0 } }; + +char *msg_title = "Statistiche per"; +char *msg_h_other = "Altri"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Non Risolto/Sconosciuto", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commerciali (.com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Universita' (.edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "Enti Governativo (.gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Enti Internazionali (.int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "Enti Militari (.mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Reti (.net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizzazioni Generiche (.org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Arpanet (.arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato (.nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "Emirati Arabi", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua e Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Antille Olandesi", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antartica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "Samoa Americana", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia e Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgio", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Sultanato del Brunei", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brasile", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Isole Bouvet", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Isole Cocos", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Africa Centrale", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Svizzera", 0,0,0 }, +{ IDX_2C('c','i'), "Costa D'Avorio", 0,0,0 }, +{ IDX_2C('c','k'), "Isole Cook", 0,0,0 }, +{ IDX_2C('c','l'), "Cile", 0,0,0 }, +{ IDX_2C('c','m'), "Camerun", 0,0,0 }, +{ IDX_2C('c','n'), "Cina", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Capo Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Isola di Natale", 0,0,0 }, +{ IDX_2C('c','y'), "Cipro", 0,0,0 }, +{ IDX_2C('c','z'), "Repubblica Ceca", 0,0,0 }, +{ IDX_2C('d','e'), "Germania", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Danimarca", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Repubblica Dominicana", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egitto", 0,0,0 }, +{ IDX_2C('e','h'), "Sahara Occidentale", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spagna", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlandia", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Isole Falkland (Malvine)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Isole Faroe", 0,0,0 }, +{ IDX_2C('f','r'), "Francia", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Gran Bretagna", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "Guiana Francese", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibilterra", 0,0,0 }, +{ IDX_2C('g','l'), "Groenlandia", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadalupa", 0,0,0 }, +{ IDX_2C('g','q'), "Guinea Equatoriale", 0,0,0 }, +{ IDX_2C('g','r'), "Grecia", 0,0,0 }, +{ IDX_2C('g','s'), "Isole di S. Georgia e S. Sandwich",0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Isole Heard e McDonald", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croazia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Ungaria", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Irlanda", 0,0,0 }, +{ IDX_2C('i','l'), "Israele", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "Territori Britannici nell'Oceano Indiano",0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Islanda", 0,0,0 }, +{ IDX_2C('i','t'), "Italia", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Giordania", 0,0,0 }, +{ IDX_2C('j','p'), "Giappone", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts e Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Corea (Nord)", 0,0,0 }, +{ IDX_2C('k','r'), "Corea (Sud)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Isole Cayman", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Libano", 0,0,0 }, +{ IDX_2C('l','c'), "Santa Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lituania", 0,0,0 }, +{ IDX_2C('l','u'), "Lussemburgo", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libia", 0,0,0 }, +{ IDX_2C('m','a'), "Marocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Isole Marshall", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Isole Mariana del Nord", 0,0,0 }, +{ IDX_2C('m','q'), "Martinica", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldive", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Messico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambico", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "Nuova Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','f'), "Isole Norfolk", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Olanda", 0,0,0 }, +{ IDX_2C('n','o'), "Norvegia", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Nuova Zealanda", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Polinesia Francese", 0,0,0 }, +{ IDX_2C('p','g'), "Papua e Nuova Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filippine", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polonia", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Porto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portogallo", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Federazione Russa", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Arabia Saudita", 0,0,0 }, +{ IDX_2C('s','b'), "Isole Solomon", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Svezia", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Isole Svalbard e Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Repubblica Slovacca", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome e Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Ex USSR", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Isole Turks e Caicos", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "Territori Francesi Meridionali", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailandia", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turchia", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad e Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ucraina", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Regno Unito", 0,0,0 }, +{ IDX_2C('u','m'), "Isole US Minori", 0,0,0 }, +{ IDX_2C('u','s'), "Stati Uniti", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Citta' del Vaticano", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent e Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Isole Vergini (Britanniche)", 0,0,0 }, +{ IDX_2C('v','i'), "Isole Vergini (Statunitensi)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Isole Wallis e Futuna", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Sud Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.japanese b/webalizer-2.23-08/lang/webalizer_lang.japanese new file mode 100644 index 0000000..9ac229a --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.japanese @@ -0,0 +1,629 @@ +/* + webalizer_lang.japanese + + Webalizer V2.0x Language Support file for Japanese. + 09-Jun-2001 by Yasuhiko Takahashi + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Japanese"; +char *langcode = "ja"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoIP lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +/* char *msg_hhdr_sp = "Summary Period";*/ +char *msg_hhdr_sp = "״"; +char *msg_hhdr_gt = ""; + +/* main index strings */ +char *msg_main_us = "Usage summary for"; +/* char *msg_main_per= "12"; */ +char *msg_main_per= ""; +char *msg_main_sum= ""; +char *msg_main_da = "ʿ"; +char *msg_main_mt = ""; + +/* month HTML page strings */ +char *msg_hmth_du = "Daily usage for"; +char *msg_hmth_hu = "Hourly usage for"; + +/* table header strings */ +char *msg_h_by = "By"; +char *msg_h_avg = "ʿ"; +char *msg_h_max = ""; +char *msg_h_total = ""; +char *msg_h_totals= ""; +char *msg_h_day = ""; +char *msg_h_mth = ""; +char *msg_h_hour = ""; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Pages"; +char *msg_h_visits= "Visits"; +char *msg_h_files = "Files"; +char *msg_h_sites = "Sites"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "ۥ̾"; +char *msg_h_url = "URL"; +char *msg_h_agent = "桼"; +char *msg_h_ref = "ե顼"; +char *msg_h_ctry = ""; +char *msg_h_search= "ʸ"; +char *msg_h_uname = "桼̾"; + +/* links along top of page */ +char *msg_hlnk_ds = "Ȥ"; +char *msg_hlnk_hs = "֤Ȥ"; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = ""; +char *msg_hlnk_a = ""; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = "ե顼"; +char *msg_hlnk_en = "ȥ꡼"; +char *msg_hlnk_ex = "Exit"; +char *msg_hlnk_sr = "ʸ"; +char *msg_hlnk_i = "桼"; + +/* monthly total table */ +char *msg_mtot_ms = ""; +char *msg_mtot_th = "ҥåȿ"; +char *msg_mtot_tf = "ե"; +char *msg_mtot_tx = " KBytes"; +char *msg_mtot_us = "̥ȿ"; +char *msg_mtot_ur = "̥ե顼"; +char *msg_mtot_ua = "̥桼ȿ"; +char *msg_mtot_uu = "URL"; +char *msg_mtot_ui = "̥桼"; +char *msg_mtot_mhd= "Υҥåȿ"; +char *msg_mtot_mhh= "֤Υҥåȿ"; +char *msg_mtot_mfd= "Υե"; +char *msg_mtot_mpd= "Υڡ"; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "ˬԿ"; +char *msg_mtot_mkd= "KBytes"; +char *msg_mtot_rc = "쥹ݥ󥹥ɤȤΥҥåȿ"; + +/* daily total table */ +char *msg_dtot_ds = "Ȥ"; + +/* hourly total table */ +char *msg_htot_hs = "֤Ȥ"; + +/* country pie chart */ +char *msg_ctry_use= "Usage by Country for"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "ȥå"; +char *msg_top_of = "of"; +char *msg_top_s = ""; +char *msg_top_u = "URL"; +char *msg_top_r = "ե顼"; +char *msg_top_a = "桼"; +char *msg_top_c = ""; +char *msg_top_en = "Total Entry Pages"; +char *msg_top_ex = "Total Exit Pages"; +char *msg_top_sr = "Total Search Strings"; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "View All Sites"; +char *msg_v_urls = "View All URLs"; +char *msg_v_refs = "View All Referrers"; +char *msg_v_agents= "View All User Agents"; +char *msg_v_search= "View All Search Strings"; +char *msg_v_users = "View All Usernames"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "January", "February", "March", "April", + "May", "June", "July", "August", + "September","October", "November","December"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = ""; +char *msg_h_other = "Other"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.korean b/webalizer-2.23-08/lang/webalizer_lang.korean new file mode 100644 index 0000000..d857f85 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.korean @@ -0,0 +1,633 @@ +/* + webalizer_lang.korean + + Webalizer V2.0x Language Support file for Korean. + 10-Arp-1999 Translated by Seung-young Kim (nobreak@nobreak.com) + 20-Arp-1999 Corrections/updates by Seung-young Kim (nobreak@nobreak.com) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Korean"; +char *langcode = "ko"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "ڵ"; +char *msg_addresses="addresses"; +char *msg_ignored = ""; +char *msg_bad = "ҷ"; +char *msg_in = "۽ð"; +char *msg_seconds = ""; + +/* progress and setup error messages */ +char *msg_log_err = ": α ã "; +char *msg_log_use = " α :"; +char *msg_dir_err = ": 丮 "; +char *msg_dir_use = " 丮:"; +char *msg_cur_dir = " 丮"; +char *msg_hostname= "ȣƮ:"; +char *msg_ign_hist= " 丮 "; +char *msg_no_hist = "丮 ã "; +char *msg_get_hist= " 丮 ؼ:"; +char *msg_put_hist= "丮 "; +char *msg_hist_err= ": 丮 "; +char *msg_bad_hist= ": 丮 ڵ "; +char *msg_bad_conf= ": ã "; +char *msg_bad_key = ": ˼ Ű"; +char *msg_bad_date= ": ڵ (߸ ¥)"; +char *msg_ign_nscp= "ݽ ڵ "; +char *msg_bad_rec = " ڵ "; +char *msg_no_vrec = "ó ڵ !"; +char *msg_gen_rpt = "Ʈ :"; +char *msg_gen_sum = "Ʈ "; +char *msg_get_data= " ؼ:"; +char *msg_put_data= " "; +char *msg_no_data = " ã "; +char *msg_bad_data= ": ؼ "; +char *msg_data_err= ": "; +char *msg_dup_data= ": ߺ "; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "޸ , ' Ʈ' dzʶ!"; +char *msg_nomem_tr= "޸ , ' ۷' dzʶ!"; +char *msg_nomem_tu= "޸ , ' URL' dzʶ!"; +char *msg_nomem_tc= "޸ , ' ' dzʶ!"; +char *msg_nomem_ta= "޸ , ' Ʈ' dzʶ!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "ȣƮ ߰ (Ϻ), "; +char *msg_nomem_mh= "ȣƮ ߰ (), "; +char *msg_nomem_u = "URL ߰ , "; +char *msg_nomem_a = "Ʈ ߰ , "; +char *msg_nomem_r = "۷ ߰ , "; +char *msg_nomem_sc= "Error adding Search String node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = ": ʰ α ڵ "; +char *msg_big_host= ": ȣƮ ¥"; +char *msg_big_date= ": ¥ ʵ ¥"; +char *msg_big_req = ": û ʵ ¥"; +char *msg_big_ref = ": ۷ ʵ ¥"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = ": ڿ ʰ"; + +/* misc errors */ +char *msg_no_open = ": ã "; + +/* Help display... */ +char *h_usage1 = ""; +char *h_usage2 = "[ɼ] [α ]"; +char *h_msg[]= { + "-h = ȭ " , + "-V = ǹȣ " , + "-v = be verbose" , + "-d = ߰ " , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = fold sequence errors" , + "-i = 丮 " , + "-p = (incremental)" , + "-b = ignore state (incremental)" , + "-q = Ϲ " , + "-Q = " , + "-Y = supress country graph" , + "-G = Ϻ ׷ " , + "-H = ð " , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timeout value (seconds)" , + "-T = ð " , + "-c file = " , + "-n name = ȣƮ" , + "-o dir = 丮" , + "-t name = ŸƲ" , + "-a name = ش Ʈ " , + "-r name = ش ۷ " , + "-s name = ش Ʈ " , + "-u name = ش URL " , + "-x name = Ȯ" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = ϸ" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = ' Ʈ' " , + "-C num = ' ' " , + "-R num = ' ۷' " , + "-S num = ' Ʈ' " , + "-U num = ' URL' " , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = " Ⱓ"; +char *msg_hhdr_gt = " "; + +/* main index strings */ +char *msg_main_us = "Usage summary for"; +/* char *msg_main_per= "Last 12 Months"; */ +char *msg_main_per= " 12"; +char *msg_main_sum= " 12"; +char *msg_main_da = " "; +char *msg_main_mt = " Ѱ"; + +/* month HTML page strings */ +char *msg_hmth_du = "Daily usage for"; +char *msg_hmth_hu = "Hourly usage for"; + +/* table header strings */ +char *msg_h_by = "By"; +char *msg_h_avg = ""; +char *msg_h_max = "Max"; +char *msg_h_total = "ü"; +char *msg_h_totals= "Ѱ"; +char *msg_h_day = ""; +char *msg_h_mth = ""; +char *msg_h_hour = "ð"; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Pages"; +char *msg_h_visits= "Visits"; +char *msg_h_files = "Files"; +char *msg_h_sites = "Sites"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "ȣƮ"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Ʈ"; +char *msg_h_ref = "۷"; +char *msg_h_ctry = ""; +char *msg_h_search= "Search String"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "Ϻ "; +char *msg_hlnk_hs = "ð뺰 "; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = "Ʈ"; +char *msg_hlnk_a = "Ʈ"; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = "۷"; +char *msg_hlnk_en = "Entry"; +char *msg_hlnk_ex = "Exit"; +char *msg_hlnk_sr = "Search"; +char *msg_hlnk_i = "Users"; + +/* monthly total table */ +char *msg_mtot_ms = " "; +char *msg_mtot_th = " Ʈ"; +char *msg_mtot_tf = " ϼ"; +char *msg_mtot_tx = " KByte"; +char *msg_mtot_us = " Ʈ"; +char *msg_mtot_ur = " ۷"; +char *msg_mtot_ua = " Ʈ"; +char *msg_mtot_uu = " URL"; +char *msg_mtot_ui = "Total Unique Usernames"; +char *msg_mtot_mhd= "Hits per Day"; +char *msg_mtot_mhh= "Hits per Hour"; +char *msg_mtot_mfd= "Files per Day"; +char *msg_mtot_mpd= "Pages per Day"; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "Visits per Day"; +char *msg_mtot_mkd= "KBytes per Day"; +char *msg_mtot_rc = " ڵ庰 Ʈ"; + +/* daily total table */ +char *msg_dtot_ds = "Ϻ "; + +/* hourly total table */ +char *msg_htot_hs = "ð뺰 "; + +/* country pie chart */ +char *msg_ctry_use= "Usage by Country for"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = ""; +char *msg_top_of = "/"; +char *msg_top_s = "Ʈ"; +char *msg_top_u = "URL"; +char *msg_top_r = "۷"; +char *msg_top_a = "Ʈ"; +char *msg_top_c = ""; +char *msg_top_en = "Total Entry Pages"; +char *msg_top_ex = "Total Exit Pages"; +char *msg_top_sr = "Total Search Strings"; +char *msg_top_i = "Total Usernames"; +char *msg_v_sites = "View All Sites"; +char *msg_v_urls = "View All URLs"; +char *msg_v_refs = "View All Referrers"; +char *msg_v_agents= "View All User Agents"; +char *msg_v_search= "View All Search Strings"; +char *msg_v_users = "View All Usernames"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "January", "February", "March", "April", + "May", "June", "July", "August", + "September","October", "November","December"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "뷮 :"; +char *msg_h_other = "Ÿ"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.latvian b/webalizer-2.23-08/lang/webalizer_lang.latvian new file mode 100644 index 0000000..413cee6 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.latvian @@ -0,0 +1,634 @@ +/* + webalizer_lang.latvian + + Webalizer V2.0x Language Support file for Latvian. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 06-Jul-2000 Latvian translation by Andis (andis@millenium.lv) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Latvian"; +char *langcode = "lv"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "ieraksti"; +char *msg_addresses="addreses"; +char *msg_ignored = "ignorti"; +char *msg_bad = "slikti"; +char *msg_in = "ienkoie"; +char *msg_seconds = "sekundes"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Nevaru atvrt 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= " prskata Hostname ir"; +char *msg_ign_hist= "Ignorjam iepriekjos datus..."; +char *msg_no_hist = "Nav informcijas par vsturi..."; +char *msg_get_hist= "Lasm vstures failus..."; +char *msg_put_hist= "Saglabjam vstures informciju..."; +char *msg_hist_err= "Error: Nevar saglabt vstures failus"; +char *msg_bad_hist= "Error: Bojti vstures ieraksti"; +char *msg_bad_conf= "Error: Nevar atvrt konfigurcijas failu"; +char *msg_bad_key = "Warning: Nepareizs keyword"; +char *msg_bad_date= "Error: Izlaiam ierakstu (kda datum)"; +char *msg_ign_nscp= "Izlaiam Netscape header ierakstu"; +char *msg_bad_rec = "Izlaiam sliktu ierakstu"; +char *msg_no_vrec = "Nav atrasti dergi ieraksti!"; +char *msg_gen_rpt = "Veidojam prskatu par"; +char *msg_gen_sum = "Veidojam summro prskatu par"; +char *msg_get_data= "Lasm iepriekjos datus.."; +char *msg_put_data= "Saglabjam pareizjos datus..."; +char *msg_no_data = "Iepriekjie dati nav atrasti..."; +char *msg_bad_data= "Error: Nav iespjams atjaunot iepriekjos datus"; +char *msg_data_err= "Error: Nav iespjams saglabt pareizjos datus"; +char *msg_dup_data= "Warning: Iespjams, ka dati atkrtojas"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Cache fails nav atrasts, prtraucam..."; +char *msg_dns_nodb= "Error: Nevar atvrt DNS cache failu"; +char *msg_dns_nolk= "Error: Nevar noslgt 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 = "Sumrais Periods"; +char *msg_hhdr_gt = "Izveidots"; + +/* main index strings */ +char *msg_main_us = "Apmekljumu prskats pr"; +/* char *msg_main_per= "Pdjie 12 Mnei"; */ +char *msg_main_per= "Prskati par mneiem"; +char *msg_main_sum= "Prskati par mneiem"; +char *msg_main_da = "Ikdienas prskati"; +char *msg_main_mt = "Mneu kopsummas"; + +/* month HTML page strings */ +char *msg_hmth_du = "Dienas prskati par "; +char *msg_hmth_hu = "Stundu prskati 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 = "Mnei"; +char *msg_h_hour = "Stundas"; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Lapas"; +char *msg_h_visits= "Apmekljumi"; +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 = "Lietotja programma"; +char *msg_h_ref = "Referrer"; +char *msg_h_ctry = "Valsts"; +char *msg_h_search= "Search String"; +char *msg_h_uname = "Lietotja vrds"; + +/* 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 = "Meklt"; +char *msg_hlnk_i = "Lietotji"; + +/* monthly total table */ +char *msg_mtot_ms = "Mneu prskats pr"; +char *msg_mtot_th = "Kopjie Apmekljumi"; +char *msg_mtot_tf = "Kopjie Faili"; +char *msg_mtot_tx = "Kopjie KBaiti"; +char *msg_mtot_us = "Kopjs Unikls Saites"; +char *msg_mtot_ur = "Kopjie Uniklie Referreri"; +char *msg_mtot_ua = "Kopjs Unikls Lietotju Programmas"; +char *msg_mtot_uu = "Kopjie Uniklie URL"; +char *msg_mtot_ui = "Total Unique Usernames"; +char *msg_mtot_mhd= "Pieprasjumi Dien"; +char *msg_mtot_mhh= "Pieprasjumi Stunds"; +char *msg_mtot_mfd= "Faili Dien"; +char *msg_mtot_mpd= "Lapas Dien"; +char *msg_mtot_msd= "Saites Dien"; +char *msg_mtot_mvd= "Apmekljumi 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 apmekltju 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 apmekltju prlkprogrammas"; +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 = "Apskatt visas saites"; +char *msg_v_urls = "Apskatt visus URL"; +char *msg_v_refs = "Apskatt visus Referrerus"; +char *msg_v_agents= "Apskatt visas prlkprogrammas"; +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]={ "Janvris", "Februris", "Marts", "Aprlis", + "Maijs", "Jnijs", "Jlijs", "Augusts", + "Septembris","Oktobris", "Novembris","Decembris"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Usage Statistics for"; +char *msg_h_other = "Other"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.lithuanian b/webalizer-2.23-08/lang/webalizer_lang.lithuanian new file mode 100644 index 0000000..e3d5292 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.lithuanian @@ -0,0 +1,628 @@ +/* + webalizer_lang.lithuanian + + Webalizer V2.0x Language Support file for Lithuanian. + 24-Sep-2004 by Justas Butkus (justasbutkus@takas.lt) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Lithuanian"; +char *langcode = "lt"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "raai"; +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 ivestis"; +char *msg_cur_dir = "dabartinis katalogas"; +char *msg_hostname= "raai apie tarnybin stot pavadinimu"; +char *msg_ign_hist= "Ignoruojami ankstesni istorijos raai..."; +char *msg_no_hist = "Nerastas istorijos failas..."; +char *msg_get_hist= "Skaitomas istorijos failas..."; +char *msg_put_hist= "Isaugomi istorijos raai..."; +char *msg_hist_err= "Klaida: Nepavyko rayti istorijos failo"; +char *msg_bad_hist= "Klaida: Ignoruojamas klaidingas istorijos raas"; +char *msg_bad_conf= "Klaida: Nepavyko atverti nuostat failo"; +char *msg_bad_key = "Perspjimas: Neteisingas raktaodis"; +char *msg_bad_date= "Klaida: Praleidiamas raas (neteisinga data)"; +char *msg_ign_nscp= "Praleidiami Netscape antrai raai"; +char *msg_bad_rec = "Praleidiami blogi raai"; +char *msg_no_vrec = "Taisyklingi raai nerasti!"; +char *msg_gen_rpt = "Kuriamas raas"; +char *msg_gen_sum = "Kuriamas rao svadas"; +char *msg_get_data= "Nuskaitomi ankstesnio veikimo laikotarpiu sukurti duomenys.."; +char *msg_put_data= "Isaugomi 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 isaugoti io veikimo duomen"; +char *msg_dup_data= "Perspjimas: Spjama, jog rasti pasikartojantys duomenys"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nenurodytas spartinaniosios atmintins failas, ataukiama..."; +char *msg_dns_nodb= "Klaida: Nepavyko atverti DNS spartinaniosios atmintins failo"; +char *msg_dns_nolk= "Klaida: Nepavyko urakinti DNS spartinaniosios atmintins failo"; +char *msg_dns_usec= "Naudojamas DNS spartinaniosios atmintins failas"; +char *msg_dns_rslv= "DNS paieka"; +char *msg_dns_none= "Nra 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 udrausti!"; +char *msg_nomem_tr= "Nepavyksta paskirti pakankamai atminties, Daniausi Nukreipjai udrausti!"; +char *msg_nomem_tu= "Nepavyksta paskirti pakankamai atminties, Daniausi URL udrausti!"; +char *msg_nomem_tc= "Nepavyksta paskirti pakankamai atminties, Daniausios Valstybs udraustos!"; +char *msg_nomem_ta= "Nepavyksta paskirti pakankamai atminties, Daniausios Klient Programos udraustos!"; +char *msg_nomem_tsr="Nepavyksta paskirti pakankamai atminties, Daniausios Paiekos udraustos!"; +char *msg_nomem_ti= "Nepavyksta paskirti pakankamai atminties, Daniausi Vartotoj Vardai udrausti!"; +char *msg_nomem_dh= "Klaida pridedant kompiuterio vardo jungt (kasdien), praleidiama"; +char *msg_nomem_mh= "Klaida pridedant kompiuterio vardo jungt (kas mnesin), praleidiama"; +char *msg_nomem_u = "Klaida pridedant URL jungt, praleidiama"; +char *msg_nomem_a = "Klaida pridedant Kliento Programos jungt, praleidiama"; +char *msg_nomem_r = "Klaida pridedant Nukreipjo jungt, praleidiama"; +char *msg_nomem_sc= "Klaida pridedant Paiekos jungt, praleidiama"; +char *msg_nomem_i = "Klaida pridedant Vartotojo Vardo jungt, praleidiama"; + +/* log record errors */ +char *msg_big_rec = "Klaida: Praleidiamas virijs dydio limit raas"; +char *msg_big_host= "Perspjimas: Trumpinamas per ilgas kompiuterio vardas"; +char *msg_big_date= "Perspjimas: Trumpinamas per ilgas datos laukas"; +char *msg_big_req = "Perspjimas: Trumpinamas per ilgas uklausos laukas"; +char *msg_big_ref = "Perspjimas: Trumpinamas per ilgas nukreipjo laukas"; +char *msg_big_user= "Perspjimas: Trumpinamas per ilgas vartotojo vardas"; +char *msg_big_one = "Perspjimas: rao reikm 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] [rao failas]"; +char *h_msg[]= { + "-h = atvaizduoti i pagalbos inut" , + "-V = atvaizduoti versijos informacij" , + "-v = be verbose" , + "-d = atvaizduoti papildom derinimo informacij" , + "-F type = rao tipas. tipas= (clf | ftp | squid | w3c)" , + "-f = Eils nuoseklumo klaida" , + "-i = ignoruoti istorijos fail" , + "-p = ilaikyti bsen (didjani)" , + "-b = ignore state (incremental)" , + "-q = atidti informacines inutes" , + "-Q = atidti _VISAS_ inutes" , + "-Y = atidti ali grafik" , + "-G = atidti valandin grafik" , + "-H = atidti valandin statistik" , + "-L = atidti spalvomis koduot grafik legend" , + "-l num = rodyti numeruotas fono linijas grafikuose" , + "-m num = Apsilankymo laiko limito reikm (sekundmis)" , + "-T = ivesti laiko matavimo informacij" , + "-c file = naudoti pasirinki fail 'failas'" , + "-n pavadinimas = vartotinas kompiuterio vardas" , + "-o dir = ivesties katalogas" , + "-t pavadinimas = ataskaitos pavadinimas 'pavadinimas'" , + "-a pavadinimas = slpti kliento program 'pavadinimas'" , + "-r pavadinimas = slpti nukreipj 'pavadinimas'" , + "-s pavadinimas = slpti puslap 'pavadinimas'" , + "-u pavadinimas = slpti URL 'pavadinimas'" , + "-x pavadinimas = Naudoti rinkmenos pltin 'pavadinimas'" , + "-O pavadinimas = Omit page 'pavadinimas'" , + "-P pavadinimas = Puslapio tipo pltinys 'pavadinimas'" , + "-I pavadinimas = Indekso pavadinimas 'pavadinimas'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Rodyti daniausi program (kiekis)" , + "-C num = Rodyti daniausi ali (kiekis)" , + "-R num = Rodyti daniausi nukreipj (kiekis)" , + "-S num = Rodyti daniausi puslapi (kiekis)" , + "-U num = Rodyti daniausi URL (kiekis)" , + "-e num = Rodyti daniausi jimo Puslapi (kiekis)" , + "-E num = Rodyti daniausi Ijimo puslapi (kiekis)" , + "-g num = Grupuoti adres sritis 'kiek' lygi" , + "-X = Slpti asmeninius puslapius" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D pavadinimas = Naudoti DNS Spartinaniosios atmintins fail 'pavadinimas'" , + "-N num = DNS proces kiekis (0=ijungta)" , + "-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 = "Svado periodas"; +char *msg_hhdr_gt = "Sugeneruota"; + +/* main index strings */ +char *msg_main_us = "Naudojimo svadas"; +/* char *msg_main_per= "Paskutinius 12 mnesi"; */ +char *msg_main_per= "Svadas pagal mnesius"; +char *msg_main_sum= "Svadas pagal mnesius"; +char *msg_main_da = "Dieninis vidurkis"; +char *msg_main_mt = "Mnesio 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 = "Didiausias"; +char *msg_h_total = "Bendras"; +char *msg_h_totals= "Suminiai"; +char *msg_h_day = "DIena"; +char *msg_h_mth = "Mnesis"; +char *msg_h_hour = "Valanda"; +char *msg_h_hits = "Jungi"; +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 = "Nukreipjas"; +char *msg_h_ctry = "alis"; +char *msg_h_search= "Paieka"; +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 = "Nukreipjai"; +char *msg_hlnk_en = "jimai"; +char *msg_hlnk_ex = "Ijimai"; +char *msg_hlnk_sr = "Paieka"; +char *msg_hlnk_i = "Vartotoj vardai"; + +/* monthly total table */ +char *msg_mtot_ms = "Mnesin statistika"; +char *msg_mtot_th = "Viso jungi"; +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 nukreipj"; +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= "Jungi per dien"; +char *msg_mtot_mhh= "Jungi 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 = "Jungi 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 = "Daniausiai"; +char *msg_top_of = "i"; +char *msg_top_s = "Viso puslapi"; +char *msg_top_u = "Viso URL"; +char *msg_top_r = "Viso Nukreipj"; +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 Ijimo puslapi"; +char *msg_top_sr = "Viso Paiek"; +char *msg_top_i = "Viso Vartotoj vard"; +char *msg_v_sites = "Perirti visus Puslapius"; +char *msg_v_urls = "Perirti visus URL"; +char *msg_v_refs = "Perirti visus Nukreipjus"; +char *msg_v_agents= "Perirti visus Vartotoj programas"; +char *msg_v_search= "Perirti visus Paiekas"; +char *msg_v_users = "Perirti 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", "Birelis", "Liepa", "Rugpjtis", + "Rugsjis","Spalis", "Lapkritis","Gruodis"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Neapibrtas atsako kodas", 0 }, + { "Kodas 100 - Tsiama", 0 }, + { "Kodas 101 - Keiiami protokolai", 0 }, + { "Kodas 200 - Gerai", 0 }, + { "Kodas 201 - Sukurta", 0 }, + { "Kodas 202 - Priimta", 0 }, + { "Kodas 203 - Ne autorizuojamoji informacija", 0 }, + { "Kodas 204 - Nra 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 uklausa", 0 }, + { "Kodas 401 - Neautorizuota", 0 }, + { "Kodas 402 - Reikalingas apmokjimas", 0 }, + { "Kodas 403 - Udrausta", 0 }, + { "Kodas 404 - Nerasta", 0 }, + { "Kodas 405 - Metodas neleistas", 0 }, + { "Kodas 406 - Nepriimtina", 0 }, + { "Kodas 407 - Btina proxy autentifikacija", 0 }, + { "Kodas 408 - Baigsi uklausai skirtas laikas", 0 }, + { "Kodas 409 - Konfliktas", 0 }, + { "Kodas 410 - Perkeltas", 0 }, + { "Kodas 411 - Ilgis btinas", 0 }, + { "Kodas 412 - Prie-parengtis nepavyko", 0 }, + { "Kodas 413 - Per ilga uklausa", 0 }, + { "Kodas 414 - Uklausos-URI per ilgas", 0 }, + { "Kodas 415 - Nepalaikomas terps tipas", 0 }, + { "Kodas 416 - Uklausos ribos nepatenkinamos", 0 }, + { "Kodas 417 - Laukimas nepavyko", 0 }, + { "Kodas 500 - Vidin serverio klaida", 0 }, + { "Kodas 501 - Nediegta", 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, "Neapsprsta/Neinoma", 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 siekiani 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'), "Armnija", 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'), "Azerbaidanas", 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'), "Bangladeas", 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'), "Brunjus 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'), "Centrins 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'), "Kemrnas", 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 Kyulys (Cape Verde)", 0,0,0 }, +{ IDX_2C('c','x'), "Kald 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'), "Dibutis", 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'), "Alyras", 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'), "Eritrja", 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'), "Pranczija", 0,0,0 }, +{ IDX_2C('g','a'), "Gabonas", 0,0,0 }, +{ IDX_2C('g','b'), "Didioji 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'), "Pranczijos 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'), "Gvinja", 0,0,0 }, +{ IDX_2C('g','p'), "Gvadelup", 0,0,0 }, +{ IDX_2C('g','q'), "Ekvatorin Gvinja", 0,0,0 }, +{ IDX_2C('g','r'), "Graikija", 0,0,0 }, +{ IDX_2C('g','s'), "v. Dordijos ir v. Sandvii salos.", 0,0,0 }, +{ IDX_2C('g','t'), "Gvatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guama", 0,0,0 }, +{ IDX_2C('g','w'), "Gvinja-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'), "Kamboda", 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'), "Korja (iaurs)", 0,0,0 }, +{ IDX_2C('k','r'), "Korja (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'), "Lichtenteinas", 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'), "Maralo 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'), "iaurins 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'), "Prancz Polinezija", 0,0,0 }, +{ IDX_2C('p','g'), "Papua ir Naujoji Gvinja", 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'), "Seielai", 0,0,0 }, +{ IDX_2C('s','d'), "Sudanas", 0,0,0 }, +{ IDX_2C('s','e'), "vedija", 0,0,0 }, +{ IDX_2C('s','g'), "Singapras", 0,0,0 }, +{ IDX_2C('s','h'), "v. Elena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovnija", 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'), "Pranczijos pietins teritorijos", 0,0,0 }, +{ IDX_2C('t','g'), "Togas", 0,0,0 }, +{ IDX_2C('t','h'), "Tailandas", 0,0,0 }, +{ IDX_2C('t','j'), "Tadikistanas", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmnistanas", 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 maosios slos", 0,0,0 }, +{ IDX_2C('u','s'), "Jungtins 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'), "Mergels salos (Brit)", 0,0,0 }, +{ IDX_2C('v','i'), "Mergels salos (JAV)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnamas", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Valio ir Futunos salos", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Jemenis", 0,0,0 }, +{ IDX_2C('y','t'), "Majotis", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavija", 0,0,0 }, +{ IDX_2C('z','a'), "Piet Afrika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambija", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabv", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.malay b/webalizer-2.23-08/lang/webalizer_lang.malay new file mode 100644 index 0000000..3fb9013 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.malay @@ -0,0 +1,634 @@ +/* + webalizer_lang.malay + + Webalizer V2.0x Language Support file for Malay + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 30-Oct-2000 Malay translation by Nazri Hussain (nazrih@mimos.my) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Malay"; +char *langcode = "ms"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "rekod"; +char *msg_addresses="alamat"; +char *msg_ignored = "diabaikan"; +char *msg_bad = "rosak"; +char *msg_in = "dalam"; +char *msg_seconds = "saat"; + +/* progress and setup error messages */ +char *msg_log_err = "Ralat: Saya rasa log fail anda tiada"; +char *msg_log_use = "Menggunakan fail log"; +char *msg_dir_err = "Ralat: Saya tidak dapat menukar ke direktori"; +char *msg_dir_use = "Menjana hasil di dalam"; +char *msg_cur_dir = "direktori terkini"; +char *msg_hostname= "Nama Host untuk laporan ini ialah"; +char *msg_ign_hist= "Mengabaikan fail terdahulu..."; +char *msg_no_hist = "Fail terdahulu tiada..."; +char *msg_get_hist= "Baca fail terdahulu..."; +char *msg_put_hist= "Simpan maklumat terdahulu..."; +char *msg_hist_err= "Ralat: Saya tidak dapat menyimpan fail terdahulu"; +char *msg_bad_hist= "Ralat: Saya mengabaikan rekod terdahulu yang rosak"; +char *msg_bad_conf= "Ralat: Saya tidak dapat membuka fail konfigurasi"; +char *msg_bad_key = "Amaran: katakunci tidak sah"; +char *msg_bad_date= "Ralat: Satu rekod diabaikan (tarikh salah)"; +char *msg_ign_nscp= "Satu kepala rekod Netscape diabaikan"; +char *msg_bad_rec = "Satu rekod salah diabaikan"; +char *msg_no_vrec = "Tiada rekod sah dijumpai!"; +char *msg_gen_rpt = "Menjana laporan untuk"; +char *msg_gen_sum = "Menjana ringkasan laporan"; +char *msg_get_data= "Membaca data larian terdahulu.."; +char *msg_put_data= "Menimpan data larian terkini..."; +char *msg_no_data = "Data larian terdahulu tidak dijumpai..."; +char *msg_bad_data= "Ralat: Saya tidak dapat mengambil-semula data larian"; +char *msg_data_err= "Ralat: Saya tidak dapat menyimpan data larian"; +char *msg_dup_data= "Amaran: Kemungkinan data yang sama dijumpai"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Fail cache tidak dinyatakan, proses dibatalkan..."; +char *msg_dns_nodb= "Ralat: Saya tidak dapat membuka fail cache DNS"; +char *msg_dns_nolk= "Ralat: Saya tidak dapat mengunci fail cache DNS"; +char *msg_dns_usec= "Fail cache DNS sedang digunakan"; +char *msg_dns_rslv= "Carian DNS"; +char *msg_dns_none= "Tiada apa untuk diproses"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Tidak dapat memperuntukkan ingatan, Halaman Terbaik diabaikan!"; +char *msg_nomem_tr= "Tidak dapat memperuntukkan ingatan, Perujuk Terbaik diabaikan!"; +char *msg_nomem_tu= "Tidak dapat memperuntukkan ingatan, URL Terbaik diabaikan!"; +char *msg_nomem_tc= "Tidak dapat memperuntukkan ingatan, Negara Terbaik diabaikan!"; +char *msg_nomem_ta= "Tidak dapat memperuntukkan ingatan, Agen Pengguna Terbaik diabaikan!"; +char *msg_nomem_tsr="Tidak dapat memperuntukkan ingatan, Katakunci Carian Terbaik diabaikan!"; +char *msg_nomem_ti= "Tidak dapat memperuntukkan ingatan, Katanama Pengguna Terbaik diabaikan!"; +char *msg_nomem_dh= "Ralat untuk menambah nod hos (harian), proses diabaikan"; +char *msg_nomem_mh= "Ralat untuk menambah nod hos (bulanan), proses diabaikan"; +char *msg_nomem_u = "Ralat untuk menambah nod URL, proses diabaikan"; +char *msg_nomem_a = "Ralat untuk menambah nod Agen Pengguna, proses diabaikan"; +char *msg_nomem_r = "Ralat untuk menambah nod Perujuk, proses diabaikan"; +char *msg_nomem_sc= "Ralat untuk menambah nod Katakunci Carian, proses diabaikan"; +char *msg_nomem_i = "Ralat untuk menambah nod Katanama Pengguna, proses diabaikan"; + +/* log record errors */ +char *msg_big_rec = "Ralat: Rekod log anda terlalu besar, proses diabaikan"; +char *msg_big_host= "Amaran: Nama hos yang terlalu panjang telah dipotong"; +char *msg_big_date= "Amaran: Ruangan tarikh yang terlalu panjang telah dipotong"; +char *msg_big_req = "Amaran: Ruangan pertanyaan yang terlalu panjang telah dipotong"; +char *msg_big_ref = "Amaran: Ruangan perujuk yang terlalu panjang telah dipotong"; +char *msg_big_user= "Amaran: Katanama yang terlalu panjang telah dipotong"; +char *msg_big_one = "Amaran: Perkataan melebihi saiz simpanan"; + +/* misc errors */ +char *msg_no_open = "Ralat: Tidak dapat membuka fail"; + +/* Help display... */ +char *h_usage1 = "Penggunaan"; +char *h_usage2 = "[pilihan] [fail log]"; +char *h_msg[]= { + "-h = cetak mesej pertolongan ini" , + "-V = cetak maklumat versi" , + "-v = be verbose" , + "-d = cetak maklumat tambahan berkenaan dengan debug" , + "-F type = jenis Log. jenis= (clf | ftp | squid | w3c)", + "-f = Alas turutan ralat" , + "-i = abaikan fail terdahulu" , + "-p = kekalkan keadaan (secara menaik)" , + "-b = ignore state (incremental)" , + "-q = abaikan maklumat mesej" , + "-Q = abaikan _SEMUA_ mesej" , + "-Y = abaikan graf negara" , + "-G = abaikan graf ikut jam" , + "-H = abaikan statistik ikut jam" , + "-L = abaikan graf yang berdasarkan petunjuk warna" , + "-l num = gunakan sejumlah garisan latarbelakang pada graf" , + "-m num = Nilai masa tamat untuk Lawatan (dalam saat)" , + "-T = cetak maklumat berkenaan masa jangkaan" , + "-c file = gunakan fail konfigurasi ini" , + "-n name = gunakan nama hos ini" , + "-o dir = gunakan direktori ini untuk hasil janaan" , + "-t name = nama laporan" , + "-a name = sorokkan nama agen pengguna" , + "-r name = sorokkan nama perujuk" , + "-s name = sorokkan nama halaman" , + "-u name = sorokkan nama URL" , + "-x name = gunakan pengakhir ini bagi nama fail" , + "-O name = Omit page 'name'" , + "-P name = Jenis pengakhir bagi nama fail ini" , + "-I name = Nama lain bagi fail Index" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Paparkan bilangan agen terbaik" , + "-C num = Paparkan bilangan negara terbaik" , + "-R num = Paparkan bilangan perujuk terbaik" , + "-S num = Paparkan bilangan halaman terbaik" , + "-U num = Paparkan bilangan URL terbaik" , + "-e num = Paparkan bilangan Halaman Utama yang terbaik" , + "-E num = Paparkan bilangan Hamalan Keluar yang terbaik" , + "-g num = Kumpulkan tahap Domain kepada" , + "-X = Sorokkan halaman individu ini" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Gunakan fail cache DNS ini" , + "-N num = Nombor proses bagi DNS (0=abaikan)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Jangkamasa Ringkasan"; +char *msg_hhdr_gt = "Dijanakan"; + +/* main index strings */ +char *msg_main_us = "Ringkasan Penggunaan untuk"; +/* char *msg_main_per= "12 bulan yang lepas"; */ +char *msg_main_per= "Ringkasan Bulanan"; +char *msg_main_sum= "Ringkasan Bulanan"; +char *msg_main_da = "Purata harian"; +char *msg_main_mt = "Jumlah Bulanan"; + +/* month HTML page strings */ +char *msg_hmth_du = "Pengunaan Harian bagi"; +char *msg_hmth_hu = "Pengunaan ikut Jam bagi"; + +/* table header strings */ +char *msg_h_by = "Ikut"; +char *msg_h_avg = "Purata"; +char *msg_h_max = "Maksima"; +char *msg_h_total = "Jumlah"; +char *msg_h_totals= "Jumlah"; +char *msg_h_day = "Hari"; +char *msg_h_mth = "Bulan"; +char *msg_h_hour = "Jam"; +char *msg_h_hits = "Capaian"; +char *msg_h_pages = "Muka"; +char *msg_h_visits= "Lawatan"; +char *msg_h_files = "Fail"; +char *msg_h_sites = "Halaman"; +char *msg_h_xfer = "KBait"; +char *msg_h_hname = "Nama Hos"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Agen Pengguna"; +char *msg_h_ref = "Perujuk"; +char *msg_h_ctry = "Negara"; +char *msg_h_search= "Perkataan Carian"; +char *msg_h_uname = "Katanama"; + +/* links along top of page */ +char *msg_hlnk_ds = "Statistik Harian"; +char *msg_hlnk_hs = "Statistik ikut Jam"; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = "Halaman"; +char *msg_hlnk_a = "Agen"; +char *msg_hlnk_c = "Negara"; +char *msg_hlnk_r = "Perujuk"; +char *msg_hlnk_en = "Masuk dari"; +char *msg_hlnk_ex = "Keluar dari"; +char *msg_hlnk_sr = "Carian"; +char *msg_hlnk_i = "Pengguna"; + +/* monthly total table */ +char *msg_mtot_ms = "Statistik Bulanan Untuk"; +char *msg_mtot_th = "Jumlah Capaian"; +char *msg_mtot_tf = "Jumlah Fail"; +char *msg_mtot_tx = "Jumlah KBait"; +char *msg_mtot_us = "Jumlah Halaman Unik"; +char *msg_mtot_ur = "Jumlah Perujuk Unik"; +char *msg_mtot_ua = "Jumlah Agen Pengguna Unik"; +char *msg_mtot_uu = "Jumlah URL unik"; +char *msg_mtot_ui = "Jumlah Katanama Unik"; +char *msg_mtot_mhd= "Purata Capaian Sehari"; +char *msg_mtot_mhh= "Purata Capaian Sejam"; +char *msg_mtot_mfd= "Purata Fail Sehari"; +char *msg_mtot_mpd= "Purata Halaman Sehari"; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "Purata Lawatan Sehari"; +char *msg_mtot_mkd= "Purata KBait Sehari"; +char *msg_mtot_rc = "Purata Capaian mengikut Kod Respon"; + +/* daily total table */ +char *msg_dtot_ds = "Statistik Harian untuk"; + +/* hourly total table */ +char *msg_htot_hs = "Statistik mengikut Jam bagi"; + +/* country pie chart */ +char *msg_ctry_use= "Penggunaan mengikut Negara bagi"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Antara"; +char *msg_top_of = "yang Terbaik dari"; +char *msg_top_s = "Jumlah Halaman"; +char *msg_top_u = "Jumlah URL"; +char *msg_top_r = "Jumlah Penujuk"; +char *msg_top_a = "Jumlah Agen Pengguna"; +char *msg_top_c = "Jumlah Negara"; +char *msg_top_en = "Jumlah Halaman Masukan"; +char *msg_top_ex = "Jumlah Halaman Keluar"; +char *msg_top_sr = "Jumlah Katakunci Carian"; +char *msg_top_i = "Jumlah Katanama"; +char *msg_v_sites = "Lihat Semua Halaman"; +char *msg_v_urls = "Lihat Semua URL"; +char *msg_v_refs = "Lihat Semua Penunjuk"; +char *msg_v_agents= "Lihat Semua Agen Pengguna"; +char *msg_v_search= "Lihat Semua Katakunci Carian"; +char *msg_v_users = "Lihat Semua Katanama"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "Mei", "Jun", + "Jul", "Ogo", "Sep", + "Okt", "Nov", "Dis"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Januari", "Februari", "March", "April", + "Mei", "Jun", "July", "Ogos", + "September","Oktober", "November","Disember"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Kod Respon tidak dapat ditakrif", 0 }, + { "Code 100 - Teruskan", 0 }, + { "Code 101 - Bertukar Protokol", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Dihasilkan", 0 }, + { "Code 202 - Diterima", 0 }, + { "Code 203 - Maklumat yang tidak dapat disahkan", 0 }, + { "Code 204 - Maklumat Tiada", 0 }, + { "Code 205 - Maklumat diset semula", 0 }, + { "Code 206 - Maklumat tidak lengkap", 0 }, + { "Code 300 - Pilihan Pelbagai", 0 }, + { "Code 301 - Telah berpindah secara tetap", 0 }, + { "Code 302 - Dijumpai", 0 }, + { "Code 303 - Lihat yang lain", 0 }, + { "Code 304 - Tidak Diubah", 0 }, + { "Code 305 - Gunakan Proxy", 0 }, + { "Code 307 - Telah berpindah sementara", 0 }, + { "Code 400 - Permintaan Salah", 0 }, + { "Code 401 - Tidak dibenarkan", 0 }, + { "Code 402 - Bayaran diperlukan", 0 }, + { "Code 403 - Capaian Disekat", 0 }, + { "Code 404 - Tidak Dijumpai", 0 }, + { "Code 405 - Method Tidak Dibenarkan", 0 }, + { "Code 406 - Tidak Boleh Diterima", 0 }, + { "Code 407 - Pengesahan Proxy Diperlukan", 0 }, + { "Code 408 - Masa Permintaan Tamat", 0 }, + { "Code 409 - Konflik", 0 }, + { "Code 410 - Hilang", 0 }, + { "Code 411 - Panjang Diperlukan", 0 }, + { "Code 412 - Keadaan Awal Gagal", 0 }, + { "Code 413 - Permintaan Entiti Terlalu Besar", 0 }, + { "Code 414 - Permintaan URI Terlalu Panjang", 0 }, + { "Code 415 - Jenis Media Tidak Disokong", 0 }, + { "Code 416 - Julat Permintaan Tidak Dibenarkan", 0 }, + { "Code 417 - Anggapan Gagal", 0 }, + { "Code 500 - Ralat Dalaman Bagi Pelayan", 0 }, + { "Code 501 - Tidak Diimplemen", 0 }, + { "Code 502 - Gateway Gagal", 0 }, + { "Code 503 - Perkhidmatan Tiada", 0 }, + { "Code 504 - Masa Tamat Bagi Gateway", 0 }, + { "Code 505 - Versi HTTP Tidak Disokong", 0 } }; + +char *msg_title = "Statistik Penggunaan bagi"; +char *msg_h_other = "Lain-lain"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Tidak Diketahui", 0,0,0 }, +{ IDX_3C('c','o','m'), "Komersil (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Pendidikan (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "Kerajaan US (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Antarabangsa (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "Ketenteraan US (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Rangkaian (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organisasi Tidak Komersil (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Gaya Lama Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Pulau Cocos (Keeling)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Republik Tengah Afrika", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.norwegian b/webalizer-2.23-08/lang/webalizer_lang.norwegian new file mode 100644 index 0000000..beb9524 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.norwegian @@ -0,0 +1,645 @@ +/* + webalizer_lang.norwegian + + Webalizer V2.0x Language Support file for norwegian. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 03-Oct-1998 Swedish Translation by Daniel Bergstrom (daniel@bergstrom.net) + 28-Oct-1998 Lots of typos fixed, Daniel Bergstrom (daniel@bergstrom.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 26-Apr-1999 More typos fixed, thanks to "Mika Perl" + (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 Hkon Flaty (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 nkkelord"; +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 oppfringer 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 lse 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 (mnedlig), 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 skestreng, 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 sprrefelt"; +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 strrelsen 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 besk (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=stng 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 mnedene"; */ +char *msg_main_per= "Summering mned for mned"; +char *msg_main_sum= "Summering mned for mned"; +char *msg_main_da = "Snitt over dagen"; +char *msg_main_mt = "Summer pr. mned"; + +/* 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 = "Mned"; +char *msg_h_hour = "Time"; +char *msg_h_hits = "Treff"; +char *msg_h_pages = "Sider"; +char *msg_h_visits= "Besk"; +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= "Skstreng"; +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 = "Sk"; +char *msg_hlnk_i = "Brukere"; + +/* monthly total table */ +char *msg_mtot_ms = "Mnedlig 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= "Besk 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 skestrenger"; +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 foresprsel", 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 - Foresprselen gikk over tiden", 0 }, + { "Kode 409 - Konflikt", 0 }, + { "Kode 410 - Borte", 0 }, + { "Kode 411 - Trenger lengde", 0 }, + { "Kode 412 - Vilkr misslyktes", 0 }, + { "Kode 413 - Foresprselsenhet for stor", 0 }, + { "Kode 414 - Foresprrsels-URL for lang", 0 }, + { "Kode 415 - Medietype ikke stttet", 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 stttes 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 oppsltt/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, militr (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'), "Cocosyene", 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'), "Juln", 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'), "Falklandsyene", 0,0,0 }, +{ IDX_2C('f','m'), "Mikronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faraoyene", 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'), "Grnnland", 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. Sandwichyene", 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 McDonaldyene", 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'), "Caymanyene", 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'), "Marshallyene", 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 Marianayene", 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'), "Moambique", 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'), "Solomonyene", 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 Caicosyene", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "Sndre 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 Futunayene", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Sydafrika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.polish b/webalizer-2.23-08/lang/webalizer_lang.polish new file mode 100644 index 0000000..a6c12bd --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.polish @@ -0,0 +1,640 @@ +/* + webalizer_lang.polish + + Webalizer V2.0x Language Support file for Polish. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 08-Jun-1998 Translated by Dariusz P. Pawlak (darekp@lib.amu.edu.pl) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 27-Jan-2000 Some translation fixes and updates by Jerzy Hodor (jh@rsi.pl) + 30-Jan-2000 Country code corrections by Bohdan Horst (nexus@hoth.amu.edu.pl) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 20-Mar-2000 Translation updates by Piotr Klaban (makler@man.torun.pl) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Polish"; +char *langcode = "pl"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* te s uywane tylko w podsumowaniach */ +/* Format: XXX rekordw (XXX zignorowano, XXX zych) w cigu X.XX sekund */ +char *msg_records = "zapisw"; +char *msg_addresses="adres(w)"; +char *msg_ignored = "opuszczono"; +char *msg_bad = "zy(ch)"; +char *msg_in = "w"; +char *msg_seconds = "sekund"; + +/* progress and setup error messages */ +char *msg_log_err = "Bd: Nie mog otworzy pliku logu"; +char *msg_log_use = "Uywam pliku logu"; +char *msg_dir_err = "Bd: Nie mog zmieni katalogu na"; +char *msg_dir_use = "Tworz wynik w"; +char *msg_cur_dir = "biecym katalogu"; +char *msg_hostname= "Raport tworzony dla hosta"; +char *msg_ign_hist= "Ignoruj poprzedni histori..."; +char *msg_no_hist = "Nie znalazem pliku historii..."; +char *msg_get_hist= "Czytam plik historii..."; +char *msg_put_hist= "Zapisuj informacj historii..."; +char *msg_hist_err= "Bd: Nie mog zapisa pliku historii"; +char *msg_bad_hist= "Bd: Pomijam bdny zapis historii"; +char *msg_bad_conf= "Bd: Nie mog otworzy pliku konfiguracyjnego"; +char *msg_bad_key = "Ostrzeenie: Bdne sowo kluczowe"; +char *msg_bad_date= "Bd: Pomijam rekord (bdna data)"; +char *msg_ign_nscp= "Pomijam nagwek rekordu Netscepe'a"; +char *msg_bad_rec = "Pomijam bdny zapis"; +char *msg_no_vrec = "Nie znalazem prawidowych rekordw!"; +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 biecego uruchomienia..."; +char *msg_no_data = "Nie znalazem danych z poprzedniego uruchomienia..."; +char *msg_bad_data= "Bd: Nie mog odczyta danych z poprzedniego uruchomienia"; +char *msg_data_err= "Bd: Nie mog zapisa danych z biecego uruchomienia"; +char *msg_dup_data= "Ostrzeenie: Prawdopodobnie znalazem zdublowane dane"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nie podano pliku buforujcego, przerywam dziaanie..."; +char *msg_dns_nodb= "Bd: Nie mog otworzy pliku buforujcego DNS"; +char *msg_dns_nolk= "Bd: Nie mog zablokowa pliku buforujcego DNS"; +char *msg_dns_usec= "Wykorzystuj plik buforujcy DNS"; +char *msg_dns_rslv= "Przeszukuj DNS"; +char *msg_dns_none= "Brak adresw 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 pamici, najczstsze lokalizacje anulowane!"; +char *msg_nomem_tr= "Nie mog przydzieli pamici, najczstsze odnoniki anulowane!"; +char *msg_nomem_tu= "Nie mog przydzieli pamici, najczstsze URLe anulowane!"; +char *msg_nomem_tc= "Nie mog przydzieli pamici, najczstsze kraje anulowane!"; +char *msg_nomem_ta= "Nie mog przydzieli pamici, najczciej uywane przegldarki anulowane!"; +char *msg_nomem_tsr="Nie mog przydzieli pamici, najczciej szukane sowa anulowane!"; +char *msg_nomem_ti= "Nie mog przydzieli pamici, najczstsze poczenia uytkownikw anulowane!"; +char *msg_nomem_dh= "Bd w trakcie dodawania kolejnego hosta (dzienne), pomijam"; +char *msg_nomem_mh= "Bd w trakcie dodawania kolejnego hosta (miesiczne), pomijam"; +char *msg_nomem_u = "Bd w trakcie dodawania kolejnego URLa, pomijam"; +char *msg_nomem_a = "Bd w trakcie dodawania kolejnego przegldarki, pomijam"; +char *msg_nomem_r = "Bd w trakcie dodawania kolejnego odnonika, pomijam"; +char *msg_nomem_sc= "Bd w trakcie dodawania kolejnego szukanego sowa, pomijam"; +char *msg_nomem_i = "Bd w trakcie dodawania kolejnego uytkownika, pomijam"; + +/* log record errors */ +char *msg_big_rec = "Bd: Pomijam zbyt duy zapis logu"; +char *msg_big_host= "Ostrzeenie: Obcinam, przekroczona wielko nazwy hosta"; +char *msg_big_date= "Ostrzeenie: Obcinam, przekroczona wielko pola daty"; +char *msg_big_req = "Ostrzeenie: Obcinam, przekroczona wielko pola dania"; +char *msg_big_ref = "Ostrzeenie: Obcinam, przekroczona wielko pola odnonika"; +char *msg_big_user= "Ostrzeenie: Obcinam, przekroczona dugo nazwy uytkownika"; +char *msg_big_one = "Ostrzeenie: Napis przekracza dopuszczaln wielko"; + +/* misc errors */ +char *msg_no_open = "Bd: Nie mog otworzy pliku"; + +/* Help display... */ +char *h_usage1 = "Uycie"; +char *h_usage2 = "[opcje] [plik logu]"; +char *h_msg[]= { + "-h = wywietla te informacje" , + "-V = wywietla informacje o wersji" , + "-v = be verbose" , + "-d = wywietla dodatkowe informacje" , + "-F typ = typ logu. typ= (clf | ftp | squid | w3c)", + "-f = zignoruj bdy czasu kolejnych wywoa", + "-i = pomija plik historii" , + "-p = zachowuje stan (przyrostowy)" , + "-b = ignore state (incremental)" , + "-q = wycza komunikaty informacyjne" , + "-Q = wycza wszystkie komunikaty" , + "-Y = wycza wykres krajw" , + "-G = wycza wykres godzinny" , + "-H = wycza statystyk godzinn" , + "-L = wycza kolorowe supki ledendy" , + "-l num = wcza num linii w tle wykresw" , + "-m num = czas pojedynczej wizyty (seconds)" , + "-T = wywietla informacje czasowe" , + "-c plik = uywa pliku konfiguracyjnego 'plik'" , + "-n nazwa = uywana nazwa hosta" , + "-o katalog= katalog uywany do zapisu" , + "-t nazwa = tytu 'nazwa' dla raportu" , + "-a nazwa = ukrywa program klienta 'nazwa'" , + "-r nazwa = ukrywa odnonik '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 plikw index.*: 'nazwa'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = wywietla num najczstszych przegldarek", + "-C num = wywietla num najczstszych krajw" , + "-R num = wywietla num najczstszych odnonikw", + "-S num = wywietla num najczstszych lokalizacji", + "-U num = wywietla num najczstszych URLi" , + "-e num = wywietla num najczstszych stron wejciowych" , + "-E num = wywietla num najczstszych stron wyjciowych" , + "-g num = grupuj domeny do poziomu 'num'" , + "-X = ukryj pojedyncze lokalizacje" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nazwa = uywaj pliku buforujcego DNS 'nazwa'", + "-N num = liczba procesw DNS (0=wycz)" , + "-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 miesicy"; */ +char *msg_main_per= "Sumarycznie w miesicu:"; +char *msg_main_sum= "Sumarycznie w miesicu:"; +char *msg_main_da = "rednio dziennie"; +char *msg_main_mt = "Oglnie w miesicu: "; + +/* 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 = "Miesic"; +char *msg_h_hour = "Godzina"; +char *msg_h_hits = "Wywoania"; +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 = "Przegldarka"; +char *msg_h_ref = "Odnoniki"; +char *msg_h_ctry = "Kraj"; +char *msg_h_search= "Wyszukiwany cig znakw"; +char *msg_h_uname = "Uytkownik"; + +/* 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 = "Przegldarki"; +char *msg_hlnk_c = "Kraje"; +char *msg_hlnk_r = "Odnoniki"; +char *msg_hlnk_en = "Wejcia"; +char *msg_hlnk_ex = "Wyjcia"; +char *msg_hlnk_sr = "Poszukiwane"; +char *msg_hlnk_i = "Uytkownicy"; + +/* monthly total table */ +char *msg_mtot_ms = "Statystyka w miesicu:"; +char *msg_mtot_th = "Cakowita liczba wywoa"; +char *msg_mtot_tf = "Cakowita liczba plikw"; +char *msg_mtot_tx = "Cakowita liczba KB"; +char *msg_mtot_us = "Cakowita liczba unikalnych lokalizacji"; +char *msg_mtot_ur = "Cakowita liczba unikalnych odnonikw"; +char *msg_mtot_ua = "Cakowita liczba unikalnych przegldarek"; +char *msg_mtot_uu = "Cakowita liczba unikalnych URLi"; +char *msg_mtot_ui = "Cakowita liczba unikalnych uytkownikw"; +char *msg_mtot_mhd= "Wywoa dziennie"; +char *msg_mtot_mhh= "Wywoa na godzin"; +char *msg_mtot_mfd= "Plikw dziennie"; +char *msg_mtot_mpd= "Stron dziennie"; +char *msg_mtot_msd= "Lokalizacji dziennie"; +char *msg_mtot_mvd= "Wizyt dziennie"; +char *msg_mtot_mkd= "Kilobajtw dziennie"; +char *msg_mtot_rc = "Wywoania wedug 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= "Odwoania wg krajw - "; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Pierwsze"; +char *msg_top_of = "z oglnej liczby"; +char *msg_top_s = "lokalizacji"; +char *msg_top_u = "URLi"; +char *msg_top_r = "odnonikw"; +char *msg_top_a = "przegldarek"; +char *msg_top_c = "krajw"; +char *msg_top_en = "stron wejciowych"; +char *msg_top_ex = "stron wyjciowych"; +char *msg_top_sr = "szukanych cigw znakw"; +char *msg_top_i = "uytkownikw"; +char *msg_v_sites = "Podgld wszystkich lokalizacji"; +char *msg_v_urls = "Podgld wszystkich URL'i"; +char *msg_v_refs = "Podgld wszystkich odnonikw"; +char *msg_v_agents= "Podgld wszystkich przegldarek"; +char *msg_v_search= "Podgld wszystkich cigw znakw"; +char *msg_v_users = "Podgld wszystkich uytkownikw"; + +/* 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", "padziernik", "listopad", "grudzie"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Niezdefiniowany kod odpowiedzi", 0 }, + { "Code 100 - Kontynuuj", 0 }, + { "Code 101 - Zmieniam protokoy", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Utworzono", 0 }, + { "Code 202 - Zaakceptowano", 0 }, + { "Code 203 - Niewiarygodna informacja", 0 }, + { "Code 204 - Brak zawartoci", 0 }, + { "Code 205 - Kasuj zawarto", 0 }, + { "Code 206 - Czciowa zawarto", 0 }, + { "Code 300 - Wielokrotny wybr", 0 }, + { "Code 301 - Przeniesiono na stae", 0 }, + { "Code 302 - Przeniesiono tymczasowo", 0 }, + { "Code 303 - Zobacz inne", 0 }, + { "Code 304 - Niezmodyfikowany", 0 }, + { "Code 305 - Uyj proxy", 0 }, + { "Code 307 - Tymczasowe przekierowanie", 0 }, + { "Code 400 - Bdne danie", 0 }, + { "Code 401 - Nieautoryzowany", 0 }, + { "Code 402 - dana zapata", 0 }, + { "Code 403 - Zakazane", 0 }, + { "Code 404 - Nie znaleziono", 0 }, + { "Code 405 - Nieuznawana metoda", 0 }, + { "Code 406 - Nie akceptowane", 0 }, + { "Code 407 - Niezbdna autentykacja przez proxy", 0 }, + { "Code 408 - Czas zapytania min", 0 }, + { "Code 409 - Konflikt", 0 }, + { "Code 410 - Ju niedostpne", 0 }, + { "Code 411 - Wymagana dugo", 0 }, + { "Code 412 - Warunki niespenione", 0 }, + { "Code 413 - Zapytanie za due", 0 }, + { "Code 414 - Zapytanie URI za dugie", 0 }, + { "Code 415 - Nieobsugiwany typ nonika", 0 }, + { "Code 416 - Zapytanie-Zakres niedostpny", 0 }, + { "Code 417 - Warunek niespeniony", 0 }, + { "Code 500 - Wewntrzny bd serwera", 0 }, + { "Code 501 - Niezaimplementowane", 0 }, + { "Code 502 - Za brama", 0 }, + { "Code 503 - Serwis niedostpny", 0 }, + { "Code 504 - Upyn czas bramkowania", 0 }, + { "Code 505 - Nieobsugiwana 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'), "Rzdowa USA (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Midzynarodowa (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 Amerykaskie", 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'), "Azerbejdan", 0,0,0 }, +{ IDX_2C('b','a'), "Bonia 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'), "Bugaria", 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'), "Biaoru", 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 rodkowoafrykaska", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Szwajcaria", 0,0,0 }, +{ IDX_2C('c','i'), "Wybrzee Koci Soniowej", 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 Przyldka", 0,0,0 }, +{ IDX_2C('c','x'), "Wyspa Boego 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'), "Dibuti", 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'), "Fidi", 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 Rwnikowa", 0,0,0 }, +{ IDX_2C('g','r'), "Grecja", 0,0,0 }, +{ IDX_2C('g','s'), "Georgia Pd. i Wyspy Sandwicha Pd.", 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'), "Wgry", 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'), "Wochy", 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'), "Kamboda", 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 Pnocna", 0,0,0 }, +{ IDX_2C('k','r'), "Korea Poudniowa", 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'), "Modawia", 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 Pnocne", 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'), "Sowenia", 0,0,0 }, +{ IDX_2C('s','j'), "Wyspy Svalbard i Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Sowacja", 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 Ksica", 0,0,0 }, +{ IDX_2C('s','u'), "ZSRR (byy)", 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 Poudniowe", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tajlandia", 0,0,0 }, +{ IDX_2C('t','j'), "Tadykistan", 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'), "Jugosawia", 0,0,0 }, +{ IDX_2C('z','a'), "Republika Poudniowej Afryki", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.portuguese b/webalizer-2.23-08/lang/webalizer_lang.portuguese new file mode 100644 index 0000000..3d3d46f --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.portuguese @@ -0,0 +1,639 @@ +/* + webalizer_lang.portuguese + + Webalizer V2.0x Language Support file for Portuguese. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 12-Feb-1999 Translated to Portuguese by Michele America + (micheleamerica@mail.geocities.com) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 08-Mar-2002 Updated by Nuno Loureiro (nuno@eth.pt) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Portuguese"; +char *langcode = "pt"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "registos"; +char *msg_addresses="enderecos"; +char *msg_ignored = "ignorados"; +char *msg_bad = "maus"; +char *msg_in = "em"; +char *msg_seconds = "segundos"; + +/* progress and setup error messages */ +char *msg_log_err = "Erro: Nao foi possivel abrir ficheiro de registo"; +char *msg_log_use = "A usar registo"; +char *msg_dir_err = "Erro: Nao foi possivel mudar directorio para"; +char *msg_dir_use = "A gerar saida no"; +char *msg_cur_dir = "directorio corrente"; +char *msg_hostname= "Hostname para relatorios e'"; +char *msg_ign_hist= "A ignorar historico anterior..."; +char *msg_no_hist = "Ficheiro de historico nao encontrado..."; +char *msg_get_hist= "A ler ficheiro de historico..."; +char *msg_put_hist= "A guardar informacao no historico..."; +char *msg_hist_err= "Erro: Impossivel escrever no ficheiro de historico"; +char *msg_bad_hist= "Erro: A ignorar registo invalido no ficheiro de historico"; +char *msg_bad_conf= "Erro: Impossivel abrir ficheiro de configuracao"; +char *msg_bad_key = "Aviso: Parametro invalido"; +char *msg_bad_date= "Erro: A ignorar registo (data invalida)"; +char *msg_ign_nscp= "A ignorar registo com cabecalho do Netscape"; +char *msg_bad_rec = "A ignorar registo invalido"; +char *msg_no_vrec = "Nao foram encontrado registo validos!"; +char *msg_gen_rpt = "A gerar relatorio de"; +char *msg_gen_sum = "A gerar relatorio sumario"; +char *msg_get_data= "A ler dados da execucao anterior..."; +char *msg_put_data= "A guardar dados da execucao currente..."; +char *msg_no_data = "Dados da execucao anterior nao encontrados..."; +/*char *msg_bad_data= "Registo de dados invalido";*/ +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Erro: Impossivel guardar dados da execucao currente"; +char *msg_dup_data= "Aviso: Encontrados dados possivelmente duplicados"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Impossivel alocar memoria suficiente, Top Sites desligado!"; +char *msg_nomem_tr= "Impossivel alocar memoria suficiente, Top Referrers desligado!"; +char *msg_nomem_tu= "Impossivel alocar memoria suficiente, Top URLs desligado!"; +char *msg_nomem_tc= "Impossivel alocar memoria suficiente, Top Countries desligado!"; +char *msg_nomem_ta= "Impossivel alocar memoria suficiente, Top User Agents desligado!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Erro ao adicionar host (diario), a ignorar"; +char *msg_nomem_mh= "Erro ao adicionar host (mensal), a ignorar"; +char *msg_nomem_u = "Erro ao adicionar URL, a ignorar"; +char *msg_nomem_a = "Erro ao adicionar User Agent, a ignorar"; +char *msg_nomem_r = "Erro ao adicionar Referrer, a ignorar"; +char *msg_nomem_sc= "Error adding Search String node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Erro: A ignorar registo grande de mais"; +char *msg_big_host= "Aviso: A truncar hostname grande de mais"; +char *msg_big_date= "Aviso: A truncar campo de data grande de mais"; +char *msg_big_req = "Aviso: A truncar campo de pedido grande de mais"; +char *msg_big_ref = "Aviso: A truncar campo de referrer grande de mais"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Aviso: Cadeia de caracteres excede tamanho de armazenamento"; + +/* misc errors */ +char *msg_no_open = "Erro: Impossivel abrir ficheiro"; + +/* Help display... */ +char *h_usage1 = "Utilizacao"; +char *h_usage2 = "[opcoes] [ficheiro de log]"; +char *h_msg[]= { + "-h = mostra esta mensagem de ajuda" , + "-V = mostra info sobre versao" , + "-v = be verbose" , + "-d = mostra info adicional para debug" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = fold sequence errors" , + "-i = ignorar ficheiro de historico" , + "-p = preservar estado (incremental)" , + "-b = ignorar estado (incremental)" , + "-q = suprimir mensagens de informacao" , + "-Q = suprimir _TODAS_ as mensagens" , + "-Y = supress country graph" , + "-G = suprimir grafico por horas" , + "-H = suprimir estatisticas por horas" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timeout value (seconds)" , + "-T = mostra informacao de timing" , + "-c fich = usar ficheiro de configuracao 'fich'", + "-n nome = usar hostname 'nome'" , + "-o dir = directorio de output a usar" , + "-t nome = titulo do relatorio" , + "-a nome = esconder user agent 'nome'" , + "-r nome = esconder referrer 'nome'" , + "-s nome = esconder site 'nome'" , + "-u nome = esconder URL 'nome'" , + "-x nome = Use filename extension 'name'" , + "-O nome = Omit page 'name'" , + "-P nome = Page type extension 'name'" , + "-I nome = alias para Index 'nome'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Mostrar num top agents" , + "-C num = Mostrar num top countries" , + "-R num = Mostrar num top referrers" , + "-S num = Mostrar num top sites" , + "-U num = Mostrar num top URLs" , + "-e num = Mostrar num top Entry Pages" , + "-E num = Mostrar num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nome = Use DNS Cache file 'nome'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J nome = Use GeoDB database 'nome'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W nome = Use GeoIP database 'nome'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Sumrio do Periodo"; +char *msg_hhdr_gt = "Gerado em"; + +/* main index strings */ +char *msg_main_us = "Sumrio de utilizao de"; +/* char *msg_main_per= "ltimos 12 Meses"; */ +char *msg_main_per= "Sumrio por Ms"; +char *msg_main_sum= "Sumrio por Ms"; +char *msg_main_da = "Mdia Diria"; +char *msg_main_mt = "Totais Mensais"; + +/* month HTML page strings */ +char *msg_hmth_du = "Uso dirio 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 = "Ms"; +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 = "Estatstica Diria"; +char *msg_hlnk_hs = "Estatstica 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 = "Estatstica 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 Cdigo de Resposta"; + +/* daily total table */ +char *msg_dtot_ds = "Estatstica Diria de"; + +/* hourly total table */ +char *msg_htot_hs = "Estatstica por Hora de"; + +/* country pie chart */ +char *msg_ctry_use= "Utilizao por Pas 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 Pginas de Entrada"; +char *msg_top_ex = "Total Pginas de Sada"; +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", "Maro", "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 - Mudana de Protocolos", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Criado", 0 }, + { "Code 202 - Aceite", 0 }, + { "Code 203 - Informao no Autoritria", 0 }, + { "Code 204 - Sem Contedo", 0 }, + { "Code 205 - Reinicializa Contedo", 0 }, + { "Code 206 - Contedo Parcial", 0 }, + { "Code 300 - Vrias Opes", 0 }, + { "Code 301 - Mudana Permanente", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - Ver Outro", 0 }, + { "Code 304 - No Modificado", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Mudana Temporria", 0 }, + { "Code 400 - Pedido Invlido", 0 }, + { "Code 401 - No Autorizado", 0 }, + { "Code 402 - Pagamento Necessrio", 0 }, + { "Code 403 - Proibido", 0 }, + { "Code 404 - No Encontrado", 0 }, + { "Code 405 - Metodo no Permitido", 0 }, + { "Code 406 - No Aceitvel", 0 }, + { "Code 407 - Necessria Autenticao pelo Proxy", 0 }, + { "Code 408 - Timeout do Pedido", 0 }, + { "Code 409 - Conflito", 0 }, + { "Code 410 - Desapareceu", 0 }, + { "Code 411 - Necessrio Tamanho", 0 }, + { "Code 412 - Precondio Falhou", 0 }, + { "Code 413 - Entidade de Pedido muito Grande", 0 }, + { "Code 414 - Entidade de URI muito Granda", 0 }, + { "Code 415 - Tipo de Media No Suportado", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Erro Interno do Servidor", 0 }, + { "Code 501 - No Implementado", 0 }, + { "Code 502 - Gateway Errado", 0 }, + { "Code 503 - Servio No Disponivel", 0 }, + { "Code 504 - Timeout do Gateway", 0 }, + { "Code 505 - Verso de HTTP No Suportada", 0 } }; + +char *msg_title = "Estatsticas de Utilizao de"; +char *msg_h_other = "Outros"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.portuguese_brazil b/webalizer-2.23-08/lang/webalizer_lang.portuguese_brazil new file mode 100644 index 0000000..2d6a55c --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.portuguese_brazil @@ -0,0 +1,640 @@ +/* + webalizer_lang.portuguese_brazil + + Webalizer V2.0x Language Support file for Portuguese (Brazilian dialect) + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 06-Aug-1999 Translation by Arquimedes M.da Silva + (software.developer@mailbr.com.br) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 12-Mar-2000 Huge Correction/Translation by Fabio B. Oliva + (fboliva@safenetworks.com) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Portuguese_Brazil"; +char *langcode = "pt-br"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "registros"; +char *msg_addresses="endereos"; +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: No foi possvel abrir o arquivo"; +char *msg_log_use = "Usando arquivo"; +char *msg_dir_err = "Erro: No possvel alterar o diretrio para"; +char *msg_dir_use = "Criando resultado em"; +char *msg_cur_dir = "Diretrio corrente"; +char *msg_hostname= "Nome do servidor para os relatrios "; +char *msg_ign_hist= "Ignorando registro invlido no arquivo..."; +char *msg_no_hist = "Arquivo de histrico no encontrado..."; +char *msg_get_hist= "Lendo arquivo de histrico..."; +char *msg_put_hist= "Salvando histrico..."; +char *msg_hist_err= "Erro: No foi possvel escrever o arquivo de histrico"; +char *msg_bad_hist= "Erro: Desprezando registro de histrico invlido"; +char *msg_bad_conf= "Erro: No foi possvel abrir arquivo de configurao"; +char *msg_bad_key = "Ateno: palavra chave invlida"; +char *msg_bad_date= "Erro: Desprezando registro (Data invlida)"; +char *msg_ign_nscp= "Ignorando registro cabealho Netscape"; +char *msg_bad_rec = "Ignorando registro com problema"; +char *msg_no_vrec = "Registros vlidos no encontrados!"; +char *msg_gen_rpt = "Gerando relatrio para"; +char *msg_gen_sum = "Gerando relatrio de sumrio"; +char *msg_get_data= "Lendo os dados da execuo anterior..."; +char *msg_put_data= "Salvando os dados da execuo atual..."; +char *msg_no_data = "Dados da execuo anterior no encontrados..."; +/*char *msg_bad_data= "Registro de dados invlido";*/ +char *msg_bad_data= "Erro: No foi possvel recuperar os dados"; +char *msg_data_err= "Erro: No foi possvel salvar os dados da execuo atual"; +char *msg_dup_data= "Ateno: Possvel duplicao de dados encontrada"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Arquivo Cache no encontrado. Abortando..."; +char *msg_dns_nodb= "Erro: No foi possvel abrir o arquivo cache do DNS"; +char *msg_dns_nolk= "Erro: No foi possvel 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= "No foi possvel alocar memria, Lista Endereos desabilitada!"; +char *msg_nomem_tr= "No foi possvel alocar memria, Lista Referncias desabilitada!"; +char *msg_nomem_tu= "No foi possvel alocar memria, Lista URLs disabilitado!"; +char *msg_nomem_tc= "No foi possvel alocar memria, Lista Pases desabilitada!"; +char *msg_nomem_ta= "No foi possvel alocar memria, Lista Clientes desabilitada!"; +char *msg_nomem_tsr="No foi possvel alocar memria,,Lista Strings de busca desabilitada!"; +char *msg_nomem_ti= "No foi possvel alocar memria suficiente, Lista de usurios desabilitada!"; +char *msg_nomem_dh= "Erro ao adicionar n de servidor (dirio), 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 Referncia, desprezado"; +char *msg_nomem_sc= "Erro ao adicionar n de String de busca, desprezado"; +char *msg_nomem_i = "Erro ao acicionar n de usurio, desprezando..."; + +/* log record errors */ +char *msg_big_rec = "Erro: Ignorando registro muito longo"; +char *msg_big_host= "Ateno: Truncando nome de servidor muito longo"; +char *msg_big_date= "Ateno: Truncando campo data muito longo"; +char *msg_big_req = "Ateno: Truncando campo de solicitao muito longo"; +char *msg_big_ref = "Ateno: Truncando campo de referncia muito longo"; +char *msg_big_user= "Warning: truncando nome de usurio muito longo"; +char *msg_big_one = "Ateno: Texto excede a rea de armazenamento disponvel"; + +/* misc errors */ +char *msg_no_open = "Erro: No foi possvel abrir arquivo"; + +/* Help display... */ +char *h_usage1 = "Forma de utilizao"; +char *h_usage2 = "[opes] [arquivo de histrico]"; +char *h_msg[]= { + "-h = imprime esta mensagem de ajuda" , + "-V = imprime a verso" , + "-v = be verbose" , + "-d = imprime informao adicional de depurao" , + "-F type = Log type. type= (clf | ftp | squid | w3c)" , + "-f = cruzar sequncia de erros" , + "-i = ignorar arquivo de histrico" , + "-p = recuperar processamento anterior (incremento)" , + "-b = ignorar incremento" , + "-q = suprimir mensagens de informao" , + "-Q = suprimir TODAS as mensagens" , + "-Y = suprimir grfico sobre os Pases" , + "-G = suprimir grfico sobre o horrio" , + "-H = suprimir estatstica sobre horrio" , + "-L = suprimir legendas sobre as cores do grfico" , + "-l num = usar linhas de background no grfico" , + "-m num = Valor de timeout para visita (seconds)" , + "-T = imprime informao sobre horrio" , + "-c arq = usar arquivo de configurao 'arq'" , + "-n nome = nome do servidor" , + "-o dir = diretrio de sada" , + "-t nome = ttulo do relatrio 'nome'" , + "-a nome = ocultar programa cliente 'nome'" , + "-r nome = ocultar refrencoa 'nome'" , + "-s nome = ocultar endereo 'nome'" , + "-u nome = ocultar URL 'nome'" , + "-x nome = Indica extenso para nome de arquivo 'nome'" , + "-O nome = Omit page 'nome'" , + "-P nome = Indica extenso para tipo de pgina '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 pases" , + "-R n = imprime as n primeiras referncias" , + "-S n = imprime os n primeiros endereos" , + "-U n = imprime as n primeiras URLs" , + "-e n = imprime as n primeiras pginas entrada" , + "-E n = imprime as n primeiras pginas sada" , + "-g n = Grupos de Domnio para n nveis" , + "-X = Ocultar sites individuais" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nome = Usar arquivo cache de DNS 'nome'" , + "-N num = Nmero 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 Perodo"; +char *msg_hhdr_gt = "Gerado em"; + +/* main index strings */ +char *msg_main_us = "Resumo de utilizao para"; +/* char *msg_main_per= "ltimos 12 Meses"; */ +char *msg_main_per= "Resumo Mensal"; +char *msg_main_sum= "Resumo Mensal"; +char *msg_main_da = "Mdia diria"; +char *msg_main_mt = "Total Mensal"; + +/* month HTML page strings */ +char *msg_hmth_du = "Utilizao diria em"; +char *msg_hmth_hu = "Utilizao por hora em"; + +/* table header strings */ +char *msg_h_by = "por"; +char *msg_h_avg = "Mdia"; +char *msg_h_max = "Max"; +char *msg_h_total = "Total"; +char *msg_h_totals= "Totais"; +char *msg_h_day = "Dia"; +char *msg_h_mth = "Ms"; +char *msg_h_hour = "Hora"; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Pginas"; +char *msg_h_visits= "Visitas"; +char *msg_h_files = "Arquivos"; +char *msg_h_sites = "Endereos"; +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 = "Referncia"; +char *msg_h_ctry = "Pas"; +char *msg_h_search= "String de busca"; +char *msg_h_uname = "Nomes de Usurios"; + +/* links along top of page */ +char *msg_hlnk_ds = "Estatsticas dirias"; +char *msg_hlnk_hs = "Estatsticas por hora"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Endereo"; +char *msg_hlnk_a = "Clientes"; +char *msg_hlnk_c = "Pases"; +char *msg_hlnk_r = "Referncias"; +char *msg_hlnk_en = "Entrada"; +char *msg_hlnk_ex = "Sada"; +char *msg_hlnk_sr = "Busca"; +char *msg_hlnk_i = "Usurios"; + +/* monthly total table */ +char *msg_mtot_ms = "Estatsticas 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 Usurios"; +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= "Pginas 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 cdigo de resposta"; + +/* daily total table */ +char *msg_dtot_ds = "Estatsticas diria para"; + +/* hourly total table */ +char *msg_htot_hs = "Estatsticas por hora para"; + +/* country pie chart */ +char *msg_ctry_use= "Hits por pas 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 endereos"; +char *msg_top_u = "Total de URLs"; +char *msg_top_r = "Total de referncias"; +char *msg_top_a = "Total de programas clientes"; +char *msg_top_c = "Total de pases"; +char *msg_top_en = "Total de Pginas de entrada"; +char *msg_top_ex = "Total de Pginas de sada"; +char *msg_top_sr = "Total de Strings de busca"; +char *msg_top_i = "Total de nomes de usurios"; +char *msg_v_sites = "Visualizar todos sites"; +char *msg_v_urls = "Visualizar todas URLs"; +char *msg_v_refs = "Visualizar todas Referncias"; +char *msg_v_agents= "Visualizar todos Agentes de usurio"; +char *msg_v_search= "Visualizar todas strings de procura"; +char *msg_v_users = "Visualizar todos nomes de usurios"; + +/* 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", "Maro", "Abril", + "Maio", "Junho", "Julho", "Agosto", + "Setembro", "Outubro", "Novembro", "Dezembro"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Cdigo de resposta indefinido", 0 }, + { "100 - Continua", 0 }, + { "101 - Trocando de protocolo", 0 }, + { "200 - OK", 0 }, + { "201 - Criado", 0 }, + { "202 - Aceito", 0 }, + { "203 - Informao no autorizada", 0 }, + { "204 - No existe contedo", 0 }, + { "205 - Contedo renovado", 0 }, + { "206 - Contedo parcial", 0 }, + { "300 - Mltiplas escolhas", 0 }, + { "301 - Movido permanentemente", 0 }, + { "302 - Encontrado", 0 }, + { "303 - Ver outros", 0 }, + { "304 - No modificado", 0 }, + { "305 - Utilizar Proxy", 0 }, + { "307 - Movido temporariamente", 0 }, + { "400 - Requisio errada", 0 }, + { "401 - Acesso negado", 0 }, + { "402 - Requer pagamento", 0 }, + { "403 - Proibido", 0 }, + { "404 - No encontrada", 0 }, + { "405 - Mtodo no permitido", 0 }, + { "406 - No aceitvel", 0 }, + { "407 - Autenticao de Proxy requerida", 0 }, + { "408 - Fim do tempo de espera", 0 }, + { "409 - Conflito", 0 }, + { "410 - Abadonado", 0 }, + { "411 - Tamanho requerido", 0 }, + { "412 - Falta condio prvia", 0 }, + { "413 - Entidade de requisio muito longa", 0 }, + { "414 - URI de requisico muito longa", 0 }, + { "415 - Meio no suportado", 0 }, + { "416 - Limite solicitado no satisfeito", 0 }, + { "417 - Expectation Failed", 0 }, + { "500 - Erro interno no servidor", 0 }, + { "501 - No implementado", 0 }, + { "502 - Erro no Gateway", 0 }, + { "503 - Servio indisponvel", 0 }, + { "504 - Fim do tempo de espera para Gateway", 0 }, + { "505 - HTTP Verso no suportada", 0 } }; + +char *msg_title = "Estatsticas de utilizao para"; +char *msg_h_other = "Outros"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "No 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'), "Organizao 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'), "Afeganisto", 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'), "Armnia", 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'), "Azerbaijo", 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'), "Bolvia", 0,0,0 }, +{ IDX_2C('b','r'), "Brasil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Buto", 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'), "Repblica Central Africana", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Suia", 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'), "Camares", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colmbia", 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'), "Repblica 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'), "Repblica Dominicana", 0,0,0 }, +{ IDX_2C('d','z'), "Arglia", 0,0,0 }, +{ IDX_2C('e','c'), "Equador", 0,0,0 }, +{ IDX_2C('e','e'), "Estnia", 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'), "Etipia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlndia", 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'), "Micronsia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "Frana", 0,0,0 }, +{ IDX_2C('g','a'), "Gabo", 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'), "Gergia", 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'), "Grcia", 0,0,0 }, +{ IDX_2C('g','s'), "S. Gergia 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'), "Crocia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungria", 0,0,0 }, +{ IDX_2C('i','d'), "Indonsia", 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'), "Territrio Ocenico 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'), "Itlia", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordnia", 0,0,0 }, +{ IDX_2C('j','p'), "Japo", 0,0,0 }, +{ IDX_2C('k','e'), "Qunia", 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'), "Coria (Norte)", 0,0,0 }, +{ IDX_2C('k','r'), "Coria (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'), "Kazaquisto", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lbano", 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'), "Libria", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Litunia", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburgo", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Lbia", 0,0,0 }, +{ IDX_2C('m','a'), "Marrocos", 0,0,0 }, +{ IDX_2C('m','c'), "Mnaco", 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'), "Macednia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Monglia", 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'), "Martinca", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritnia", 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'), "Mxico", 0,0,0 }, +{ IDX_2C('m','y'), "Malasia", 0,0,0 }, +{ IDX_2C('m','z'), "Moambique", 0,0,0 }, +{ IDX_2C('n','a'), "Nambia", 0,0,0 }, +{ IDX_2C('n','c'), "Nova Calednia", 0,0,0 }, +{ IDX_2C('n','e'), "Nigria", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicargua", 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 Zelndia", 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'), "Polinsia 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'), "Paquisto", 0,0,0 }, +{ IDX_2C('p','l'), "Polnia", 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'), "Reunio", 0,0,0 }, +{ IDX_2C('r','o'), "Romnia", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Federao Russa", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Arbia Saudita", 0,0,0 }, +{ IDX_2C('s','b'), "Ilhas Salomo", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudo", 0,0,0 }, +{ IDX_2C('s','e'), "Sucia", 0,0,0 }, +{ IDX_2C('s','g'), "Singapura", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Eslovnia", 0,0,0 }, +{ IDX_2C('s','j'), "Ilhas Svalbard e Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Repblica 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'), "Somlia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "So Tom e Prncipe", 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'), "Territrios Franceses do Sul", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tailndia", 0,0,0 }, +{ IDX_2C('t','j'), "Tajaquisto", 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'), "Tunsia", 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'), "Tanznia", 0,0,0 }, +{ IDX_2C('u','a'), "Ucrnia", 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 Amrica", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguai", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbequisto", 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'), "Imen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Iuguslvia", 0,0,0 }, +{ IDX_2C('z','a'), "Africa do Sul", 0,0,0 }, +{ IDX_2C('z','m'), "Zmbia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabue", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.romanian b/webalizer-2.23-08/lang/webalizer_lang.romanian new file mode 100644 index 0000000..db88f4a --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.romanian @@ -0,0 +1,634 @@ +/* + webalizer_lang.romanian + + Webalizer V2.0x Language Support file for Romanian. + 17-May-1999 Translation by Mircea Ilie (mirceax@tep.ro) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 04-Feb-2000 Level 1.3 translation by Iulian Radu (iulian_r@starnets.ro) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 16-Jan-2001 Level 2.0 translation by Mircea Ilie (mirceax@tep.ro) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.french for french). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "in romana"; +char *langcode = "ro"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "inregistrari"; +char *msg_addresses="adrese"; +char *msg_ignored = "ignorat"; +char *msg_bad = "gresit"; +char *msg_in = "in"; +char *msg_seconds = "secunde"; + +/* progress and setup error messages */ +char *msg_log_err = "Eroare: Nu pot deschide fisierul jurnal"; +char *msg_log_use = "Accesez fisierul jurnal"; +char *msg_dir_err = "Eroare: Nu pot sa ajung in directorul"; +char *msg_dir_use = "Rezultatul este salvat in"; +char *msg_cur_dir = "directorul curent"; +char *msg_hostname= "Hostname-ul pentru rapoarte este"; +char *msg_ign_hist= "Ignor fisierul de istoric precedent..."; +char *msg_no_hist = "Nu pot gasi fisierul de istoric..."; +char *msg_get_hist= "Citesc fisierul de istoric..."; +char *msg_put_hist= "Salvez informatiile in fisierul de istoric..."; +char *msg_hist_err= "Eroare: Nu pot sa scriu in fisierul de istoric"; +char *msg_bad_hist= "Eroare: Ignor inregistrarile invalide din fisierul de istoric"; +char *msg_bad_conf= "Eroare: Nu pot deschide fisierul de configurare"; +char *msg_bad_key = "Avertisment: Cuvint cheie invalid"; +char *msg_bad_date= "Eroare: Sar inregistrarea (date incorecte)"; +char *msg_ign_nscp= "Sar inregistrarea antetului Netscape"; +char *msg_bad_rec = "Sar o inregistrare gresita"; +char *msg_no_vrec = "Nu am gasit nici o inregsitare corecta!"; +char *msg_gen_rpt = "Generez un raport pentru"; +char *msg_gen_sum = "Generez cuprinsul raportului"; +char *msg_get_data= "Citesc datele rulate inainte..."; +char *msg_put_data= "Salvez datele rulate acum..."; +char *msg_no_data = "Datele rulate inainte nu au fost gasite..."; +char *msg_bad_data= "Eroare: Nu pot reface datele rulate"; +char *msg_data_err= "Eroare: Nu pot salva datele rulate acum"; +char *msg_dup_data= "Avertisment: S-ar putea sa fi gasit date duplicate"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nu s-a specificat nici un fisier cache, renunt..."; +char *msg_dns_nodb= "Eroare: Nu pot deschide fisierul cache al DNS"; +char *msg_dns_nolk= "Eroare: Nu pot bloca fisierul cache al DNS"; +char *msg_dns_usec= "Folosesc fisierul cache al DNS"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "Nimic de prelucrat"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Nu pot aloca suficienta memorie, dezactivez Top Situri!"; +char *msg_nomem_tr= "Nu pot aloca suficienta memorie, dezactivez Top Pagini referente!"; +char *msg_nomem_tu= "Nu pot aloca suficienta memorie, dezactivez Top URL-uri!"; +char *msg_nomem_tc= "Nu pot aloca suficienta memorie, dezactivez Top Tari!"; +char *msg_nomem_ta= "Nu pot aloca suficienta memorie, dezactivez Top Navigatoare vizitatori!"; +char *msg_nomem_tsr="Nu pot aloca suficienta memorie, dezactivez Top Siruri cautate!"; +char *msg_nomem_ti= "Nu pot aloca suficienta memorie, dezactivez Top Utilizatori!"; +char *msg_nomem_dh= "Eroare adaugare nod host (zilnic), sar"; +char *msg_nomem_mh= "Eroare adaugare nod host (lunar), sar"; +char *msg_nomem_u = "Eroare adaugare nod URL, sar"; +char *msg_nomem_a = "Eroare adaugare nod Navigator client, sar"; +char *msg_nomem_r = "Eroare adaugare nod de Pagina referenta, sar"; +char *msg_nomem_sc= "Eroare adaugare nod Sir de cautare, sar"; +char *msg_nomem_i = "Eroare adaugare nod Utilizatori, sar"; + +/* log record errors */ +char *msg_big_rec = "Eroare: Sar o inregistrare de jurnal supradimensionata"; +char *msg_big_host= "Avertisment: Trunchiez hostname supradimensionat"; +char *msg_big_date= "Avertisment: Trunchiez cimpul data supradimensionat"; +char *msg_big_req = "Avertisment: Trunchiez cimpul cerere supradimensionat"; +char *msg_big_ref = "Avertisment: Trunchiez cimpul paginii referente supradimensionat"; +char *msg_big_user= "Avertisment: Trunchiez cimpul utilizator supradimensionat"; +char *msg_big_one = "Avertisment: Sirul depaseste dimensiunea spatiului de stocare"; + +/* misc errors */ +char *msg_no_open = "Eroare: Nu pot deschide fisierul"; + +/* Help display... */ +char *h_usage1 = "Utilizare"; +char *h_usage2 = "[optiuni] [fisier jurnal]"; +char *h_msg[]= { + "-h = afiseaza acest mesaj de ajutor" , + "-V = afiseaza informatii despre versiune" , + "-v = be verbose" , + "-d = afiseaza informatii de depanare suplimentare" , + "-F type = Tip jurnal. type= (clf | ftp | squid | w3c)" , + "-f = eroare la secventa de fold" , + "-i = ignora fisierul de istoric" , + "-p = pastreaza starea (incremental)" , + "-b = ignora starea (incremental)" , + "-q = elimina mesajele de informare" , + "-Q = elimina _TOATE_ mesajele" , + "-Y = elimina graficul tarilor" , + "-G = elimina graficul orelor" , + "-H = elimina starea pe ore" , + "-L = elimina legenda graficelor color" , + "-l num = foloseste linii numerotate pe fundalul graficelor" , + "-m num = valoarea timeout-ului pentru vizite (secunde)" , + "-T = afiseaza informatiile despre temporizare" , + "-c file = foloseste fisierul de configurare 'file'" , + "-n name = hostname-ul de folosit" , + "-o dir = directorul folosit pentru rezultate" , + "-t name = titlul raportului va fi 'name'" , + "-a name = ascunde navigatoarele clientilor de tipul 'name'" , + "-r name = ascunde pagina referenta cu numele 'name'" , + "-s name = ascunde situl 'name'" , + "-u name = ascunde URL-ul 'name'" , + "-x name = foloseste extensia de nume fisier 'name'" , + "-O name = Omit page 'name'" , + "-P name = extensia tipului de pagina va fi 'name'" , + "-I name = aliasul index-ului va fi 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = afiseaza numeric topul navigatoarelor clientilor" , + "-C num = afiseaza numeric topul tarilor" , + "-R num = afiseaza numeric topul referentilor" , + "-S num = afiseaza numeric topul siturilor" , + "-U num = afiseaza numeric topul URL-urilor" , + "-e num = afiseaza numeric topul Paginilor de intrare", + "-E num = afiseaza numeric topul Paginilor de iesire", + "-X = Ascunde siturile individuale" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Foloseste fisierul cache DNS 'name'" , + "-N num = Numarul de procese DNS (0=dezactivat)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoIP database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Perioada analizata"; +char *msg_hhdr_gt = "Generat in"; + +/* main index strings */ +char *msg_main_us = "Sumarul utilizarii lui"; +/* char *msg_main_per= "ultimele 12 luni"; */ +char *msg_main_per= "Sumarul pe luna"; +char *msg_main_sum= "Sumarul pe luna"; +char *msg_main_da = "Media zilnica"; +char *msg_main_mt = "Totaluri lunare"; + +/* month HTML page strings */ +char *msg_hmth_du = "Utilizarea zilnica pe luna"; +char *msg_hmth_hu = "Utilizarea orara pe luna"; + +/* table header strings */ +char *msg_h_by = "dupa"; +char *msg_h_avg = "Medie"; +char *msg_h_max = "Maxim"; +char *msg_h_total = "Total"; +char *msg_h_totals= "Totaluri"; +char *msg_h_day = "Zi"; +char *msg_h_mth = "Luna"; +char *msg_h_hour = "Ora"; +char *msg_h_hits = "Accesari"; +char *msg_h_pages = "Pagini"; +char *msg_h_visits= "Vizite"; +char *msg_h_files = "Fisiere"; +char *msg_h_sites = "Situri"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Nume"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Navigator"; +char *msg_h_ref = "Pagina referenta"; +char *msg_h_ctry = "Tara"; +char *msg_h_search= "Sir de cautare"; +char *msg_h_uname = "Utilizator"; + +/* links along top of page */ +char *msg_hlnk_ds = "Statistici zilnice"; +char *msg_hlnk_hs = "Statistici orare"; +char *msg_hlnk_u = "URL-uri"; +char *msg_hlnk_s = "Situri"; +char *msg_hlnk_a = "Navigator"; +char *msg_hlnk_c = "Tari"; +char *msg_hlnk_r = "Pagini referente"; +char *msg_hlnk_en = "Intrari"; +char *msg_hlnk_ex = "Iesiri"; +char *msg_hlnk_sr = "Cautare"; +char *msg_hlnk_i = "Utilizatori"; + +/* monthly total table */ +char *msg_mtot_ms = "Statistici lunare pentru"; +char *msg_mtot_th = "Total accesari"; +char *msg_mtot_tf = "Total fisiere"; +char *msg_mtot_tx = "Total Kbytes"; +char *msg_mtot_us = "Total situri unice"; +char *msg_mtot_ur = "Total pagini referente unice"; +char *msg_mtot_ua = "Total navigatoare"; +char *msg_mtot_uu = "Total URL-uri unice"; +char *msg_mtot_ui = "Total Utilizatori unici"; +char *msg_mtot_mhd= "Vizitari pe zi"; +char *msg_mtot_mhh= "Vizitari pe ora"; +char *msg_mtot_mfd= "Fisiere pe zi"; +char *msg_mtot_mpd= "Pagini pe zi"; +char *msg_mtot_msd= "Situri pe zi"; +char *msg_mtot_mvd= "Vizite pe zi"; +char *msg_mtot_mkd= "KBytes pe zi"; +char *msg_mtot_rc = "Accesari dupa codul de raspuns"; + +/* daily total table */ +char *msg_dtot_ds = "Statistici zilnice pe luna"; + +/* hourly total table */ +char *msg_htot_hs = "Statistici orare pe luna"; + +/* country pie chart */ +char *msg_ctry_use= "Utilizarea dupa tara pe luna"; + +/* top tables */ +/* Formatted as "Topul xxx din xxx total ceva" */ +char *msg_top_top = "Top"; +char *msg_top_of = "din"; +char *msg_top_s = "al Siturilor"; +char *msg_top_u = "al URL-urilor"; +char *msg_top_r = "al Paginilor referente"; +char *msg_top_a = "al Navigatoarelor"; +char *msg_top_c = "al Tarilor"; +char *msg_top_en = "total Pagini de intrare"; +char *msg_top_ex = "total Pagini de iesire"; +char *msg_top_sr = "total Siruri de cautare"; +char *msg_top_i = "Total Utilizatori"; +char *msg_v_sites = "Vizualizarea tuturor siturilor"; +char *msg_v_urls = "Vizualizarea tuturor URL-urilor"; +char *msg_v_refs = "Vizualizarea tuturor paginilor referente"; +char *msg_v_agents= "Vizualizarea tuturor navigatoarelor"; +char *msg_v_search= "Vizualizarea tuturor cuvintelor cheie"; +char *msg_v_users = "Vizualizarea tuturor utiltizatorilor"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Ian", "Feb", "Mar", + "Apr", "Mai", "Iun", + "Iul", "Aug", "Sep", + "Oct", "Noi", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Ianuarie", "Februarie", "Martie", "Aprilie", + "Mai", "Iunie", "Iulie", "August", + "Septembrie","Octombrie", "Noiembrie","Decembrie"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Cod de raspuns nedefinit", 0 }, + { "Cod 100 - Continua", 0 }, + { "Cod 101 - Schimb de protocol", 0 }, + { "Cod 200 - OK", 0 }, + { "Cod 201 - Creat", 0 }, + { "Cod 202 - Aceptat", 0 }, + { "Cod 203 - Informatie fara autoritate", 0 }, + { "Cod 204 - Fara continut", 0 }, + { "Cod 205 - Initializare continut", 0 }, + { "Cod 206 - Continut partial", 0 }, + { "Cod 300 - Optiuni multiple", 0 }, + { "Cod 301 - Mutat permanent", 0 }, + { "Cod 302 - Gasit", 0 }, + { "Cod 303 - Vezi alt", 0 }, + { "Cod 304 - Nemodificat", 0 }, + { "Cod 305 - Foloseste proxy", 0 }, + { "Cod 307 - Mutat temporar", 0 }, + { "Cod 400 - Cerere gresita", 0 }, + { "Cod 401 - Neautorizat", 0 }, + { "Cod 402 - Plata solicitata", 0 }, + { "Cod 403 - Interzis", 0 }, + { "Cod 404 - Lipsa", 0 }, + { "Cod 405 - Metoda nepermisa", 0 }, + { "Cod 406 - Inacceptabil", 0 }, + { "Cod 407 - Autentificare prin proxy necesara", 0 }, + { "Cod 408 - Timeout cerere", 0 }, + { "Cod 409 - Conflict", 0 }, + { "Cod 410 - Satisfacut", 0 }, + { "Cod 411 - Lungime solicitata", 0 }, + { "Cod 412 - Precondite esuata", 0 }, + { "Cod 413 - Entitatea ceruta este prea mare", 0 }, + { "Cod 414 - URI-ul cerut prea lung", 0 }, + { "Cod 415 - Tip de mediu necunoscut", 0 }, + { "Cod 416 - Domeniul cererii nerealizabil", 0 }, + { "Cod 417 - Asteptare esuata", 0 }, + { "Cod 500 - Eroare interna a serverului", 0 }, + { "Cod 501 - Neimplementat", 0 }, + { "Cod 502 - Gateway gresit", 0 }, + { "Cod 503 - Serviciu indisponibil", 0 }, + { "Cod 504 - Timeout la gateway", 0 }, + { "Cod 505 - Versiune de HTTP nesuportata", 0 } + }; + +char *msg_title = "Statisticile de utilizare ale lui"; +char *msg_h_other = "Altele"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nerezolvat/Necunoscut", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Guvernamental (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Militar (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Retea (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Arpanet stilul vechi (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Cimp Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "Emiratele Arabe Unite", 0,0,0 }, +{ IDX_2C('a','f'), "Afganistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua si Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Antilele olandeze", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "Samoa americana", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaidjan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia si Hertegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgia", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazilia", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Insula Bouvet", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Bielorusia", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Insulele Cocos (Keeling)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Republica Centrafricana", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Elvetia", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Coasta de Fildes)", 0,0,0 }, +{ IDX_2C('c','k'), "Insulele Cook", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Camerun", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Columbia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Insulele Capului Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Insulele Christmas", 0,0,0 }, +{ IDX_2C('c','y'), "Cipru", 0,0,0 }, +{ IDX_2C('c','z'), "Republica Ceha", 0,0,0 }, +{ IDX_2C('d','e'), "Germania", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Danemarca", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Republica Dominicana", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egipt", 0,0,0 }, +{ IDX_2C('e','h'), "Sahara Occidentala", 0,0,0 }, +{ IDX_2C('e','r'), "Eritreea", 0,0,0 }, +{ IDX_2C('e','s'), "Spania", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlanda", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Insulele Falkland (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronezia", 0,0,0 }, +{ IDX_2C('f','o'), "Insulele Faroe", 0,0,0 }, +{ IDX_2C('f','r'), "Franta", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Marea Britanie (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "Guiana Franceza", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Groenlanda", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guineea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadelupe", 0,0,0 }, +{ IDX_2C('g','q'), "Guineea Ecuatoriala", 0,0,0 }, +{ IDX_2C('g','r'), "Grecia", 0,0,0 }, +{ IDX_2C('g','s'), "Ins. S. Georgia si S. Sandwich", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guiana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Insulele Heard si McDonald", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Ungaria", 0,0,0 }, +{ IDX_2C('i','d'), "Indonezia", 0,0,0 }, +{ IDX_2C('i','e'), "Irlanda", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "Teritoriul Britanic din Oceanul Indian", 0,0,0 }, +{ IDX_2C('i','q'), "Irak", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Islanda", 0,0,0 }, +{ IDX_2C('i','t'), "Italia", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Iordania", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenia", 0,0,0 }, +{ IDX_2C('k','g'), "Kirgizstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodgia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Insulele Comore", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts si Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Coreea (de Nord)", 0,0,0 }, +{ IDX_2C('k','r'), "Coreea (de Sud)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Insulele Cayman", 0,0,0 }, +{ IDX_2C('k','z'), "Kazahstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Liban", 0,0,0 }, +{ IDX_2C('l','c'), "Sfinta Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lituania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Letonia", 0,0,0 }, +{ IDX_2C('l','y'), "Libia", 0,0,0 }, +{ IDX_2C('m','a'), "Maroc", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Insulele Marshall", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar (Birmania)", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macao", 0,0,0 }, +{ IDX_2C('m','p'), "Insulele Mariane de Nord", 0,0,0 }, +{ IDX_2C('m','q'), "Martinica", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldive", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexic", 0,0,0 }, +{ IDX_2C('m','y'), "Malaezia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambic", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "Noua Caledonie", 0,0,0 }, +{ IDX_2C('n','e'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','f'), "Insula Norfolk", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Olanda", 0,0,0 }, +{ IDX_2C('n','o'), "Norvegia", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Noua Zeelanda", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Polinezia franceza", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Noua Guinee", 0,0,0 }, +{ IDX_2C('p','h'), "Filipine", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polonia", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre si Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugalia", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Rusia", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Arabia Saudita", 0,0,0 }, +{ IDX_2C('s','b'), "Insulele Solomon", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Suedia", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "Sfinta Elena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Insulele Svalbard si Jan Mayen", 0,0,0 }, +{ IDX_2C('s','k'), "Republica Slovaca", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome si Principe", 0,0,0 }, +{ IDX_2C('s','u'), "URSS (fosta)", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Insulele Turks si Caicos", 0,0,0 }, +{ IDX_2C('t','d'), "Ciad", 0,0,0 }, +{ IDX_2C('t','f'), "Teritoriile Antarctice Franceze", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tailanda", 0,0,0 }, +{ IDX_2C('t','j'), "Tadjikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turcia", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad-Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ucraina", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Regatul Unit", 0,0,0 }, +{ IDX_2C('u','m'), "Insulele US Minor Outlying", 0,0,0 }, +{ IDX_2C('u','s'), "Statele Unite ale Americii", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican (Sfintul Scaun)", 0,0,0 }, +{ IDX_2C('v','c'), "Sifintul Vincent si Grenadine", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Insulele Virgine (britance)", 0,0,0 }, +{ IDX_2C('v','i'), "Insulele Virgine (americane)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Insulele Wallis si Futuna", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Africa de Sud", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.romanian-iso-8859-2 b/webalizer-2.23-08/lang/webalizer_lang.romanian-iso-8859-2 new file mode 100644 index 0000000..231ed36 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.romanian-iso-8859-2 @@ -0,0 +1,635 @@ +/* + webalizer_lang.romanian-iso-8859-2 + + Webalizer V2.0x Language Support file for Romanian (iso-8859-2 charset). + 17-May-1999 Translation by Mircea Ilie (mirceax@tep.ro) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 04-Feb-2000 Level 1.3 translation by Iulian Radu (iulian_r@starnets.ro) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 16-Jan-2001 Level 2.0 translation by Mircea Ilie (mirceax@tep.ro) + 25-Sep-2001 ISO-8859-2 version by Mircea Ilie (mirceax@tep.ro) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.french for french). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "n romna"; +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 = "nregistrri"; +char *msg_addresses="adrese"; +char *msg_ignored = "ignorat"; +char *msg_bad = "greit"; +char *msg_in = "n"; +char *msg_seconds = "secunde"; + +/* progress and setup error messages */ +char *msg_log_err = "Eroare: Nu pot deschide fiierul jurnal"; +char *msg_log_use = "Accesez fiierul 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 fiierul de istoric precedent..."; +char *msg_no_hist = "Nu pot gsi fiierul de istoric..."; +char *msg_get_hist= "Citesc fiierul de istoric..."; +char *msg_put_hist= "Salvez informaiile n fiierul de istoric..."; +char *msg_hist_err= "Eroare: Nu pot s scriu n fiierul de istoric"; +char *msg_bad_hist= "Eroare: Ignor nregistrrile invalide din fiierul de istoric"; +char *msg_bad_conf= "Eroare: Nu pot deschide fiierul de configurare"; +char *msg_bad_key = "Avertisment: Cuvnt 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 greit"; +char *msg_no_vrec = "Nu am gsit 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 gsite..."; +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 gsit date duplicate"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Nu s-a specificat nici un fiier cache, renun..."; +char *msg_dns_nodb= "Eroare: Nu pot deschide fiierul cache al DNS"; +char *msg_dns_nolk= "Eroare: Nu pot bloca fiierul cache al DNS"; +char *msg_dns_usec= "Folosesc fiierul 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 cutate!"; +char *msg_nomem_ti= "Nu pot aloca suficient memorie, dezactivez Top Utilizatori!"; +char *msg_nomem_dh= "Eroare adugare nod host (zilnic), sar"; +char *msg_nomem_mh= "Eroare adugare nod host (lunar), sar"; +char *msg_nomem_u = "Eroare adugare nod URL, sar"; +char *msg_nomem_a = "Eroare adugare nod Navigator client, sar"; +char *msg_nomem_r = "Eroare adugare nod de Pagin referent, sar"; +char *msg_nomem_sc= "Eroare adugare nod ir de cutare, sar"; +char *msg_nomem_i = "Eroare adugare 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 cmpul dat supradimensionat"; +char *msg_big_req = "Avertisment: Trunchiez cmpul cerere supradimensionat"; +char *msg_big_ref = "Avertisment: Trunchiez cmpul paginii referente supradimensionat"; +char *msg_big_user= "Avertisment: Trunchiez cmpul utilizator supradimensionat"; +char *msg_big_one = "Avertisment: irul depete dimensiunea spaiului de stocare"; + +/* misc errors */ +char *msg_no_open = "Eroare: Nu pot deschide fiierul"; + +/* Help display... */ +char *h_usage1 = "Utilizare"; +char *h_usage2 = "[opiuni] [fiier jurnal]"; +char *h_msg[]= { + "-h = afieaz acest mesaj de ajutor" , + "-V = afieaz informaii despre versiune" , + "-v = be verbose" , + "-d = afieaz informaii de depanare suplimentare" , + "-F type = Tip jurnal. type= (clf | ftp | squid | w3c)" , + "-f = eroare la secvena de fold" , + "-i = ignor fiierul de istoric" , + "-p = pstreaz 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 = folosete linii numerotate pe fundalul graficelor" , + "-m num = valoarea timeout-ului pentru vizite (secunde)" , + "-T = afieaz informaiile temporale" , + "-c file = folosete fiierul 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 clienilor de tipul 'name'" , + "-r name = ascunde pagina referent cu numele 'name'" , + "-s name = ascunde situl 'name'" , + "-u name = ascunde URL-ul 'name'" , + "-x name = folosete extensia de nume fiier '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 = afieaz numeric topul navigatoarelor clienilor" , + "-C num = afieaz numeric topul rilor" , + "-R num = afieaz numeric topul referenilor" , + "-S num = afieaz numeric topul siturilor" , + "-U num = afieaz numeric topul URL-urilor" , + "-e num = afieaz numeric topul Paginilor de intrare", + "-E num = afieaz numeric topul Paginilor de iesire", + "-X = Ascunde siturile individuale" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Folosete fiierul cache DNS 'name'" , + "-N num = Numrul 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 = "Accesri"; +char *msg_h_pages = "Pagini"; +char *msg_h_visits= "Vizite"; +char *msg_h_files = "Fiiere"; +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 cutare"; +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 = "Intrri"; +char *msg_hlnk_ex = "Ieiri"; +char *msg_hlnk_sr = "Cutare"; +char *msg_hlnk_i = "Utilizatori"; + +/* monthly total table */ +char *msg_mtot_ms = "Statistici lunare pentru"; +char *msg_mtot_th = "Total accesri"; +char *msg_mtot_tf = "Total fiiere"; +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= "Fiiere 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 = "Accesri dup codul de rspuns"; + +/* 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 ieire"; +char *msg_top_sr = "total iruri de cutare"; +char *msg_top_i = "total Utilizatori"; +char *msg_v_sites = "Afiarea tuturor siturilor"; +char *msg_v_urls = "Afiarea tuturor URL-urilor"; +char *msg_v_refs = "Afiarea tuturor paginilor referente"; +char *msg_v_agents= "Afiarea tuturor navigatoarelor"; +char *msg_v_search= "Afiarea tuturor cuvintelor cheie"; +char *msg_v_users = "Afiarea 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 rspuns 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 - Informaie fr autoritate", 0 }, + { "Cod 204 - Fr coninut", 0 }, + { "Cod 205 - Iniializare coninut", 0 }, + { "Cod 206 - Coninut parial", 0 }, + { "Cod 300 - Opiuni multiple", 0 }, + { "Cod 301 - Mutat permanent", 0 }, + { "Cod 302 - Gsit", 0 }, + { "Cod 303 - Vezi alt", 0 }, + { "Cod 304 - Nemodificat", 0 }, + { "Cod 305 - Folosete proxy", 0 }, + { "Cod 307 - Mutat temporar", 0 }, + { "Cod 400 - Cerere greit", 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 - Satisfcut", 0 }, + { "Cod 411 - Lungime solicitat", 0 }, + { "Cod 412 - Precondiie euat", 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 - Ateptarea a euat", 0 }, + { "Cod 500 - Eroare intern a serverului", 0 }, + { "Cod 501 - Neimplementat", 0 }, + { "Cod 502 - Gateway greit", 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'), "Internaional (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Militar (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Reea (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 Heregovina", 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'), "Elveia", 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'), "Frana", 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'), "Croaia", 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'), "Krgzstan", 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'), "Sfnta 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'), "Romnia", 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'), "Sfnta 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 (Sfntul Scaun)", 0,0,0 }, +{ IDX_2C('v','c'), "Sfntul Vincent i Grenadine", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Insulele Virgine britance", 0,0,0 }, +{ IDX_2C('v','i'), "Insulele Virgine americane", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Insulele Wallis i Futuna", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Africa de Sud", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.russian b/webalizer-2.23-08/lang/webalizer_lang.russian new file mode 100644 index 0000000..9030171 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.russian @@ -0,0 +1,646 @@ +/* This file is full of -*- C -*- code, so treat it as such. + + webalizer_lang.russian + + Webalizer V2.0x Language Support file for Russian. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 18-Aug-1998 Translated by Sergey Groznyh + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 10-Mar-2000 New 2.0 strings translated by Andrew A. Vasilyev (andy@demos.su) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + + Note: In order to use the russian character set, the GD graphics + library needs to be patched, otherwise you will get garbage. + The file gd1.3-patch-koi8-r.gz includes this patch, which you + should get and install before compiling the russian version of + the Webalizer. Thanks to Sergey Groznyh for this submission. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Russian"; +char *langcode = "ru"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = ""; +char *msg_addresses=""; +char *msg_ignored = ""; +char *msg_bad = ""; +char *msg_in = ""; +char *msg_seconds = ""; + +/* progress and setup error messages */ +char *msg_log_err = ": ޣ "; +char *msg_log_use = " ޣ "; +char *msg_dir_err = ": "; +char *msg_dir_use = " "; +char *msg_cur_dir = " "; +char *msg_hostname= " ޣ "; +char *msg_ign_hist= " ..."; +char *msg_no_hist = " ..."; +char *msg_get_hist= " ..."; +char *msg_put_hist= " ..."; +char *msg_hist_err= ": "; +char *msg_bad_hist= ": "; +char *msg_bad_conf= ": "; +char *msg_bad_key = ": "; +char *msg_bad_date= ": ( )"; +char *msg_ign_nscp= " Netscape"; +char *msg_bad_rec = " "; +char *msg_no_vrec = " !"; +char *msg_gen_rpt = " ޣ "; +char *msg_gen_sum = " ޣ"; + +/* New for 1.1 */ /* Current state data messages */ +char *msg_get_data= " ..."; +char *msg_put_data= " ..."; +char *msg_no_data = " ..."; +char *msg_bad_data= ": "; +char *msg_data_err= ": "; +char *msg_dup_data= ": "; + +/* DNS Stuff */ +char *msg_dns_nocf= " -, ..."; +char *msg_dns_nodb= ": - DNS"; +char *msg_dns_nolk= ": - DNS"; +char *msg_dns_usec= " DNS -"; +char *msg_dns_rslv= "DNS "; +char *msg_dns_none= " "; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= " , !"; +char *msg_nomem_tr= " , !"; +char *msg_nomem_tu= " , URL !"; +char *msg_nomem_tc= " , !"; +char *msg_nomem_ta= " , !"; +char *msg_nomem_tsr=" , !"; +char *msg_nomem_ti= " , ͣ !"; +char *msg_nomem_dh= " ( ޣ), "; +char *msg_nomem_mh= " ( ޣ), "; +char *msg_nomem_u = " URL, "; +char *msg_nomem_a = " , "; +char *msg_nomem_r = " , "; +char *msg_nomem_sc= " , "; +char *msg_nomem_i = " , "; + +/* log record errors */ +char *msg_big_rec = ": ޣ "; +char *msg_big_host= ": "; +char *msg_big_date= ": "; +char *msg_big_req = ": "; +char *msg_big_ref = ": "; +char *msg_big_user= ": "; +char *msg_big_one = ": ߣ"; + +/* misc errors */ +char *msg_no_open = ": "; + +/* Help display... */ +char *h_usage1 = ""; +char *h_usage2 = "[] [ޣ ]"; +char *h_msg[]= { + "-h = " , + "-V = " , + "-v = be verbose" , + "-d = " , + "-F = . = (clf | ftp | squid | w3c)", + "-f = fold sequence errors" , + "-i = " , + "-p = ()" , + "-b = ignore state (incremental)" , + "-q = " , + "-Q = __ " , + "-Y = " , + "-G = " , + "-H = " , + "-L = " , + "-l = '' " , + "-m = '' (seconds)" , + "-T = " , + "-c = ''" , + "-n = " , + "-o . = " , + "-t = ޣ ''" , + "-a = ''" , + "-r = ''" , + "-s = ''" , + "-u = URL ''" , + "-x = '' HTML-" , + "-O = Omit page ''" , + "-P = '' - " , + "-I = " , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A = '' " , + "-C = '' " , + "-R = '' ", + "-S = '' " , + "-U = '' URL" , + "-e = '' " , + "-E = '' " , + "-g = ''" , + "-X = " , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D = DNS '' -" , + "-N = DNS (0=)" , + "-j = Enable native GeoDB lookups" , + "-J = Use GeoIP database ''" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W = Use GeoIP database ''" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = " "; +char *msg_hhdr_gt = " "; + +/* main index strings */ +char *msg_main_us = " "; +/* char *msg_main_per= " 12 "; */ +char *msg_main_per= " "; +char *msg_main_sum= " "; +char *msg_main_da = " "; +char *msg_main_mt = " "; + +/* month HTML page strings */ +char *msg_hmth_du = " "; +char *msg_hmth_hu = " "; + +/* table header strings */ +char *msg_h_by = ""; +char *msg_h_avg = " "; +char *msg_h_max = "Max"; +char *msg_h_total = ""; +char *msg_h_totals= ""; +char *msg_h_day = ""; +char *msg_h_mth = ""; +char *msg_h_hour = ""; +char *msg_h_hits = ""; +char *msg_h_pages = ""; +char *msg_h_visits= ""; +char *msg_h_files = ""; +char *msg_h_sites = ""; +char *msg_h_xfer = ""; +char *msg_h_hname = " "; +char *msg_h_url = "URL"; +char *msg_h_agent = ""; +char *msg_h_ref = " "; +char *msg_h_ctry = ""; +char *msg_h_search= " "; +char *msg_h_uname = " "; + +/* links along top of page */ +char *msg_hlnk_ds = " "; +char *msg_hlnk_hs = " "; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = ""; +char *msg_hlnk_a = ""; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = " "; +char *msg_hlnk_en = " "; +char *msg_hlnk_ex = " "; +char *msg_hlnk_sr = ""; +char *msg_hlnk_i = ""; + +/* monthly total table */ +char *msg_mtot_ms = " "; +char *msg_mtot_th = " "; +char *msg_mtot_tf = " "; +char *msg_mtot_tx = " "; +char *msg_mtot_us = " "; +char *msg_mtot_ur = " "; +char *msg_mtot_ua = " "; +char *msg_mtot_uu = " URL"; +char *msg_mtot_ui = " ͣ"; +char *msg_mtot_mhd= " "; +char *msg_mtot_mhh= " "; +char *msg_mtot_mfd= " "; +char *msg_mtot_mpd= " "; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= " "; +char *msg_mtot_mkd= "ߣ ()"; +char *msg_mtot_rc = " "; + +/* daily total table */ +char *msg_dtot_ds = " "; + +/* hourly total table */ +char *msg_htot_hs = " "; + +/* country pie chart */ +char *msg_ctry_use= " "; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = ""; +char *msg_top_of = ""; +char *msg_top_s = ""; +char *msg_top_u = "URL"; +char *msg_top_r = " "; +char *msg_top_a = ""; +char *msg_top_c = ""; +char *msg_top_en = " "; +char *msg_top_ex = " "; +char *msg_top_sr = " "; +char *msg_top_i = "ͣ "; +char *msg_v_sites = " "; +char *msg_v_urls = " URL-"; +char *msg_v_refs = " "; +char *msg_v_agents= " "; +char *msg_v_search= " "; +char *msg_v_users = " "; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "", "", "", + "", "", "", + "", "", "", + "", "", ""}; + +/* long month names - can be any length */ +char *l_month[12]={ "", "", "", "", + "", "", "", "", + "", "", "", ""}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { " ", 0 }, + { " 100 - Continue", 0 }, + { " 101 - Switching Protocols", 0 }, + { " 200 - OK", 0 }, + { " 201 - Created", 0 }, + { " 202 - Accepted", 0 }, + { " 203 - Non-Authoritative Information", 0 }, + { " 204 - No Content", 0 }, + { " 205 - Reset Content", 0 }, + { " 206 - Partial Content", 0 }, + { " 300 - Multiple Choices", 0 }, + { " 301 - Moved Permanently", 0 }, + { " 302 - Found", 0 }, + { " 303 - See Other", 0 }, + { " 304 - Not Modified", 0 }, + { " 305 - Use Proxy", 0 }, + { " 307 - Moved Temporarily", 0 }, + { " 400 - Bad Request", 0 }, + { " 401 - Unauthorized", 0 }, + { " 402 - Payment Required", 0 }, + { " 403 - Forbidden", 0 }, + { " 404 - Not Found", 0 }, + { " 405 - Method Not Allowed", 0 }, + { " 406 - Not Acceptable", 0 }, + { " 407 - Proxy Authentication Required", 0 }, + { " 408 - Request Timeout", 0 }, + { " 409 - Conflict", 0 }, + { " 410 - Gone", 0 }, + { " 411 - Length Required", 0 }, + { " 412 - Precondition Failed", 0 }, + { " 413 - Request Entity Too Large", 0 }, + { " 414 - Request-URI Too Long", 0 }, + { " 415 - Unsupported Media Type", 0 }, + { " 416 - Requested Range Not Satisfiable", 0 }, + { " 417 - Expectation Failed", 0 }, + { " 500 - Internal Server Error", 0 }, + { " 501 - Not Implemented", 0 }, + { " 502 - Bad Gateway", 0 }, + { " 503 - Service Unavailable", 0 }, + { " 504 - Gateway Timeout", 0 }, + { " 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = " "; +char *msg_h_other = ""; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "/", 0,0,0 }, +{ IDX_3C('c','o','m'), " ", 0,0,0 }, +{ IDX_3C('e','d','u'), " ", 0,0,0 }, +{ IDX_3C('g','o','v'), " ", 0,0,0 }, +{ IDX_3C('i','n','t'), " (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), " ", 0,0,0 }, +{ IDX_3C('n','e','t'), " ", 0,0,0 }, +{ IDX_3C('o','r','g'), " ", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a')," Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o')," (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "", 0,0,0 }, +{ IDX_2C('a','e'), "Σ ", 0,0,0 }, +{ IDX_2C('a','f'), "", 0,0,0 }, +{ IDX_2C('a','g'), " ", 0,0,0 }, +{ IDX_2C('a','i'), "", 0,0,0 }, +{ IDX_2C('a','l'), "", 0,0,0 }, +{ IDX_2C('a','m'), "", 0,0,0 }, +{ IDX_2C('a','n'), " ", 0,0,0 }, +{ IDX_2C('a','o'), "", 0,0,0 }, +{ IDX_2C('a','q'), "", 0,0,0 }, +{ IDX_2C('a','r'), "", 0,0,0 }, +{ IDX_2C('a','s'), " ", 0,0,0 }, +{ IDX_2C('a','t'), "", 0,0,0 }, +{ IDX_2C('a','u'), "", 0,0,0 }, +{ IDX_2C('a','w'), "", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "", 0,0,0 }, +{ IDX_2C('b','a'), " ", 0,0,0 }, +{ IDX_2C('b','b'), "", 0,0,0 }, +{ IDX_2C('b','d'), "", 0,0,0 }, +{ IDX_2C('b','e'), "", 0,0,0 }, +{ IDX_2C('b','f'), " ", 0,0,0 }, +{ IDX_2C('b','g'), "", 0,0,0 }, +{ IDX_2C('b','h'), "", 0,0,0 }, +{ IDX_2C('b','i'), "", 0,0,0 }, +{ IDX_2C('b','j'), "", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), " ", 0,0,0 }, +{ IDX_2C('b','n'), " ", 0,0,0 }, +{ IDX_2C('b','o'), "", 0,0,0 }, +{ IDX_2C('b','r'), "", 0,0,0 }, +{ IDX_2C('b','s'), "", 0,0,0 }, +{ IDX_2C('b','t'), "", 0,0,0 }, +{ IDX_2C('b','v'), " ", 0,0,0 }, +{ IDX_2C('b','w'), "", 0,0,0 }, +{ IDX_2C('b','y'), "", 0,0,0 }, +{ IDX_2C('b','z'), "", 0,0,0 }, +{ IDX_2C('c','a'), "", 0,0,0 }, +{ IDX_2C('c','c'), " ", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), " ", 0,0,0 }, +{ IDX_2C('c','g'), "", 0,0,0 }, +{ IDX_2C('c','h'), "", 0,0,0 }, +{ IDX_2C('c','i'), " ", 0,0,0 }, +{ IDX_2C('c','k'), " ", 0,0,0 }, +{ IDX_2C('c','l'), "", 0,0,0 }, +{ IDX_2C('c','m'), "", 0,0,0 }, +{ IDX_2C('c','n'), "", 0,0,0 }, +{ IDX_2C('c','o'), "", 0,0,0 }, +{ IDX_2C('c','r'), "-", 0,0,0 }, +{ IDX_2C('c','u'), "", 0,0,0 }, +{ IDX_2C('c','v'), "-", 0,0,0 }, +{ IDX_2C('c','x'), " ", 0,0,0 }, +{ IDX_2C('c','y'), "", 0,0,0 }, +{ IDX_2C('c','z'), " ", 0,0,0 }, +{ IDX_2C('d','e'), "", 0,0,0 }, +{ IDX_2C('d','j'), "", 0,0,0 }, +{ IDX_2C('d','k'), "", 0,0,0 }, +{ IDX_2C('d','m'), "", 0,0,0 }, +{ IDX_2C('d','o'), " ", 0,0,0 }, +{ IDX_2C('d','z'), "", 0,0,0 }, +{ IDX_2C('e','c'), "", 0,0,0 }, +{ IDX_2C('e','e'), "", 0,0,0 }, +{ IDX_2C('e','g'), "", 0,0,0 }, +{ IDX_2C('e','h'), " ", 0,0,0 }, +{ IDX_2C('e','r'), "", 0,0,0 }, +{ IDX_2C('e','s'), "", 0,0,0 }, +{ IDX_2C('e','t'), "", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "", 0,0,0 }, +{ IDX_2C('f','j'), "", 0,0,0 }, +{ IDX_2C('f','k'), " () -", 0,0,0 }, +{ IDX_2C('f','m'), "", 0,0,0 }, +{ IDX_2C('f','o'), " ", 0,0,0 }, +{ IDX_2C('f','r'), "", 0,0,0 }, +{ IDX_2C('g','a'), "", 0,0,0 }, +{ IDX_2C('g','b'), " (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "", 0,0,0 }, +{ IDX_2C('g','e'), "", 0,0,0 }, +{ IDX_2C('g','f'), " ", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "", 0,0,0 }, +{ IDX_2C('g','i'), "", 0,0,0 }, +{ IDX_2C('g','l'), "", 0,0,0 }, +{ IDX_2C('g','m'), "", 0,0,0 }, +{ IDX_2C('g','n'), "", 0,0,0 }, +{ IDX_2C('g','p'), "", 0,0,0 }, +{ IDX_2C('g','q'), " ", 0,0,0 }, +{ IDX_2C('g','r'), "", 0,0,0 }, +{ IDX_2C('g','s'), ". . -", 0,0,0 }, +{ IDX_2C('g','t'), "", 0,0,0 }, +{ IDX_2C('g','u'), "", 0,0,0 }, +{ IDX_2C('g','w'), "-", 0,0,0 }, +{ IDX_2C('g','y'), "", 0,0,0 }, +{ IDX_2C('h','k'), "", 0,0,0 }, +{ IDX_2C('h','m'), " ", 0,0,0 }, +{ IDX_2C('h','n'), "", 0,0,0 }, +{ IDX_2C('h','r'), "", 0,0,0 }, +{ IDX_2C('h','t'), "", 0,0,0 }, +{ IDX_2C('h','u'), "", 0,0,0 }, +{ IDX_2C('i','d'), "", 0,0,0 }, +{ IDX_2C('i','e'), "", 0,0,0 }, +{ IDX_2C('i','l'), "", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "", 0,0,0 }, +{ IDX_2C('i','o'), " . . ", 0,0,0 }, +{ IDX_2C('i','q'), "", 0,0,0 }, +{ IDX_2C('i','r'), "", 0,0,0 }, +{ IDX_2C('i','s'), "", 0,0,0 }, +{ IDX_2C('i','t'), "", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "", 0,0,0 }, +{ IDX_2C('j','o'), "", 0,0,0 }, +{ IDX_2C('j','p'), "", 0,0,0 }, +{ IDX_2C('k','e'), "", 0,0,0 }, +{ IDX_2C('k','g'), "", 0,0,0 }, +{ IDX_2C('k','h'), "", 0,0,0 }, +{ IDX_2C('k','i'), "", 0,0,0 }, +{ IDX_2C('k','m'), " ", 0,0,0 }, +{ IDX_2C('k','n'), " ", 0,0,0 }, +{ IDX_2C('k','p'), " ", 0,0,0 }, +{ IDX_2C('k','r'), " ", 0,0,0 }, +{ IDX_2C('k','w'), "", 0,0,0 }, +{ IDX_2C('k','y'), " ", 0,0,0 }, +{ IDX_2C('k','z'), "", 0,0,0 }, +{ IDX_2C('l','a'), "", 0,0,0 }, +{ IDX_2C('l','b'), "", 0,0,0 }, +{ IDX_2C('l','c'), " ", 0,0,0 }, +{ IDX_2C('l','i'), "", 0,0,0 }, +{ IDX_2C('l','k'), " ", 0,0,0 }, +{ IDX_2C('l','r'), "", 0,0,0 }, +{ IDX_2C('l','s'), "", 0,0,0 }, +{ IDX_2C('l','t'), "", 0,0,0 }, +{ IDX_2C('l','u'), "", 0,0,0 }, +{ IDX_2C('l','v'), "", 0,0,0 }, +{ IDX_2C('l','y'), "", 0,0,0 }, +{ IDX_2C('m','a'), "", 0,0,0 }, +{ IDX_2C('m','c'), "", 0,0,0 }, +{ IDX_2C('m','d'), "", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "", 0,0,0 }, +{ IDX_2C('m','h'), " ", 0,0,0 }, +{ IDX_2C('m','k'), "", 0,0,0 }, +{ IDX_2C('m','l'), "", 0,0,0 }, +{ IDX_2C('m','m'), "", 0,0,0 }, +{ IDX_2C('m','n'), "", 0,0,0 }, +{ IDX_2C('m','o'), "", 0,0,0 }, +{ IDX_2C('m','p'), " ", 0,0,0 }, +{ IDX_2C('m','q'), "", 0,0,0 }, +{ IDX_2C('m','r'), "", 0,0,0 }, +{ IDX_2C('m','s'), "", 0,0,0 }, +{ IDX_2C('m','t'), "", 0,0,0 }, +{ IDX_2C('m','u'), "", 0,0,0 }, +{ IDX_2C('m','v'), " ", 0,0,0 }, +{ IDX_2C('m','w'), "", 0,0,0 }, +{ IDX_2C('m','x'), "", 0,0,0 }, +{ IDX_2C('m','y'), "", 0,0,0 }, +{ IDX_2C('m','z'), "", 0,0,0 }, +{ IDX_2C('n','a'), "", 0,0,0 }, +{ IDX_2C('n','c'), " ", 0,0,0 }, +{ IDX_2C('n','e'), "", 0,0,0 }, +{ IDX_2C('n','f'), " ", 0,0,0 }, +{ IDX_2C('n','g'), "", 0,0,0 }, +{ IDX_2C('n','i'), "", 0,0,0 }, +{ IDX_2C('n','l'), "", 0,0,0 }, +{ IDX_2C('n','o'), "", 0,0,0 }, +{ IDX_2C('n','p'), "", 0,0,0 }, +{ IDX_2C('n','r'), "", 0,0,0 }, +{ IDX_2C('n','u'), "", 0,0,0 }, +{ IDX_2C('n','z'), " ", 0,0,0 }, +{ IDX_2C('o','m'), "", 0,0,0 }, +{ IDX_2C('p','a'), "", 0,0,0 }, +{ IDX_2C('p','e'), "", 0,0,0 }, +{ IDX_2C('p','f'), " ", 0,0,0 }, +{ IDX_2C('p','g'), " ", 0,0,0 }, +{ IDX_2C('p','h'), "", 0,0,0 }, +{ IDX_2C('p','k'), "", 0,0,0 }, +{ IDX_2C('p','l'), "", 0,0,0 }, +{ IDX_2C('p','m'), " ", 0,0,0 }, +{ IDX_2C('p','n'), "", 0,0,0 }, +{ IDX_2C('p','r'), " ", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "", 0,0,0 }, +{ IDX_2C('p','w'), "", 0,0,0 }, +{ IDX_2C('p','y'), "", 0,0,0 }, +{ IDX_2C('q','a'), "", 0,0,0 }, +{ IDX_2C('r','e'), " ", 0,0,0 }, +{ IDX_2C('r','o'), "", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), " ", 0,0,0 }, +{ IDX_2C('r','w'), "", 0,0,0 }, +{ IDX_2C('s','a'), " ", 0,0,0 }, +{ IDX_2C('s','b'), " ", 0,0,0 }, +{ IDX_2C('s','c'), " ", 0,0,0 }, +{ IDX_2C('s','d'), "", 0,0,0 }, +{ IDX_2C('s','e'), "", 0,0,0 }, +{ IDX_2C('s','g'), "", 0,0,0 }, +{ IDX_2C('s','h'), " ", 0,0,0 }, +{ IDX_2C('s','i'), "", 0,0,0 }, +{ IDX_2C('s','j'), " -", 0,0,0 }, +{ IDX_2C('s','k'), " ", 0,0,0 }, +{ IDX_2C('s','l'), " ", 0,0,0 }, +{ IDX_2C('s','m'), " ", 0,0,0 }, +{ IDX_2C('s','n'), "", 0,0,0 }, +{ IDX_2C('s','o'), "", 0,0,0 }, +{ IDX_2C('s','r'), "", 0,0,0 }, +{ IDX_2C('s','t'), " ", 0,0,0 }, +{ IDX_2C('s','u'), " (SU)", 0,0,0 }, +{ IDX_2C('s','v'), "", 0,0,0 }, +{ IDX_2C('s','y'), "", 0,0,0 }, +{ IDX_2C('s','z'), "", 0,0,0 }, +{ IDX_2C('t','c'), " ", 0,0,0 }, +{ IDX_2C('t','d'), " ", 0,0,0 }, +{ IDX_2C('t','f'), " ", 0,0,0 }, +{ IDX_2C('t','g'), "", 0,0,0 }, +{ IDX_2C('t','h'), "", 0,0,0 }, +{ IDX_2C('t','j'), "", 0,0,0 }, +{ IDX_2C('t','k'), " ", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "", 0,0,0 }, +{ IDX_2C('t','n'), "", 0,0,0 }, +{ IDX_2C('t','o'), " ", 0,0,0 }, +{ IDX_2C('t','p'), " ", 0,0,0 }, +{ IDX_2C('t','r'), "", 0,0,0 }, +{ IDX_2C('t','t'), " ", 0,0,0 }, +{ IDX_2C('t','v'), "", 0,0,0 }, +{ IDX_2C('t','w'), "", 0,0,0 }, +{ IDX_2C('t','z'), "", 0,0,0 }, +{ IDX_2C('u','a'), "", 0,0,0 }, +{ IDX_2C('u','g'), "", 0,0,0 }, +{ IDX_2C('u','k'), "Σ ", 0,0,0 }, +{ IDX_2C('u','m'), " ()", 0,0,0 }, +{ IDX_2C('u','s'), "Σ ", 0,0,0 }, +{ IDX_2C('u','y'), "", 0,0,0 }, +{ IDX_2C('u','z'), "", 0,0,0 }, +{ IDX_2C('v','a'), "", 0,0,0 }, +{ IDX_2C('v','c'), "- . ", 0,0,0 }, +{ IDX_2C('v','e'), "", 0,0,0 }, +{ IDX_2C('v','g'), " ()", 0,0,0 }, +{ IDX_2C('v','i'), " ()", 0,0,0 }, +{ IDX_2C('v','n'), "", 0,0,0 }, +{ IDX_2C('v','u'), "", 0,0,0 }, +{ IDX_2C('w','f'), " ", 0,0,0 }, +{ IDX_2C('w','s'), "", 0,0,0 }, +{ IDX_2C('y','e'), "", 0,0,0 }, +{ IDX_2C('y','t'), " ", 0,0,0 }, +{ IDX_2C('y','u'), "", 0,0,0 }, +{ IDX_2C('z','a'), " ", 0,0,0 }, +{ IDX_2C('z','m'), "", 0,0,0 }, +{ IDX_2C('z','w'), "", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.serbian b/webalizer-2.23-08/lang/webalizer_lang.serbian new file mode 100644 index 0000000..823d630 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.serbian @@ -0,0 +1,629 @@ +/* + webalizer_lang.serbian + + Webalizer V2.0x Language Support file for Serbian. + 12-Jun-1999 Original translation by Goran Opacic and Sanja Markovic + 13-Oct-2000 updated for v2.0 by Boris Drajer + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Serbian"; +char *langcode = "sr"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Period sumiranja"; +char *msg_hhdr_gt = "Generisano"; + +/* main index strings */ +char *msg_main_us = "Pregled pristupa za"; +/* char *msg_main_per= "Poslednjih 12 meseci"; */ +char *msg_main_per= "Pregled po mesecima"; +char *msg_main_sum= "Pregled po mesecima"; +char *msg_main_da = "Dnevni prosek"; +char *msg_main_mt = "Mesecni zbirovi"; + +/* month HTML page strings */ +char *msg_hmth_du = "Pristupi po danu za"; +char *msg_hmth_hu = "Pristupi po satu za"; + +/* table header strings */ +char *msg_h_by = "po"; +char *msg_h_avg = "prosek"; +char *msg_h_max = "Max"; +char *msg_h_total = "Ukupno"; +char *msg_h_totals= "Ukupno za sve"; +char *msg_h_day = "Dan"; +char *msg_h_mth = "Mesec"; +char *msg_h_hour = "Sat"; +char *msg_h_hits = "Pristupa"; +char *msg_h_pages = "Strana"; +char *msg_h_visits= "Poseta"; +char *msg_h_files = "Fajlova"; +char *msg_h_sites = "Racunara"; +char *msg_h_xfer = "KB"; +char *msg_h_hname = "Racunar"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Korisnicki program"; +char *msg_h_ref = "Referer"; +char *msg_h_ctry = "Zemlja"; +char *msg_h_search= "Tekst pretrazivanja"; +char *msg_h_uname = "Korisnik"; + +/* links along top of page */ +char *msg_hlnk_ds = "Dnevna statistika"; +char *msg_hlnk_hs = "Statistika po satu"; +char *msg_hlnk_u = "URL-ovi"; +char *msg_hlnk_s = "Racunari"; +char *msg_hlnk_a = "Browseri"; +char *msg_hlnk_c = "Zemlje"; +char *msg_hlnk_r = "Referisanja"; +char *msg_hlnk_en = "Ulaz"; +char *msg_hlnk_ex = "Izlaz"; +char *msg_hlnk_sr = "Pretraga"; +char *msg_hlnk_i = "Korisnici"; + +/* monthly total table */ +char *msg_mtot_ms = "Mesecna statistika za"; +char *msg_mtot_th = "Ukupno pristupa"; +char *msg_mtot_tf = "Ukupno fajlova"; +char *msg_mtot_tx = "Ukupno KBajta"; +char *msg_mtot_us = "Ukupno razlicitih racunara"; +char *msg_mtot_ur = "Ukupno razlicitih referisanja"; +char *msg_mtot_ua = "Ukupno razlicitih browsera"; +char *msg_mtot_uu = "Ukupno razlicitih URL-ova"; +char *msg_mtot_ui = "Ukupno razlicitih korisnickih imena"; +char *msg_mtot_mhd= "Pristupa na dan"; +char *msg_mtot_mhh= "Pristupa na sat"; +char *msg_mtot_mfd= "Fajlova na dan"; +char *msg_mtot_mpd= "Fajlova na sat"; +char *msg_mtot_msd= "Racunara na dan"; +char *msg_mtot_mvd= "Poseta na dan"; +char *msg_mtot_mkd= "KBajta na dan"; +char *msg_mtot_rc = "Pristupa po kodu"; + +/* daily total table */ +char *msg_dtot_ds = "Dnevna statistika za"; + +/* hourly total table */ +char *msg_htot_hs = "Statistika po satu za"; + +/* country pie chart */ +char *msg_ctry_use= "Pristup po zemljama za"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Prvih"; +char *msg_top_of = "od"; +char *msg_top_s = "racunara"; +char *msg_top_u = "URL-ova"; +char *msg_top_r = "referisanja"; +char *msg_top_a = "korisnickih programa"; +char *msg_top_c = "zemalja"; +char *msg_top_en = "ulaznih strana"; +char *msg_top_ex = "izlaznih strana"; +char *msg_top_sr = "tekstova pretrazivanja"; +char *msg_top_i = "korisnickih imena"; +char *msg_v_sites = "Pregled svih racunara"; +char *msg_v_urls = "Pregled svih URL-ova"; +char *msg_v_refs = "Pregled svih referisanja"; +char *msg_v_agents= "Pregled svih korisnickih programa"; +char *msg_v_search= "Pregled svih tekstova pretrazivanja"; +char *msg_v_users = "Pregled svih korisnickih imena"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "Maj", "Jun", + "Jul", "Avg", "Sep", + "Okt", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Januar", "Februar", "Mart", "April", + "Maj", "Jun", "Jul", "Avgust", + "Septembar","Oktobar", "Novembar","Decembar"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "Statistika pristupa za"; +char *msg_h_other = "Ostalo"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nedefinisano/Nepoznato", 0,0,0 }, +{ IDX_3C('c','o','m'), "Komercijalni (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Obrazovni (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "SAD vlada (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Internacionalni (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "SAD vojni (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Mrezni domeni (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizacije (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Stari Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.simplified_chinese b/webalizer-2.23-08/lang/webalizer_lang.simplified_chinese new file mode 100644 index 0000000..1cca907 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.simplified_chinese @@ -0,0 +1,630 @@ +/* + webalizer_lang.simplified_chinese + + Webalizer V2.0x Language Support file for Simplified Chinese + (used in Mainland China). + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Simplified Chinese"; +char *langcode = "zh-Hans"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "¼"; +char *msg_addresses="ַ"; +char *msg_ignored = ""; +char *msg_bad = "Ч"; +char *msg_in = "ʱ"; +char *msg_seconds = ""; + +/* progress and setup error messages */ +char *msg_log_err = ": ܴ־ļ"; +char *msg_log_use = "ʹ־ļ"; +char *msg_dir_err = ": ܸıĿ¼"; +char *msg_dir_use = ""; +char *msg_cur_dir = "ǰĿ¼"; +char *msg_hostname= ""; +char *msg_ign_hist= "ǰʷϢ..."; +char *msg_no_hist = "ûҵʷϢļ..."; +char *msg_get_hist= "ڶȡʷϢļ..."; +char *msg_put_hist= "ڱʷϢļ..."; +char *msg_hist_err= ": дʷϢļ"; +char *msg_bad_hist= ": ԷǷʷϢ¼"; +char *msg_bad_conf= ": ܴļ"; +char *msg_bad_key = ": Ƿؼ"; +char *msg_bad_date= ": ¼(ڴ)"; +char *msg_ign_nscp= " Netscape ͷ¼"; +char *msg_bad_rec = "¼"; +char *msg_no_vrec = "ûҵϷ¼!"; +char *msg_gen_rpt = "ɱ ---- Ϊ "; +char *msg_gen_sum = "ۺϱ"; +char *msg_get_data= "ڶȡϴе..."; +char *msg_put_data= "ڱ浱ǰе..."; +char *msg_no_data = "ûҵϴе..."; +char *msg_bad_data= ": ܶȡϴ"; +char *msg_data_err= ": ܱ浱ǰ"; +char *msg_dup_data= ": ֿܵظ"; + +/* DNS Stuff */ +char *msg_dns_nocf= "ûָ DNS ļ, ˳..."; +char *msg_dns_nodb= ": ܴ DNS ļ"; +char *msg_dns_nolk= ": DNS ļ"; +char *msg_dns_usec= "ʹ DNS ļ"; +char *msg_dns_rslv= "DNS "; +char *msg_dns_none= "ûпԴļ¼"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "ܷ㹻ڴ, ȡ Top Sites !"; +char *msg_nomem_tr= "ܷ㹻ڴ, ȡ Top Referrers !"; +char *msg_nomem_tu= "ܷ㹻ڴ, ȡ Top URLs !"; +char *msg_nomem_tc= "ܷ㹻ڴ, ȡ Top Countries !"; +char *msg_nomem_ta= "ܷ㹻ڴ, ȡ Top User Agents !"; +char *msg_nomem_tsr="ܷ㹻ڴ, ȡ Top Search Strings !"; +char *msg_nomem_ti= "ܷ㹻ڴ, ȡ Top Usernames !"; +char *msg_nomem_dh= "ڵ(ÿ), "; +char *msg_nomem_mh= "ڵ(ÿ), "; +char *msg_nomem_u = " URL ڵ, "; +char *msg_nomem_a = " User Agent ڵ, "; +char *msg_nomem_r = " Referrer ڵ, "; +char *msg_nomem_sc= " Search String ڵ, "; +char *msg_nomem_i = " Username ڵ, "; + +/* log record errors */ +char *msg_big_rec = ": ̫־¼"; +char *msg_big_host= ": ض̫ hostname "; +char *msg_big_date= ": ض̫ date "; +char *msg_big_req = ": ض̫ request "; +char *msg_big_ref = ": ض̫ referrer "; +char *msg_big_user= ": ض̫ username "; +char *msg_big_one = ": ַ̫"; + +/* misc errors */ +char *msg_no_open = ": ܴļ"; + +/* Help display... */ +char *h_usage1 = "÷"; +char *h_usage2 = "[ѡ] [־ļ]"; +char *h_msg[]= { + "-h = ʾϢ" , + "-V = ʾ汾Ϣ" , + "-v = be verbose" , + "-d = ʾӵĵϢ" , + "-F type = ־. = (clf | ftp | squid | w3c)", + "-f = ϲ?(Fold sequence errors)" , + "-i = ʷϢļ" , + "-p = ״̬Ϣ(ʽ)" , + "-b = ignore state (incremental)" , + "-q = ʾһϢ" , + "-Q = ʾ**Ϣ" , + "-Y = ʾҷֲͼ" , + "-G = ʾСʱֲͼ" , + "-H = ʾСʱֲͳϢ" , + "-L = ʾɫͼ" , + "-l num = ͼʹ num " , + "-m num = 趨ʳʱֵ(λ: )" , + "-T = ʾʱϢ" , + "-c file = ָļΪ 'file'" , + "-n name = ָʹõΪ 'name'" , + "-o dir = ָĿ¼Ϊ 'dir'" , + "-t name = ָΪ 'name'" , + "-a name = Ϊ 'name' û" , + "-r name = Ϊ 'name' " , + "-s name = Ϊ 'name' վ" , + "-u name = Ϊ 'name' URL" , + "-x name = ָʹõļչΪ 'name'" , + "-O name = Omit page 'name'" , + "-P name = ָʹõҳչΪ 'name'" , + "-I name = ָΪ 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = ʾ num top agents" , + "-C num = ʾ num top countries" , + "-R num = ʾ num top referrers" , + "-S num = ʾ num top sites" , + "-U num = ʾ num top URLs" , + "-e num = ʾ num top Entry Pages" , + "-E num = ʾ num top Exit Pages" , + "-g num = num " , + "-X = صվ" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = ʹ DNS ļ 'name'" , + "-N num = ָ DNS Ľ(0 = DNS )" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "ժҪʱ"; +char *msg_hhdr_gt = ""; + +/* main index strings */ +char *msg_main_us = "ʹժҪ"; +/* char *msg_main_per= " 12 "; */ +char *msg_main_per= "ժҪ"; +char *msg_main_sum= "ժҪ"; +char *msg_main_da = "ÿƽ"; +char *msg_main_mt = "ÿܼ"; + +/* month HTML page strings */ +char *msg_hmth_du = "ÿʹ"; +char *msg_hmth_hu = "ÿСʱʹ"; + +/* table header strings */ +char *msg_h_by = ""; +char *msg_h_avg = "ƽ"; +char *msg_h_max = ""; +char *msg_h_total = "ܼ"; +char *msg_h_totals= "ܼ"; +char *msg_h_day = ""; +char *msg_h_mth = ""; +char *msg_h_hour = "Сʱ"; +char *msg_h_hits = ""; +char *msg_h_pages = "ҳ"; +char *msg_h_visits= ""; +char *msg_h_files = "ļ"; +char *msg_h_sites = "վ"; +char *msg_h_xfer = "ǧֽ"; +char *msg_h_hname = ""; +char *msg_h_url = "URL"; +char *msg_h_agent = "û"; +char *msg_h_ref = ""; +char *msg_h_ctry = ""; +char *msg_h_search= "ַ"; +char *msg_h_uname = "û"; + +/* links along top of page */ +char *msg_hlnk_ds = "ÿͳ"; +char *msg_hlnk_hs = "ÿСʱͳ"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "վ"; +char *msg_hlnk_a = ""; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = ""; +char *msg_hlnk_en = ""; +char *msg_hlnk_ex = ""; +char *msg_hlnk_sr = ""; +char *msg_hlnk_i = "û"; + +/* monthly total table */ +char *msg_mtot_ms = "ͳϢ"; +char *msg_mtot_th = "ܵ"; +char *msg_mtot_tf = "ļ"; +char *msg_mtot_tx = "ǧֽ"; +char *msg_mtot_us = "վظվ㣩"; +char *msg_mtot_ur = "ظߣ"; +char *msg_mtot_ua = "ûظû"; +char *msg_mtot_uu = " URL ظ URL "; +char *msg_mtot_ui = "ûظû"; +char *msg_mtot_mhd= "ÿ"; +char *msg_mtot_mhh= "ÿСʱ"; +char *msg_mtot_mfd= "ÿļ"; +char *msg_mtot_mpd= "ÿҳ"; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "ÿ"; +char *msg_mtot_mkd= "ÿλǧֽڣ"; +char *msg_mtot_rc = "Ӧĵ"; + +/* daily total table */ +char *msg_dtot_ds = "ÿͳ"; + +/* hourly total table */ +char *msg_htot_hs = "ÿСʱͳ"; + +/* country pie chart */ +char *msg_ctry_use= "ʹ"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "ǰ"; +char *msg_top_of = "----"; +char *msg_top_s = "վ"; +char *msg_top_u = " URL "; +char *msg_top_r = ""; +char *msg_top_a = "û"; +char *msg_top_c = "ܹ"; +char *msg_top_en = "ܽҳ"; +char *msg_top_ex = "Ƴҳ"; +char *msg_top_sr = "ַ"; +char *msg_top_i = "û"; +char *msg_v_sites = "쿴վ"; +char *msg_v_urls = "쿴 URL"; +char *msg_v_refs = "쿴"; +char *msg_v_agents= "쿴û"; +char *msg_v_search= "쿴ַ"; +char *msg_v_users = "쿴û"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "һ", "", "", + "", "", "", + "", "", "", + "ʮ", "ʮһ", "ʮ"}; + +/* long month names - can be any length */ +char *l_month[12]={ "һ", "", "", + "", "", "", + "", "", "", + "ʮ", "ʮһ", "ʮ"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "δӦ", 0 }, + { "Ӧ 100 - ", 0 }, + { "Ӧ 101 - ıЭ", 0 }, + { "Ӧ 200 - ɹ", 0 }, + { "Ӧ 201 - ѱ", 0 }, + { "Ӧ 202 - ѱ", 0 }, + { "Ӧ 203 - ȨϢ", 0 }, + { "Ӧ 204 - ", 0 }, + { "Ӧ 205 - ", 0 }, + { "Ӧ 206 - ", 0 }, + { "Ӧ 300 - ѡ", 0 }, + { "Ӧ 301 - ѱת", 0 }, + { "Ӧ 302 - ѱҵ", 0 }, + { "Ӧ 303 - ", 0 }, + { "Ӧ 304 - ûб޸Ĺ", 0 }, + { "Ӧ 305 - ʹô", 0 }, + { "Ӧ 307 - ѱʱת", 0 }, + { "Ӧ 400 - Ч", 0 }, + { "Ӧ 401 - δ֤", 0 }, + { "Ӧ 402 - Ҫ", 0 }, + { "Ӧ 403 - ֹ", 0 }, + { "Ӧ 404 - ûҵ", 0 }, + { "Ӧ 405 - ķ", 0 }, + { "Ӧ 406 - ɽ", 0 }, + { "Ӧ 407 - Ҫ֤", 0 }, + { "Ӧ 408 - ʱ", 0 }, + { "Ӧ 409 - ͻ", 0 }, + { "Ӧ 410 - ѹ", 0 }, + { "Ӧ 411 - ҪϢ", 0 }, + { "Ӧ 412 - ǰ᲻", 0 }, + { "Ӧ 413 - ʵ̫", 0 }, + { "Ӧ 414 - URI ̫", 0 }, + { "Ӧ 415 - ֵ֧ļ", 0 }, + { "Ӧ 416 - ķΧЧ", 0 }, + { "Ӧ 417 - ", 0 }, + { "Ӧ 500 - ڲ", 0 }, + { "Ӧ 501 - ûʵ", 0 }, + { "Ӧ 502 - ", 0 }, + { "Ӧ 503 - 񲻿", 0 }, + { "Ӧ 504 - سʱ", 0 }, + { "Ӧ 505 - ֵ֧ HTTP 汾", 0 } }; + +char *msg_title = "ʹͳ"; +char *msg_h_other = ""; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "δ/δ֪", 0,0,0 }, +{ IDX_3C('c','o','m'), ".com", 0,0,0 }, +{ IDX_3C('e','d','u'), ".edu", 0,0,0 }, +{ IDX_3C('g','o','v'), ".gov", 0,0,0 }, +{ IDX_3C('i','n','t'), ".int", 0,0,0 }, +{ IDX_3C('m','i','l'), ".mil", 0,0,0 }, +{ IDX_3C('n','e','t'), ".net", 0,0,0 }, +{ IDX_3C('o','r','g'), ".org", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),".arpa", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Լ֯", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "", 0,0,0 }, +{ IDX_2C('a','e'), "", 0,0,0 }, +{ IDX_2C('a','f'), "", 0,0,0 }, +{ IDX_2C('a','g'), "ϺͰͲ", 0,0,0 }, +{ IDX_2C('a','i'), "", 0,0,0 }, +{ IDX_2C('a','l'), "", 0,0,0 }, +{ IDX_2C('a','m'), "", 0,0,0 }, +{ IDX_2C('a','n'), "˹", 0,0,0 }, +{ IDX_2C('a','o'), "", 0,0,0 }, +{ IDX_2C('a','q'), "ϼ ", 0,0,0 }, +{ IDX_2C('a','r'), "͢", 0,0,0 }, +{ IDX_2C('a','s'), "Ħ", 0,0,0 }, +{ IDX_2C('a','t'), "µ", 0,0,0 }, +{ IDX_2C('a','u'), "Ĵ", 0,0,0 }, +{ IDX_2C('a','w'), "³", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "ݽ", 0,0,0 }, +{ IDX_2C('b','a'), "", 0,0,0 }, +{ IDX_2C('b','b'), "ͰͶ˹", 0,0,0 }, +{ IDX_2C('b','d'), "ϼ", 0,0,0 }, +{ IDX_2C('b','e'), "ʱ", 0,0,0 }, +{ IDX_2C('b','f'), "ɷ", 0,0,0 }, +{ IDX_2C('b','g'), "", 0,0,0 }, +{ IDX_2C('b','h'), "", 0,0,0 }, +{ IDX_2C('b','i'), "¡", 0,0,0 }, +{ IDX_2C('b','j'), "", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Ľ", 0,0,0 }, +{ IDX_2C('b','n'), "", 0,0,0 }, +{ IDX_2C('b','o'), "ά", 0,0,0 }, +{ IDX_2C('b','r'), "", 0,0,0 }, +{ IDX_2C('b','s'), "͹", 0,0,0 }, +{ IDX_2C('b','t'), "", 0,0,0 }, +{ IDX_2C('b','v'), "ά", 0,0,0 }, +{ IDX_2C('b','w'), "", 0,0,0 }, +{ IDX_2C('b','y'), "׶˹", 0,0,0 }, +{ IDX_2C('b','z'), "", 0,0,0 }, +{ IDX_2C('c','a'), "ô", 0,0,0 }, +{ IDX_2C('c','c'), "ɿɵ", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "з", 0,0,0 }, +{ IDX_2C('c','g'), "չ", 0,0,0 }, +{ IDX_2C('c','h'), "ʿ", 0,0,0 }, +{ IDX_2C('c','i'), "", 0,0,0 }, +{ IDX_2C('c','k'), "Ⱥ", 0,0,0 }, +{ IDX_2C('c','l'), "", 0,0,0 }, +{ IDX_2C('c','m'), "¡", 0,0,0 }, +{ IDX_2C('c','n'), "й", 0,0,0 }, +{ IDX_2C('c','o'), "ױ", 0,0,0 }, +{ IDX_2C('c','r'), "˹", 0,0,0 }, +{ IDX_2C('c','u'), "Ű", 0,0,0 }, +{ IDX_2C('c','v'), "ý", 0,0,0 }, +{ IDX_2C('c','x'), "ʥ", 0,0,0 }, +{ IDX_2C('c','y'), "·˹", 0,0,0 }, +{ IDX_2C('c','z'), "ݿ˹͹", 0,0,0 }, +{ IDX_2C('d','e'), "¹", 0,0,0 }, +{ IDX_2C('d','j'), "", 0,0,0 }, +{ IDX_2C('d','k'), "", 0,0,0 }, +{ IDX_2C('d','m'), "", 0,0,0 }, +{ IDX_2C('d','o'), "ӹ͹", 0,0,0 }, +{ IDX_2C('d','z'), "", 0,0,0 }, +{ IDX_2C('e','c'), "϶", 0,0,0 }, +{ IDX_2C('e','e'), "ɳ", 0,0,0 }, +{ IDX_2C('e','g'), "", 0,0,0 }, +{ IDX_2C('e','h'), "", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "", 0,0,0 }, +{ IDX_2C('e','t'), "", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "", 0,0,0 }, +{ IDX_2C('f','j'), "쳼", 0,0,0 }, +{ IDX_2C('f','k'), "Ⱥ(ά˹Ⱥ)", 0,0,0 }, +{ IDX_2C('f','m'), "ܿ", 0,0,0 }, +{ IDX_2C('f','o'), "Ⱥ", 0,0,0 }, +{ IDX_2C('f','r'), "", 0,0,0 }, +{ IDX_2C('g','a'), "", 0,0,0 }, +{ IDX_2C('g','b'), "Ӣ", 0,0,0 }, +{ IDX_2C('g','d'), "ɴ", 0,0,0 }, +{ IDX_2C('g','e'), "³", 0,0,0 }, +{ IDX_2C('g','f'), "", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "", 0,0,0 }, +{ IDX_2C('g','i'), "ֱ", 0,0,0 }, +{ IDX_2C('g','l'), "", 0,0,0 }, +{ IDX_2C('g','m'), "Ա", 0,0,0 }, +{ IDX_2C('g','n'), "", 0,0,0 }, +{ IDX_2C('g','p'), "ϵ", 0,0,0 }, +{ IDX_2C('g','q'), "", 0,0,0 }, +{ IDX_2C('g','r'), "ϣ", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Σ", 0,0,0 }, +{ IDX_2C('g','u'), "ص", 0,0,0 }, +{ IDX_2C('g','w'), "DZ", 0,0,0 }, +{ IDX_2C('g','y'), "", 0,0,0 }, +{ IDX_2C('h','k'), "й", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "鶼˹", 0,0,0 }, +{ IDX_2C('h','r'), "޵", 0,0,0 }, +{ IDX_2C('h','t'), "", 0,0,0 }, +{ IDX_2C('h','u'), "", 0,0,0 }, +{ IDX_2C('i','d'), "ӡ", 0,0,0 }, +{ IDX_2C('i','e'), "", 0,0,0 }, +{ IDX_2C('i','l'), "ɫ", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "ӡ", 0,0,0 }, +{ IDX_2C('i','o'), "Ӣӡ", 0,0,0 }, +{ IDX_2C('i','q'), "", 0,0,0 }, +{ IDX_2C('i','r'), "", 0,0,0 }, +{ IDX_2C('i','s'), "", 0,0,0 }, +{ IDX_2C('i','t'), "", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "", 0,0,0 }, +{ IDX_2C('j','o'), "Լ", 0,0,0 }, +{ IDX_2C('j','p'), "ձ", 0,0,0 }, +{ IDX_2C('k','e'), "", 0,0,0 }, +{ IDX_2C('k','g'), "˹˹̹", 0,0,0 }, +{ IDX_2C('k','h'), "կ", 0,0,0 }, +{ IDX_2C('k','i'), "˹", 0,0,0 }, +{ IDX_2C('k','m'), "Ħ", 0,0,0 }, +{ IDX_2C('k','n'), "ʥĺά˹", 0,0,0 }, +{ IDX_2C('k','p'), "", 0,0,0 }, +{ IDX_2C('k','r'), "", 0,0,0 }, +{ IDX_2C('k','w'), "", 0,0,0 }, +{ IDX_2C('k','y'), "Ⱥ", 0,0,0 }, +{ IDX_2C('k','z'), "˹̹", 0,0,0 }, +{ IDX_2C('l','a'), "", 0,0,0 }, +{ IDX_2C('l','b'), "", 0,0,0 }, +{ IDX_2C('l','c'), "ʥ¬", 0,0,0 }, +{ IDX_2C('l','i'), "֧ʿ", 0,0,0 }, +{ IDX_2C('l','k'), "˹", 0,0,0 }, +{ IDX_2C('l','r'), "", 0,0,0 }, +{ IDX_2C('l','s'), "", 0,0,0 }, +{ IDX_2C('l','t'), "", 0,0,0 }, +{ IDX_2C('l','u'), "¬ɭ", 0,0,0 }, +{ IDX_2C('l','v'), "ά", 0,0,0 }, +{ IDX_2C('l','y'), "", 0,0,0 }, +{ IDX_2C('m','a'), "Ħ", 0,0,0 }, +{ IDX_2C('m','c'), "Ħɸ", 0,0,0 }, +{ IDX_2C('m','d'), "Ħ", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "˹", 0,0,0 }, +{ IDX_2C('m','h'), "ܶȺ", 0,0,0 }, +{ IDX_2C('m','k'), "", 0,0,0 }, +{ IDX_2C('m','l'), "", 0,0,0 }, +{ IDX_2C('m','m'), "", 0,0,0 }, +{ IDX_2C('m','n'), "ɹ", 0,0,0 }, +{ IDX_2C('m','o'), "й", 0,0,0 }, +{ IDX_2C('m','p'), "Ⱥ", 0,0,0 }, +{ IDX_2C('m','q'), "ˣ", 0,0,0 }, +{ IDX_2C('m','r'), "ë", 0,0,0 }, +{ IDX_2C('m','s'), "أӢ", 0,0,0 }, +{ IDX_2C('m','t'), "", 0,0,0 }, +{ IDX_2C('m','u'), "ë˹", 0,0,0 }, +{ IDX_2C('m','v'), "", 0,0,0 }, +{ IDX_2C('m','w'), "ά", 0,0,0 }, +{ IDX_2C('m','x'), "ī", 0,0,0 }, +{ IDX_2C('m','y'), "", 0,0,0 }, +{ IDX_2C('m','z'), "Īɣȿ", 0,0,0 }, +{ IDX_2C('n','a'), "ױ", 0,0,0 }, +{ IDX_2C('n','c'), "¿", 0,0,0 }, +{ IDX_2C('n','e'), "ն", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "", 0,0,0 }, +{ IDX_2C('n','i'), "", 0,0,0 }, +{ IDX_2C('n','l'), "", 0,0,0 }, +{ IDX_2C('n','o'), "Ų", 0,0,0 }, +{ IDX_2C('n','p'), "Ჴ", 0,0,0 }, +{ IDX_2C('n','r'), "³", 0,0,0 }, +{ IDX_2C('n','u'), "Ŧ", 0,0,0 }, +{ IDX_2C('n','z'), "", 0,0,0 }, +{ IDX_2C('o','m'), "", 0,0,0 }, +{ IDX_2C('p','a'), "", 0,0,0 }, +{ IDX_2C('p','e'), "³", 0,0,0 }, +{ IDX_2C('p','f'), "", 0,0,0 }, +{ IDX_2C('p','g'), "Ͳ¼", 0,0,0 }, +{ IDX_2C('p','h'), "ɱ", 0,0,0 }, +{ IDX_2C('p','k'), "ͻ˹̹", 0,0,0 }, +{ IDX_2C('p','l'), "", 0,0,0 }, +{ IDX_2C('p','m'), "ʥƤܿ¡", 0,0,0 }, +{ IDX_2C('p','n'), "ƤؿȺ", 0,0,0 }, +{ IDX_2C('p','r'), "", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "", 0,0,0 }, +{ IDX_2C('p','w'), "", 0,0,0 }, +{ IDX_2C('p','y'), "", 0,0,0 }, +{ IDX_2C('q','a'), "", 0,0,0 }, +{ IDX_2C('r','e'), "", 0,0,0 }, +{ IDX_2C('r','o'), "", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "˹", 0,0,0 }, +{ IDX_2C('r','w'), "¬", 0,0,0 }, +{ IDX_2C('s','a'), "ɳذ", 0,0,0 }, +{ IDX_2C('s','b'), "Ⱥ", 0,0,0 }, +{ IDX_2C('s','c'), "", 0,0,0 }, +{ IDX_2C('s','d'), "յ", 0,0,0 }, +{ IDX_2C('s','e'), "", 0,0,0 }, +{ IDX_2C('s','g'), "¼", 0,0,0 }, +{ IDX_2C('s','h'), "ʥ", 0,0,0 }, +{ IDX_2C('s','i'), "˹", 0,0,0 }, +{ IDX_2C('s','j'), "˹߶ȺŲ", 0,0,0 }, +{ IDX_2C('s','k'), "˹工", 0,0,0 }, +{ IDX_2C('s','l'), "", 0,0,0 }, +{ IDX_2C('s','m'), "ʥŵ", 0,0,0 }, +{ IDX_2C('s','n'), "ڼӶ", 0,0,0 }, +{ IDX_2C('s','o'), "", 0,0,0 }, +{ IDX_2C('s','r'), "", 0,0,0 }, +{ IDX_2C('s','t'), "ʥ", 0,0,0 }, +{ IDX_2C('s','u'), "ǰ", 0,0,0 }, +{ IDX_2C('s','v'), "߶", 0,0,0 }, +{ IDX_2C('s','y'), "", 0,0,0 }, +{ IDX_2C('s','z'), "˹ʿ", 0,0,0 }, +{ IDX_2C('t','c'), "ؿ˹Ϳ˹ȺӢ", 0,0,0 }, +{ IDX_2C('t','d'), "է", 0,0,0 }, +{ IDX_2C('t','f'), "Ϸ", 0,0,0 }, +{ IDX_2C('t','g'), "", 0,0,0 }, +{ IDX_2C('t','h'), "̩", 0,0,0 }, +{ IDX_2C('t','j'), "˹̹", 0,0,0 }, +{ IDX_2C('t','k'), "п", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "˹̹", 0,0,0 }, +{ IDX_2C('t','n'), "ͻ˹", 0,0,0 }, +{ IDX_2C('t','o'), "", 0,0,0 }, +{ IDX_2C('t','p'), "", 0,0,0 }, +{ IDX_2C('t','r'), "", 0,0,0 }, +{ IDX_2C('t','t'), "Ͷ͸", 0,0,0 }, +{ IDX_2C('t','v'), "ͼ¬", 0,0,0 }, +{ IDX_2C('t','w'), "й̨", 0,0,0 }, +{ IDX_2C('t','z'), "̹ɣ", 0,0,0 }, +{ IDX_2C('u','a'), "ڿ", 0,0,0 }, +{ IDX_2C('u','g'), "ڸɴ", 0,0,0 }, +{ IDX_2C('u','k'), "Ӣ", 0,0,0 }, +{ IDX_2C('u','m'), "ԶС", 0,0,0 }, +{ IDX_2C('u','s'), "", 0,0,0 }, +{ IDX_2C('u','y'), "", 0,0,0 }, +{ IDX_2C('u','z'), "ȱ˹̹", 0,0,0 }, +{ IDX_2C('v','a'), "ٸ", 0,0,0 }, +{ IDX_2C('v','c'), "ʥɭغ͸ɶ˹", 0,0,0 }, +{ IDX_2C('v','e'), "ί", 0,0,0 }, +{ IDX_2C('v','g'), "еߵ(Ӣ)", 0,0,0 }, +{ IDX_2C('v','i'), "еߵ()", 0,0,0 }, +{ IDX_2C('v','n'), "Խ", 0,0,0 }, +{ IDX_2C('v','u'), "Ŭͼ", 0,0,0 }, +{ IDX_2C('w','f'), "˹͸ͼɣ", 0,0,0 }, +{ IDX_2C('w','s'), "Ħ", 0,0,0 }, +{ IDX_2C('y','e'), "Ҳ", 0,0,0 }, +{ IDX_2C('y','t'), "Լص", 0,0,0 }, +{ IDX_2C('y','u'), "˹", 0,0,0 }, +{ IDX_2C('z','a'), "Ϸ", 0,0,0 }, +{ IDX_2C('z','m'), "ޱ", 0,0,0 }, +{ IDX_2C('z','w'), "ͲΤ", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; + diff --git a/webalizer-2.23-08/lang/webalizer_lang.slovak b/webalizer-2.23-08/lang/webalizer_lang.slovak new file mode 100644 index 0000000..8b973d2 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.slovak @@ -0,0 +1,638 @@ +/* + webalizer_lang.slovak + + Webalizer V2.0x Language Support file for Slovak. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 24-Aug-1998 Translation by Michal Michalac (michal.michalac@ehs.sk) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 25-Jan-2000 Updated translation by Michal Michalac (michal.michalac@ehs.sk) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 31-Jul-2000 Corrections/additions by Lubos Klokner (erkac@vault-tec.sk) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Slovak"; +char *langcode = "sk"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "zaznamov"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignorovanych"; +char *msg_bad = "chybnych"; +char *msg_in = "pocas"; +char *msg_seconds = "sekund"; + +/* progress and setup error messages */ +char *msg_log_err = "Chyba: Nemozem otvorit log subor"; +char *msg_log_use = "Pouzivam log subor"; +char *msg_dir_err = "Chyba: Nemozem prejst do adresara"; +char *msg_dir_use = "Vytvaram vystup v"; +char *msg_cur_dir = "aktualnom adresari"; +char *msg_hostname= "Meno pocitaca pre zostavy je"; +char *msg_ign_hist= "Ignorujem predchadzajucu historiu..."; +char *msg_no_hist = "Nemozem najst subor historie..."; +char *msg_get_hist= "Citam subor historie..."; +char *msg_put_hist= "Ukladam subor historie..."; +char *msg_hist_err= "Chyba: Nemozem zapisat subor historie"; +char *msg_bad_hist= "Chyba: Ignorujem chybny zaznam v historii"; +char *msg_bad_conf= "Chyba: Nemozem otvorit konfiguracny subor"; +char *msg_bad_key = "Pozor: Neplatne klucove slovo"; +char *msg_bad_date= "Chyba: Preskakujem zaznam (zly datum)"; +char *msg_ign_nscp= "Preskakujem Netscapovsky hlavickovy zaznam"; +char *msg_bad_rec = "Preskakujem zly zaznam"; +char *msg_no_vrec = "Neboli najdene platne zaznamy!"; +char *msg_gen_rpt = "Vytvaram zostavu pre"; +char *msg_gen_sum = "Vytvaram sumarnu zostavu"; +char *msg_get_data= "Citam udaje z minuleho spracovania..."; +char *msg_put_data= "Ukladam udaje aktualneho spracovania..."; +char *msg_no_data = "Nemozem najst udaje z minuleho spracovania..."; +char *msg_bad_data= "Chyba: Nemozem obnovit udaje aktualneho spracovania"; +char *msg_data_err= "Chyba: Nemozem ulozit udaje aktualneho spracovania"; +char *msg_dup_data= "Pozor: Najdene pravdepodobne duplicitne udaje"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Nemozem alokovat dostatok pamate, Naj Miesta su nefunkcne!"; +char *msg_nomem_tr= "Nemozem alokovat dostatok pamate, Naj Odkazovace su nefunkcne!"; +char *msg_nomem_tu= "Nemozem alokovat dostatok pamate, Naj URL-ka su nefunkcne!"; +char *msg_nomem_tc= "Nemozem alokovat dostatok pamate, Naj Krajiny su nefunkcne!"; +char *msg_nomem_ta= "Nemozem alokovat dostatok pamate, Naj Browsre su nefunkcne!"; +char *msg_nomem_tsr="Nemozem alokovat dostatok pamate, Naj Hladane texty su nefunkcne!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Chyba doplnenia bloku pocitaca (denne), preskakujem"; +char *msg_nomem_mh= "Chyba doplnenia bloku pocitaca (mesacne), preskakujem"; +char *msg_nomem_u = "Chyba doplnenia URL bloku, preskakujem"; +char *msg_nomem_a = "Chyba doplnenia bloku Browsra, preskakujem"; +char *msg_nomem_r = "Chyba doplnenia bloku Odkazovaca, preskakujem"; +char *msg_nomem_sc= "Chyba doplnenia bloku Hladanych textov, preskakujem"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Chyba: Preskakujem prilis dlhy log zaznam"; +char *msg_big_host= "Pozor: Orezavam prilis dlhe meno pocitaca"; +char *msg_big_date= "Pozor: Orezavam prilis dlhe pole datumu"; +char *msg_big_req = "Pozor: Orezavam prilis dlhe pole ziadosti"; +char *msg_big_ref = "Pozor: Orezavam prilis dlhe pole odkazovaca"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Pozor: Retazec prekrocil velkost ukladacieho miesta"; + +/* misc errors */ +char *msg_no_open = "Chyba: Nemozem otvorit subor"; + +/* Help display... */ +char *h_usage1 = "Pouzitie"; +char *h_usage2 = "[volby] [log subor]"; +char *h_msg[]= { + "-h = vypis tento help" , + "-V = vypis informacie o verzii" , + "-v = be verbose" , + "-d = vypis dalsie ladiace informacie" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = oprav chyby postupnosti" , + "-i = ignoruj subor historie" , + "-p = zapamataj stav (inkrementalne)" , + "-b = ignoruj stav (inkrementalne)" , + "-q = potlac informativne spravy" , + "-Q = potlac VSETKY spravy" , + "-Y = potlac graf krajin" , + "-G = potlac hodinovy graf" , + "-H = potlac hodinove statistiky" , + "-L = potlac farebne kodovanu legendu grafu", + "-l poc = kresli poc ciar v pozadi grafu" , + "-m form = timeout 1 navstevy (seconds)" , + "-T = vypis casove informacie" , + "-c file = pouzi konfig. subor 'file'" , + "-n name = pouzi meno pocitaca" , + "-o adr = vystupny adresar" , + "-t name = nazov zostavy 'name'" , + "-a name = skry browser 'name'" , + "-r name = skry odkazovac 'name'" , + "-s name = skry miesto 'name'" , + "-u name = skry URL 'name'" , + "-x name = skry priponu suboru 'name'" , + "-O name = Omit page 'name'" , + "-P name = pripona typu stranky 'name'" , + "-I name = prezyvka Index(u) 'name'" , + "-K poc = poc months in summary table" , + "-k poc = poc months in summary graph" , + "-A poc = Zobraz poc naj browserov" , + "-C poc = Zobraz poc naj krajin" , + "-R poc = Zobraz poc naj odkazovacov" , + "-S poc = Zobraz poc naj miest" , + "-U poc = Zobraz poc naj URL-iek" , + "-e poc = Zobraz poc naj vstupnych stran" , + "-E poc = Zobraz poc naj vystupnych stran" , + "-g poc = Group Domains to 'poc' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +#define LAST_HLP_MSG (int)(sizeof(h_msg)/sizeof(char *)) + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Obdobie tatistiky"; +char *msg_hhdr_gt = "Generovan"; + +/* main index strings */ +char *msg_main_us = "tatistiky vyuitia pre"; +/* char *msg_main_per= "Poslednch 12 mesiacov"; */ +char *msg_main_per= "Mesan sumr"; +char *msg_main_sum= "Mesan sumr"; +char *msg_main_da = "Denn priemer"; +char *msg_main_mt = "Mesan sty"; + +/* month HTML page strings */ +char *msg_hmth_du = "Denn vyuitie za"; +char *msg_hmth_hu = "Hodinov vyuitie za"; + +/* table header strings */ +char *msg_h_by = "poda"; +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 = "zsahov"; +char *msg_h_pages = "strn"; +char *msg_h_visits= "nvtev"; +char *msg_h_files = "sborov"; +char *msg_h_sites = "miest"; +char *msg_h_xfer = "kBytov"; +char *msg_h_hname = "pota"; +char *msg_h_url = "URL"; +char *msg_h_agent = "prehliada"; +char *msg_h_ref = "odkazova"; +char *msg_h_ctry = "krajina"; +char *msg_h_search= "hadan text"; +char *msg_h_uname = "uivate"; + +/* 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 = "Prehliadae"; +char *msg_hlnk_c = "Krajiny"; +char *msg_hlnk_r = "Odkazovae"; +char *msg_hlnk_en = "Vstupy"; +char *msg_hlnk_ex = "Vstupy"; +char *msg_hlnk_sr = "Hadan"; +char *msg_hlnk_i = "Uivatelia"; + +/* monthly total table */ +char *msg_mtot_ms = "Mesan tatistiky za"; +char *msg_mtot_th = "Celkom zsahov"; +char *msg_mtot_tf = "Celkom sborov"; +char *msg_mtot_tx = "Celkom kBytov"; +char *msg_mtot_us = "Celkom jedinench miest"; +char *msg_mtot_ur = "Celkom jedinench odkazovaov"; +char *msg_mtot_ua = "Celkom jedinench Browsrov"; +char *msg_mtot_uu = "Celkom jedinench URL-iek"; +char *msg_mtot_ui = "Celkom jedinench uzivatelov"; +char *msg_mtot_mhd= "Zsahov za de"; +char *msg_mtot_mhh= "Zsahov za hodinu"; +char *msg_mtot_mfd= "Sborov za de"; +char *msg_mtot_mpd= "Strnok za de"; +char *msg_mtot_msd= "Miest za de"; +char *msg_mtot_mvd= "Nvtev za de"; +char *msg_mtot_mkd= "kBytov za de"; +char *msg_mtot_rc = "Zsahy poda kdu 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= "Vyuitie poda 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 = "odkazovaov celkom"; +char *msg_top_a = "prehliadaov celkom"; +char *msg_top_c = "krajn celkom"; +char *msg_top_en = "vstupnch strn celkom"; +char *msg_top_ex = "vstupnch strn celkom"; +char *msg_top_sr = "hadanch textov celkom"; +char *msg_top_i = "Celkovo uivatelov"; +char *msg_v_sites = "Zobraz vetky miesta"; +char *msg_v_urls = "Zobraz vetky Url-ka"; +char *msg_v_refs = "Zobraz vetkych odkazovatelov"; +char *msg_v_agents= "Zobraz vetkch klientov"; +char *msg_v_search= "Zobraz vetky reazce vyhladavania"; +char *msg_v_users = "Zobraz vetkch uivatelov"; + +/* 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]={ "Janur", "Februr", "Marec", "Aprl", + "Mj", "Jn", "Jl", "August", + "September","Oktber", "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 vyuitia pre"; +char *msg_h_other = "In"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nezistena/neznama", 0,0,0 }, +{ IDX_3C('c','o','m'), "Komercna (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Aakademicka (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US vladna (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Medzinarodna (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US vojenska (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Siet (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Neziskova organizacia (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Zastaralo Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andora", 0,0,0 }, +{ IDX_2C('a','e'), "Spojene Arabske Emiraty", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albansko", 0,0,0 }, +{ IDX_2C('a','m'), "Armensko", 0,0,0 }, +{ IDX_2C('a','n'), "Holandske Antily", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarktida", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "Americka Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Rakusko", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbajdzan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosna a Hercegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Banglades", 0,0,0 }, +{ IDX_2C('b','e'), "Belgicko", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulharsko", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrajn", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazilia", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamy", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Bielorusko", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Kanada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Stredo-africka republika", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Svajciarsko", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cookove ostrovy", 0,0,0 }, +{ IDX_2C('c','l'), "Cile", 0,0,0 }, +{ IDX_2C('c','m'), "Camerun", 0,0,0 }, +{ IDX_2C('c','n'), "Cina", 0,0,0 }, +{ IDX_2C('c','o'), "Kolumbia", 0,0,0 }, +{ IDX_2C('c','r'), "Kostarika", 0,0,0 }, +{ IDX_2C('c','u'), "Kuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Vianocne ostrovy", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Ceska republika", 0,0,0 }, +{ IDX_2C('d','e'), "Nemecko", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Dansko", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominikanska republika", 0,0,0 }, +{ IDX_2C('d','z'), "Alzirsko", 0,0,0 }, +{ IDX_2C('e','c'), "Ekvador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonsko", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Zapadna Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spanielsko", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finsko", 0,0,0 }, +{ IDX_2C('f','j'), "Fidzi", 0,0,0 }, +{ IDX_2C('f','k'), "Falklandske ostrovy (Malviny)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronezia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "Francuzsko", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Velka Britania (GB)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Gruzinsko", 0,0,0 }, +{ IDX_2C('g','f'), "Francuzska Guajana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Gronsko", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Grecko", 0,0,0 }, +{ IDX_2C('g','s'), "Sv. Georgia a Sv. Sandwich ostr.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hongkong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard a McDonald ostrovy", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Chorvatsko", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Madarsko", 0,0,0 }, +{ IDX_2C('i','d'), "Indonezia", 0,0,0 }, +{ IDX_2C('i','e'), "Irsko", 0,0,0 }, +{ IDX_2C('i','l'), "Izrael", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Irak", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Island", 0,0,0 }, +{ IDX_2C('i','t'), "Taliansko", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaika", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japonsko", 0,0,0 }, +{ IDX_2C('k','e'), "Kena", 0,0,0 }, +{ IDX_2C('k','g'), "Kirgizstan", 0,0,0 }, +{ IDX_2C('k','h'), "Kambodza", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea (Severna)", 0,0,0 }, +{ IDX_2C('k','r'), "Korea (Juzna)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuvait", 0,0,0 }, +{ IDX_2C('k','y'), "Kajmanske ostrovy", 0,0,0 }, +{ IDX_2C('k','z'), "Kazachstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Libanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstainsko", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Liotyssko", 0,0,0 }, +{ IDX_2C('l','y'), "Libia", 0,0,0 }, +{ IDX_2C('m','a'), "Moroko", 0,0,0 }, +{ IDX_2C('m','c'), "Monako", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagaskar", 0,0,0 }, +{ IDX_2C('m','h'), "Marsalove ostrovy", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonsko", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolsko", 0,0,0 }, +{ IDX_2C('m','o'), "Macao", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinik", 0,0,0 }, +{ IDX_2C('m','r'), "Mauretania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauricius", 0,0,0 }, +{ IDX_2C('m','v'), "Maledivy", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexiko", 0,0,0 }, +{ IDX_2C('m','y'), "Malajzia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambik", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "Nova Kaledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nikaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Holandsko", 0,0,0 }, +{ IDX_2C('n','o'), "Norsko", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Novy Zeland", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Francuzska Polynezia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Nova Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filipiny", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polsko", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Portoriko", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugalsko", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguaj", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Rumunsko", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Ruska federacia", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudska Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Svedsko", 0,0,0 }, +{ IDX_2C('s','g'), "Singapur", 0,0,0 }, +{ IDX_2C('s','h'), "Sv. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovinsko", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovenska republika", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalsko", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "ZSSR", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Svazijsko", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Cad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thajsko", 0,0,0 }, +{ IDX_2C('t','j'), "Tadzikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmensko", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisko", 0,0,0 }, +{ IDX_2C('t','o'), "Tongo", 0,0,0 }, +{ IDX_2C('t','p'), "Vychodny Tumor", 0,0,0 }, +{ IDX_2C('t','r'), "Turecko", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad a Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraina", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Velka Britania (UK)", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "USA (US)", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatikan", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Panenske Ostrovy (Britske)", 0,0,0 }, +{ IDX_2C('v','i'), "Panenske Ostrovy (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Jemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Juhoafricka republika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.slovene b/webalizer-2.23-08/lang/webalizer_lang.slovene new file mode 100644 index 0000000..111c25c --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.slovene @@ -0,0 +1,629 @@ +/* + webalizer_lang.slovene + + Webalizer V2.0x Language Support file for Slovene. + 10-Mar-2000 Created by Anton Setnikar - Turbosist d.o.o., Ljubljana + http://www.turbosist.si (version 2.00-12) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Slovene"; +char *langcode = "sl"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing Totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Poroilo 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 povpreje"; +char *msg_main_mt = "Meseni setevki"; + +/* month HTML page strings */ +char *msg_hmth_du = "Poroilo po dnevih za"; +char *msg_hmth_hu = "Poroilo 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 podrojih"; +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 = "Drava"; +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 = "Podroja"; +char *msg_hlnk_a = "Agents"; +char *msg_hlnk_c = "Drave"; +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 = "Meseno poroilo 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. podroij"; +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= "Podroij 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 dravah 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) podroij"; +char *msg_top_u = "(vseh) URL naslovov"; +char *msg_top_r = "(vseh) napotiteljev"; +char *msg_top_a = "(vseh) brskalnikov"; +char *msg_top_c = "(vseh) drav"; +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 podroij"; +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 strenik"; +char *msg_h_other = "Ostalo"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Nereeni/Neznani", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.spanish b/webalizer-2.23-08/lang/webalizer_lang.spanish new file mode 100644 index 0000000..4704b15 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.spanish @@ -0,0 +1,647 @@ +/* + webalizer_lang.spanish + + Webalizer V2.0x Language Support file for Spanish. + 29-May-1998 Translated by Alfredo Sola (alfredo@intelideas.com) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 29-Jul-1998 Translation for most countries and 1.2 new strings + by (alfredo@intelideas.com) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 14-Apr-1999 Fixed missing comma, extra char (brad@mrunix.net) + 06-Jun-1999 Updated by Alfredo Sola for new strings + changed e-mail address (alfredo@intelideas.com) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 11-Agu-1999 Translation for more countries, eliminated HTML character + entities in countries names, other changes (jcouto@redsvn.com) + 22-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 03-Apr-2002 Fixed "CX" country Luis Gonzalez Miranda (lgm@temuco.ecweb.cl) + 16-Apr-2002 Added missing translation and corrected mispelling errors + by (mi_cuenta@yahoo.com) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Spanish"; +char *langcode = "es"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "registros"; +char *msg_addresses="direcciones"; +char *msg_ignored = "ignorados"; +char *msg_bad = "errneos"; +char *msg_in = "en"; +char *msg_seconds = "segundos"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: No puedo abrir histrico"; +char *msg_log_use = "Utilizando histrico"; +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 mquina en el informe es"; +char *msg_ign_hist= "Ignorando registro anterior..."; +char *msg_no_hist = "No encuentro el archivo histrico..."; +char *msg_get_hist= "Leyendo archivo..."; +char *msg_put_hist= "Guardando informacin de archivo..."; +char *msg_hist_err= "Error: No puedo abrir el archivo histrico"; +char *msg_bad_hist= "Error: Ignorando un registro invlido en el archivo"; +char *msg_bad_conf= "Error: no puedo abrir el archivo de configuracin"; +char *msg_bad_key = "Aviso: palabra clave errnea"; +char *msg_bad_date= "Error: ignorando registro (fecha errnea)"; +char *msg_ign_nscp= "Saltando registro de cabecera Netscape"; +char *msg_bad_rec = "Saltando registro errneo"; +char *msg_no_vrec = "No encuentro ningn registro vlido"; +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 pases"; +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 bsqueda"; +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 bsqueda, 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 histrico demasiado grande"; +char *msg_big_host= "Aviso: Cortando nombre de mquina demasiado grande"; +char *msg_big_date= "Aviso: Cortando campo de fecha demasiado grande"; +char *msg_big_req = "Aviso: Cortando campo de peticin 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 histrico]"; +char *h_msg[]= { + "-h = mostrar este mensaje" , + "-V = ver informacin de versin" , + "-v = be verbose" , + "-d = mostrar informacin adicional para depuracin" , + "-F type = Log type. type= (clf | ftp | squid | w3c)" , + "-f = procesa histricos fuera de secuencia (ver man)", + "-i = ignorar archivo" , + "-p = recordar estado (incremental)" , + "-b = ignorar estado (incremental)" , + "-q = suprimir mensajes de informacin" , + "-Q = suprimir TODOS los mensajes" , + "-Y = suprimir grfico de pases" , + "-G = suprimir grfico por horas" , + "-H = suprimir estadsticas por horas" , + "-L = suprimir leyendas coloreadas de los grficos", + "-l N = usar N lneas de fondo en los grficos" , + "-m N = especificar temporizador de visitas (N segundos)", + "-T = mostrar informacin de tiempo de ejecucin" , + "-c archivo= usar el archivo de configuracin 'archivo'" , + "-n nombre = nombre de la mquina" , + "-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 pginas de entrada" , + "-E n = Mostrar las n primeras pginas de salida" , + "-g n = Agrupar los Dominios a N niveles" , + "-X = Esconde la informacin de cada pgina" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D nombre = Usar el archivo cache de DNS 'nombre'" , + "-N n = Nmero 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 = "Perodo 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 = "Da"; +char *msg_h_mth = "Mes"; +char *msg_h_hour = "Hora"; +char *msg_h_hits = "Accesos"; +char *msg_h_pages = "Pginas"; +char *msg_h_visits= "Visitas"; +char *msg_h_files = "Archivos"; +char *msg_h_sites = "Clientes"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Mquina"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Navegador"; +char *msg_h_ref = "Enlace origen"; +char *msg_h_ctry = "Pas"; +char *msg_h_search= "Cadena de Bsqueda"; +char *msg_h_uname = "Usuario"; + +/* links along top of page */ +char *msg_hlnk_ds = "Estadsticas diarias"; +char *msg_hlnk_hs = "Estadsticas por horas"; +char *msg_hlnk_u = "URLs"; +char *msg_hlnk_s = "Clientes"; +char *msg_hlnk_a = "Navegadores"; +char *msg_hlnk_c = "Pases"; +char *msg_hlnk_r = "Enlaces origen"; +char *msg_hlnk_en = "Entrada"; +char *msg_hlnk_ex = "Salida"; +char *msg_hlnk_sr = "Bsqueda"; +char *msg_hlnk_i = "Usuarios"; + +/* monthly total table */ +char *msg_mtot_ms = "Estadsticas 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 Da"; +char *msg_mtot_mhh= "Accesos por Hora"; +char *msg_mtot_mfd= "Archivos por Da"; +char *msg_mtot_mpd= "Pginas por Da"; +char *msg_mtot_msd= "Clientes por Da"; +char *msg_mtot_mvd= "Visitas por Da"; +char *msg_mtot_mkd= "KBytes por Da"; +char *msg_mtot_rc = "Accesos por cdigo de respuesta"; + +/* daily total table */ +char *msg_dtot_ds = "Estadsticas diarias de"; + +/* hourly total table */ +char *msg_htot_hs = "Estadsticas por hora de"; + +/* country pie chart */ +char *msg_ctry_use= "Accesos por pas 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 = "pases"; +char *msg_top_en = "Total de Pginas de Entrada"; +char *msg_top_ex = "Total de Pginas de Salida"; +char *msg_top_sr = "Total de Cadenas de Bsqueda"; +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 Bsqueda"; +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[] = + { { "Cdigo de respuesta indefinido", 0 }, + { "100 - Contina", 0 }, + { "101 - Cambiando de protocolo", 0 }, + { "200 - OK", 0 }, + { "201 - Creado", 0 }, + { "202 - Aceptado", 0 }, + { "203 - Informacin 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 - Peticin errnea", 0 }, + { "401 - No autorizado", 0 }, + { "402 - Se requiere pago", 0 }, + { "403 - Prohibido", 0 }, + { "404 - No se encuentra", 0 }, + { "405 - Mtodo no permitido", 0 }, + { "406 - No aceptable", 0 }, + { "407 - Se requiere autentificacin de proxy", 0 }, + { "408 - Fin de tiempo de espera", 0 }, + { "409 - Conflicto", 0 }, + { "410 - Abandonado", 0 }, + { "411 - Se requiere longitud", 0 }, + { "412 - Falla la condicin previa", 0 }, + { "413 - Entidad de peticin demasiado grande", 0 }, + { "414 - URI de peticin 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 - Versin de HTTP no soportada", 0 } }; + +char *msg_title = "Estadsticas 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'), "Ejrcito 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'), "Afganistn", 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'), "Antrtida", 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'), "Azerbaijn", 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'), "Blgica", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahran", 0,0,0 }, +{ IDX_2C('b','i'), "Burund", 0,0,0 }, +{ IDX_2C('b','j'), "Benn", 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'), "Bhutn", 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'), "Repblica 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'), "Camern", 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'), "Repblica 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'), "Repblica 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'), "Espaa", 0,0,0 }, +{ IDX_2C('e','t'), "Etiopa", 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'), "Gabn", 0,0,0 }, +{ IDX_2C('g','b'), "Gran Bretaa (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'), "Hungra", 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 Britnicos del Ocano ndico", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Irn", 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'), "Japn", 0,0,0 }, +{ IDX_2C('k','e'), "Kenia", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstn", 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 Caimn", 0,0,0 }, +{ IDX_2C('k','z'), "Kazagistn", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lbano", 0,0,0 }, +{ IDX_2C('l','c'), "Santa Luca", 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'), "Mxico", 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'), "Omn", 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'), "Papa Nueva Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Filipinas", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistn", 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 Reunin", 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 Salomn", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudn", 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'), "Repblica 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'), "Tajikistn", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistn", 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'), "Turqua", 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'), "Uzbekistn", 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 (Britnicas)", 0,0,0 }, +{ IDX_2C('v','i'), "Islas Virgenes (U.S.A)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Islas Wallis y Futuna", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "Sudafrica", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0, NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.swedish b/webalizer-2.23-08/lang/webalizer_lang.swedish new file mode 100644 index 0000000..fe644f8 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.swedish @@ -0,0 +1,663 @@ +/* + webalizer_lang.swedish + + Webalizer V2.0x Language Support file for Swedish. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 03-Oct-1998 Swedish Translation by Daniel Bergstrom (daniel@bergstrom.net) + 28-Oct-1998 Lots of typos fixed, Daniel Bergstrom (daniel@bergstrom.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 26-Apr-1999 More typos fixed, thanks to "Mika Perl" + (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 = "Anvnder 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 fr rapporterna r"; +char *msg_ign_hist= "Ignorerar tidigare historia..."; +char *msg_no_hist = "Hittade inte historiefilen..."; +char *msg_get_hist= "Lser 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 fr"; +char *msg_gen_sum = "Genererar versiktsinformation"; +char *msg_get_data= "Lser data om fregende genomgng..."; +char *msg_put_data= "Sparar data om denna genomgng..."; +char *msg_no_data = "Hittade inte data om fregende genomgng..."; +/*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 frn denna omgng"; +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 lsa DNS-cachefilen"; +char *msg_dns_usec= "Anvnder 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, stnger av 'Top sites'"; +char *msg_nomem_tr= "Kan inte allokera minne, stnger av 'Top referrers'"; +char *msg_nomem_tu= "Kan inte allokera minne, stnger av 'Top URLs'"; +char *msg_nomem_tc= "Kan inte allokera minne, stnger av 'Top Countries'"; +char *msg_nomem_ta= "Kan inte allokera minne, stnger av 'Top User Agents'"; +char *msg_nomem_tsr="Kan inte allokera minne, stnger av 'Top Search Strings'"; +char *msg_nomem_ti= "Kan inte allokera minne, stnger av 'Top Usernames'"; +char *msg_nomem_dh= "Fel vid tillgg av dator i lista (daglig), hoppar ver"; +char *msg_nomem_mh= "Fel vid tillgg av dator i lista (mnatlig), hoppar ver"; +char *msg_nomem_u = "Fel vid tillgg av URL i lista, hoppar ver"; +char *msg_nomem_a = "Fel vid tillgg av klienttyp i lista, hoppar ver"; +char *msg_nomem_r = "Fel vid tillgg av hnvisning i lista, hoppar ver"; +char *msg_nomem_sc= "Fel vid tillgg av skstrng, hoppar ver"; +char *msg_nomem_i = "Fel vid tillgg av anvndarnamn, hoppar ver"; + +/* log record errors */ +char *msg_big_rec = "Fel: hoppar ver fr stor post i loggfil"; +char *msg_big_host= "Varning: Anpassar (kapar) fr lngt datornamn"; +char *msg_big_date= "Varning: Anpassar (kapar) fr lngt datumflt"; +char *msg_big_req = "Varning: Anpassar (kapar) fr lngt frgeflt"; +char *msg_big_ref = "Varning: Anpassar (kapar) fr lngt hnvisningsflt"; +char *msg_big_user= "Warning: Anpassar (kapar) fr lngt anvndarnamn"; +char *msg_big_one = "Varning: Strng verskrider storleken p lagringsutrymme"; + +/* misc errors */ +char *msg_no_open = "Fel: kan inte ppna fil"; + +/* Help display... */ +char *h_usage1 = "Anvndning"; +char *h_usage2 = "[flaggor] [loggfil]"; +char *h_msg[]= { + "-h = skriv hjlptext" , + "-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 tillstnd (inkrementell)" , + "-b = ignorera tillstnd (inkrementell)" , + "-q = visa ej informationsmeddelanden" , + "-Q = visa ej ngon information" , + "-Y = skapa ej graf fr lnder" , + "-G = skapa ej graf fr timmar" , + "-H = skapa ej statistik fr timmar" , + "-L = supress color coded graph legends" , + "-l num = skapa 'num' referenslinjer fr grafer" , + "-m num = Visit timeout value (seconds)" , + "-T = skriv information om tidstgng" , + "-c fil = anvnd konfigurationsfilen 'fil'" , + "-n namn = datornamn att anvnda" , + "-o katalog = katalog fr utmatning" , + "-t namn = anvnd 'namn' som titel" , + "-a namn = dlj anvndarklient 'namn'" , + "-r namn = dlj hnvisning 'namn'" , + "-s namn = dlj klientursprungsadress 'namn'" , + "-u namn = dlj URL 'namn'" , + "-x namn = Anvnd filnamnsndelse '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 lnder" , + "-R antal = visa 'antal' i listan ver hnvisningar", + "-S antal = visa 'antal' i ursprungsadress-listan" , + "-U antal = visa 'antal' i listan ver URL-er" , + "-e antal = Visa 'antal' i listan ver ingngssidor", + "-E antal = Visa 'antal' i listan ver utgngssidor", + "-g antal = Group Domains to 'antal' levels" , + "-X = Gm individuella platser" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D namn = Anvnd DNS-cachfil 'namn'" , + "-N num = Antal DNS-processer (0=stng av)" , + "-j = Enable native GeoDB lookups" , + "-J namn = Use GeoDB database 'namn'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W namn = Anvnd 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 */ +/* = Å = Ä = Ö */ +/* = å = ä = ö */ +/***********************************************************************/ + +/* 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 fr"; + +/* 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 anvndning fr"; +char *msg_hmth_hu = "Anvndning timme fr timme fr"; + +/* 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 = "Mnad"; // GD +char *msg_h_hour = "Timme"; +// char *msg_h_hits = "Träffar"; // HTML +char *msg_h_hits = "Trffar"; // GD +char *msg_h_pages = "Sidor"; +// char *msg_h_visits= "Besö."; // HTML +char *msg_h_visits= "Besk."; // 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 = "Vrdnamn"; // 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= "Skstrng"; // GD +// char *msg_h_uname = "Användarnamn"; // HTML +char *msg_h_uname = "Anvndarnamn"; // 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 fr"; + +/* 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/oknd",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, militr (mil)",0,0,0 }, +{ IDX_3C('n','e','t'), "Ntverk (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'), "Frenade 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'), "Nederlnderna",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'), "Cocosarna",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'), "Juln",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'), "Vstsahara",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'), "Falklandsarna",0,0,0 }, +{ IDX_2C('f','m'), "Mikronesien",0,0,0 }, +{ IDX_2C('f','o'), "Faraoarna",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'), "Grnland",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. Sandwicharna",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 McDonaldarna",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'), "Caymanarna",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'), "Marshallarna",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 Marianaarna",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'), "Nederlnderna",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'), "Rumnien",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'), "Solomonarna",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 Caicosarna",0,0,0 }, +{ IDX_2C('t','d'), "Chad",0,0,0 }, +{ IDX_2C('t','f'), "Sdra 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 Futunaarna",0,0,0 }, +{ IDX_2C('w','s'), "Samoa",0,0,0 }, +{ IDX_2C('y','e'), "Yemen",0,0,0 }, +{ IDX_2C('y','t'), "Mayotte",0,0,0 }, +{ IDX_2C('y','u'), "Jugoslavien",0,0,0 }, +{ IDX_2C('z','a'), "Sydafrika",0,0,0 }, +{ IDX_2C('z','m'), "Zambia",0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe",0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy",0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider",0,0,0 }, +{ IDX_2C('o','1'), "Other",0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region",0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)",0,0,0 }, +{ 0, NULL,0,0,0 } +}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.thai b/webalizer-2.23-08/lang/webalizer_lang.thai new file mode 100644 index 0000000..9d16695 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.thai @@ -0,0 +1,634 @@ +/* + webalizer_lang.thai + + Webalizer V2.0x Language Support file for Thai. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 06-Jun-2002 Thai translation by Mr.Piriya Jannoppakarn (piriya@pantip.com) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Thai"; +char *langcode = "th"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "¹"; +char *msg_addresses="ʹ"; +char *msg_ignored = "¡"; +char *msg_bad = ""; +char *msg_in = ""; +char *msg_seconds = "Թҷ"; + +/* progress and setup error messages */ +char *msg_log_err = "ͼԴҴ: öԴ"; +char *msg_log_use = ""; +char *msg_dir_err = "ͼԴҴ: ö¹ä"; +char *msg_dir_use = "ҧѾ"; +char *msg_cur_dir = "äջѨغѹ"; +char *msg_hostname= "§ҹѺ"; +char *msg_ign_hist= "š͹˹..."; +char *msg_no_hist = "辺š͹˹..."; +char *msg_get_hist= "ѧҹš͹˹..."; +char *msg_put_hist= "ѧѹ֡š͹˹..."; +char *msg_hist_err= "ͼԴҴ: öѹ֡š͹˹"; +char *msg_bad_hist= "ͼԴҴ: ¡鹢š͹˹ҷ١ͧ"; +char *msg_bad_conf= "ͼԴҴ: Unable to open configuration file"; +char *msg_bad_key = "͹: ١ͧ"; +char *msg_bad_date= "ͼԴҴ: ¹ (ѹ١ͧ)"; +char *msg_ign_nscp= "¹红ǹǢͧ Netscape"; +char *msg_bad_rec = "¹١ͧ"; +char *msg_no_vrec = "辺¹١ͧ!"; +char *msg_gen_rpt = "ѧҧ§ҹѺ"; +char *msg_gen_sum = "ѧػ§ҹѺ"; +char *msg_get_data= "ѧҹŷ¡͹˹.."; +char *msg_put_data= "ѧѹ֡ŷҹ..."; +char *msg_no_data = "辺ŷ¡͹˹..."; +char *msg_bad_data= "ͼԴҴ: ö¡׹ŷ¡͹˹"; +char *msg_data_err= "ͼԴҴ: öѹ֡ŷ¡"; +char *msg_dup_data= "͹: Դūӫ͹"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "˹¤§, öҧ Top Sites !"; +char *msg_nomem_tr= "˹¤§, öҧ Top Referrers !"; +char *msg_nomem_tu= "˹¤§, öҧ Top URLs !"; +char *msg_nomem_tc= "˹¤§, öҧ Top Countries !"; +char *msg_nomem_ta= "˹¤§, öҧ Top User Agents !"; +char *msg_nomem_tsr="˹¤§, öҧ Top Search Strings !"; +char *msg_nomem_ti= "˹¤§, öҧ Top Usernames !"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "§ҹǧ"; +char *msg_hhdr_gt = "ҧ"; + +/* main index strings */ +char *msg_main_us = "Usage summary for"; +/* char *msg_main_per= "12 ͹ҹ"; */ +char *msg_main_per= "ػ͹"; +char *msg_main_sum= "ػ͹"; +char *msg_main_da = "µѹ"; +char *msg_main_mt = "͹"; + +/* month HTML page strings */ +char *msg_hmth_du = "Daily usage for"; +char *msg_hmth_hu = "Hourly usage for"; + +/* table header strings */ +char *msg_h_by = "§"; +char *msg_h_avg = ""; +char *msg_h_max = "٧ش"; +char *msg_h_total = ""; +char *msg_h_totals= ""; +char *msg_h_day = "ѹ"; +char *msg_h_mth = "͹"; +char *msg_h_hour = ""; +char *msg_h_hits = "Hits"; +char *msg_h_pages = "Pages"; +char *msg_h_visits= "Visits"; +char *msg_h_files = "Files"; +char *msg_h_sites = "Sites"; +char *msg_h_xfer = "KBytes"; +char *msg_h_hname = "Hostname"; +char *msg_h_url = "URL"; +char *msg_h_agent = "User Agent"; +char *msg_h_ref = "Referrer"; +char *msg_h_ctry = ""; +char *msg_h_search= "Search String"; +char *msg_h_uname = "Username"; + +/* links along top of page */ +char *msg_hlnk_ds = "ʶԵѹ"; +char *msg_hlnk_hs = "ʶԵª"; +char *msg_hlnk_u = "URL"; +char *msg_hlnk_s = "Site"; +char *msg_hlnk_a = "Agent"; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = "Referrer"; +char *msg_hlnk_en = "Entry"; +char *msg_hlnk_ex = "Exit"; +char *msg_hlnk_sr = ""; +char *msg_hlnk_i = ""; + +/* monthly total table */ +char *msg_mtot_ms = "ʶԵ͹Ѻ"; +char *msg_mtot_th = "hit "; +char *msg_mtot_tf = ""; +char *msg_mtot_tx = "亵"; +char *msg_mtot_us = "unique site "; +char *msg_mtot_ur = "unique referrer "; +char *msg_mtot_ua = "unique user agent "; +char *msg_mtot_uu = "unique URL "; +char *msg_mtot_ui = ""; +char *msg_mtot_mhd= "hit ѹ"; +char *msg_mtot_mhh= "hit ͪ"; +char *msg_mtot_mfd= "ѹ"; +char *msg_mtot_mpd= "page ѹ"; +char *msg_mtot_msd= "site ѹ"; +char *msg_mtot_mvd= "visit ѹ"; +char *msg_mtot_mkd= "亵ѹ"; +char *msg_mtot_rc = "hit response Code"; + +/* daily total table */ +char *msg_dtot_ds = "ʶԵѹѺ"; + +/* hourly total table */ +char *msg_htot_hs = "ʶԵªѺ"; + +/* country pie chart */ +char *msg_ctry_use= "Usage by Country for"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = ""; +char *msg_top_of = "ѹѺáҡ"; +char *msg_top_s = "Site "; +char *msg_top_u = "URL "; +char *msg_top_r = "Referrer "; +char *msg_top_a = "User Agent "; +char *msg_top_c = "ȷ"; +char *msg_top_en = "Entry Page "; +char *msg_top_ex = "Exit Page "; +char *msg_top_sr = "Search String "; +char *msg_top_i = ""; +char *msg_v_sites = "ʴ䫵 (site) "; +char *msg_v_urls = "ʴ URL "; +char *msg_v_refs = "ʴ Referrer "; +char *msg_v_agents= "ʴ User Agent "; +char *msg_v_search= "ʴ Search Strings "; +char *msg_v_users = "ʴ"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"}; + +/* long month names - can be any length */ +char *l_month[12]={ "January", "February", "March", "April", + "May", "June", "July", "August", + "September","October", "November","December"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Undefined response code", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = "ʶԵԡҹѺ"; +char *msg_h_other = " "; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Unresolved/Unknown", 0,0,0 }, +{ IDX_3C('c','o','m'), "Commercial (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Educational (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Government (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "International (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Military (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Network (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Non-Profit (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato field (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andorra", 0,0,0 }, +{ IDX_2C('a','e'), "United Arab Emirates", 0,0,0 }, +{ IDX_2C('a','f'), "Afghanistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua and Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albania", 0,0,0 }, +{ IDX_2C('a','m'), "Armenia", 0,0,0 }, +{ IDX_2C('a','n'), "Netherlands Antilles", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antarctica", 0,0,0 }, +{ IDX_2C('a','r'), "Argentina", 0,0,0 }, +{ IDX_2C('a','s'), "American Samoa", 0,0,0 }, +{ IDX_2C('a','t'), "Austria", 0,0,0 }, +{ IDX_2C('a','u'), "Australia", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbaijan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosnia and Herzegovina", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Bangladesh", 0,0,0 }, +{ IDX_2C('b','e'), "Belgium", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaria", 0,0,0 }, +{ IDX_2C('b','h'), "Bahrain", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivia", 0,0,0 }, +{ IDX_2C('b','r'), "Brazil", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamas", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Island", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarus", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Canada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Islands", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Central African Republic", 0,0,0 }, +{ IDX_2C('c','g'), "Congo", 0,0,0 }, +{ IDX_2C('c','h'), "Switzerland", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Coast)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Islands", 0,0,0 }, +{ IDX_2C('c','l'), "Chile", 0,0,0 }, +{ IDX_2C('c','m'), "Cameroon", 0,0,0 }, +{ IDX_2C('c','n'), "China", 0,0,0 }, +{ IDX_2C('c','o'), "Colombia", 0,0,0 }, +{ IDX_2C('c','r'), "Costa Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Cuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Island", 0,0,0 }, +{ IDX_2C('c','y'), "Cyprus", 0,0,0 }, +{ IDX_2C('c','z'), "Czech Republic", 0,0,0 }, +{ IDX_2C('d','e'), "Germany", 0,0,0 }, +{ IDX_2C('d','j'), "Djibouti", 0,0,0 }, +{ IDX_2C('d','k'), "Denmark", 0,0,0 }, +{ IDX_2C('d','m'), "Dominica", 0,0,0 }, +{ IDX_2C('d','o'), "Dominican Republic", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ecuador", 0,0,0 }, +{ IDX_2C('e','e'), "Estonia", 0,0,0 }, +{ IDX_2C('e','g'), "Egypt", 0,0,0 }, +{ IDX_2C('e','h'), "Western Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Spain", 0,0,0 }, +{ IDX_2C('e','t'), "Ethiopia", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finland", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Falkland Islands (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Islands", 0,0,0 }, +{ IDX_2C('f','r'), "France", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Great Britain (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Grenada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "French Guiana", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Guinea", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Equatorial Guinea", 0,0,0 }, +{ IDX_2C('g','r'), "Greece", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Isls.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Islands", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Croatia", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Hungary", 0,0,0 }, +{ IDX_2C('i','d'), "Indonesia", 0,0,0 }, +{ IDX_2C('i','e'), "Ireland", 0,0,0 }, +{ IDX_2C('i','l'), "Israel", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "India", 0,0,0 }, +{ IDX_2C('i','o'), "British Indian Ocean Territory", 0,0,0 }, +{ IDX_2C('i','q'), "Iraq", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Iceland", 0,0,0 }, +{ IDX_2C('i','t'), "Italy", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaica", 0,0,0 }, +{ IDX_2C('j','o'), "Jordan", 0,0,0 }, +{ IDX_2C('j','p'), "Japan", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kyrgyzstan", 0,0,0 }, +{ IDX_2C('k','h'), "Cambodia", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Korea, Democratic Republic of", 0,0,0 }, +{ IDX_2C('k','r'), "Korea, Republic of", 0,0,0 }, +{ IDX_2C('k','w'), "Kuwait", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhstan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lebanon", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberia", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Lithuania", 0,0,0 }, +{ IDX_2C('l','u'), "Luxembourg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Morocco", 0,0,0 }, +{ IDX_2C('m','c'), "Monaco", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Islands", 0,0,0 }, +{ IDX_2C('m','k'), "Macedonia", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolia", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Northern Mariana Islands", 0,0,0 }, +{ IDX_2C('m','q'), "Martinique", 0,0,0 }, +{ IDX_2C('m','r'), "Mauritania", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldives", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Mexico", 0,0,0 }, +{ IDX_2C('m','y'), "Malaysia", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambique", 0,0,0 }, +{ IDX_2C('n','a'), "Namibia", 0,0,0 }, +{ IDX_2C('n','c'), "New Caledonia", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Island", 0,0,0 }, +{ IDX_2C('n','g'), "Nigeria", 0,0,0 }, +{ IDX_2C('n','i'), "Nicaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Netherlands", 0,0,0 }, +{ IDX_2C('n','o'), "Norway", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "New Zealand", 0,0,0 }, +{ IDX_2C('o','m'), "Oman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "French Polynesia", 0,0,0 }, +{ IDX_2C('p','g'), "Papua New Guinea", 0,0,0 }, +{ IDX_2C('p','h'), "Philippines", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Poland", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Puerto Rico", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portugal", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Qatar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romania", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Russian Federation", 0,0,0 }, +{ IDX_2C('r','w'), "Rwanda", 0,0,0 }, +{ IDX_2C('s','a'), "Saudi Arabia", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Islands", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Sweden", 0,0,0 }, +{ IDX_2C('s','g'), "Singapore", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenia", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard and Jan Mayen Islands", 0,0,0 }, +{ IDX_2C('s','k'), "Slovakia", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somalia", 0,0,0 }, +{ IDX_2C('s','r'), "Suriname", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "Soviet Union", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Syrian Arab Republic", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks and Caicos Islands", 0,0,0 }, +{ IDX_2C('t','d'), "Chad", 0,0,0 }, +{ IDX_2C('t','f'), "French Southern Territories", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Thailand", 0,0,0 }, +{ IDX_2C('t','j'), "Tajikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunisia", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Portuguese Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkey", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad and Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Taiwan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzania", 0,0,0 }, +{ IDX_2C('u','a'), "Ukraine", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "United Kingdom", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Islands", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican City State (Holy See)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent and the Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Islands (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Islands (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Viet Nam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis and Futuna Islands", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavia", 0,0,0 }, +{ IDX_2C('z','a'), "South Africa", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabwe", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.turkish b/webalizer-2.23-08/lang/webalizer_lang.turkish new file mode 100644 index 0000000..f6ca47e --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.turkish @@ -0,0 +1,634 @@ +/* + webalizer_lang.turkish + + Webalizer V2.0x Language Support file for Turkish. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 20-Aug-2000 Turkish Translation by Evren Yurtesen (yurtesen@ispro.net.tr) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Turkish"; +char *langcode = "tr"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "kayit"; +char *msg_addresses="addres"; +char *msg_ignored = "islenmedi"; +char *msg_bad = "kotu"; +char *msg_in = ""; +char *msg_seconds = "saniyede"; + +/* progress and setup error messages */ +char *msg_log_err = "Hata: Kutuk dosyasi acilamadi"; +char *msg_log_use = "Kullanilan kutukdosyasi"; +char *msg_dir_err = "Hata: Degistirilemeyen dizin"; +char *msg_dir_use = "Ciktinin yaratildigi yer"; +char *msg_cur_dir = "su anki dizin"; +char *msg_hostname= "Raporlar icin makine adi"; +char *msg_ign_hist= "Bir onceki history dosyasi islenmiyor..."; +char *msg_no_hist = "History dosyasi bulunamadi..."; +char *msg_get_hist= "History dosyasi okunuyor..."; +char *msg_put_hist= "History bilgileri kaydediliyor..."; +char *msg_hist_err= "Hata: History dosyasi yazilamiyor"; +char *msg_bad_hist= "Hata: Gecersiz history kaydi islenmiyor"; +char *msg_bad_conf= "Hata: Konfigurasyon dosyasi acilamiyor"; +char *msg_bad_key = "Dikkat: Gecersiz anahtar kelime"; +char *msg_bad_date= "Hata: Kayit islenmeden geciliyor (kotu tarih)"; +char *msg_ign_nscp= "Netscape baslik kaydi islenmeden geciliyor"; +char *msg_bad_rec = "Kotu kayit islenmeden geciliyor"; +char *msg_no_vrec = "Hicbir gecerli kayit bulunamadi!"; +char *msg_gen_rpt = "Raporu yaratilan site"; +char *msg_gen_sum = "Ozet raporu yaratiliyor"; +char *msg_get_data= "Bir onceki calismanin bilgileri okunuyor..."; +char *msg_put_data= "Su anki calisma bilgileri kaydediliyor..."; +char *msg_no_data = "Bir onceki calismanin bilgileri bulunamadi..."; +char *msg_bad_data= "Hata: Calisma bilgileri tekrar kullanilamiyor"; +char *msg_data_err= "Hata: Su anki calisma bilgileri kaydedilemiyor"; +char *msg_dup_data= "Dikkat: Buyuk ihtimalle cift islenmis bilgi bulundu"; + +/* DNS Stuff */ +char *msg_dns_nocf= "Onbellek dosyasi belirtilmedi, islem iptal ediliyor..."; +char *msg_dns_nodb= "Hata: DNS onbellekleme dosyasi acilamadi"; +char *msg_dns_nolk= "Hata: DNS onbellekleme dosyasi kilitlenemedi"; +char *msg_dns_usec= "Kullanilan DNS onbellekleme dosyasi"; +char *msg_dns_rslv= "DNS bakimi"; +char *msg_dns_none= "Islem yapilmasi gereken kayit yok"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Yeterli hafiza yok, Top Istemciler kapatildi!"; +char *msg_nomem_tr= "Yeterli hafiza yok, Top Referanslar kapatildi!"; +char *msg_nomem_tu= "Yeterli hafiza yok, Top URL'ler kapatildi!"; +char *msg_nomem_tc= "Yeterli hafiza yok, Top Ulkeler kapatildi!"; +char *msg_nomem_ta= "Yeterli hafiza yok, Top Kullanici Ajanlari kapatildi!"; +char *msg_nomem_tsr="Yeterli hafiza yok, Top Arama Girdileri kapatildi!"; +char *msg_nomem_ti= "Yeterli hafiza yok, Top Kullanici Adlari kapatildi!"; +char *msg_nomem_dh= "Hata makine nodu ekleniyor (gunluk), islenmeden geciliyor"; +char *msg_nomem_mh= "Hata makine nodu ekleniyor (aylik), islenmeden geciliyor"; +char *msg_nomem_u = "Hata URL nodu ekleniyor, islenmeden geciliyor"; +char *msg_nomem_a = "Hata Kullanici Ajani ekleniyor, islenmeden geciliyor"; +char *msg_nomem_r = "Hata Referans nodu ekleniyor, islenmeden geciliyor"; +char *msg_nomem_sc= "Hata Arama Girdileri nodu ekleniyor, islenmeden geciliyor"; +char *msg_nomem_i = "Hata Kullanici Adi nodu ekleniyor, islenmeden geciliyor"; + +/* log record errors */ +char *msg_big_rec = "Hata: Normalden buyuk kutuk kaydi islenmeden geciliyor"; +char *msg_big_host= "Dikkat: Normalden buyuk makine ismi kucultuluyor"; +char *msg_big_date= "Dikkat: Normalden buyuk tarih bolumu kucultuluyor"; +char *msg_big_req = "Dikkat: Normalden buyuk istek bolumu kucultuluyor"; +char *msg_big_ref = "Dikkat: Normalden buyuk referans bolumu kucultuluyor"; +char *msg_big_user= "Dikkat: Normalden buyuk kullanici adi bolumu kucultuluyor"; +char *msg_big_one = "Dikkat: Girdi saklama boyutunu asiyor"; + +/* misc errors */ +char *msg_no_open = "Hata: Dosya acilamadi"; + +/* Help display... */ +char *h_usage1 = "Kullanim"; +char *h_usage2 = "[opsiyonlar] [kutuk dosyasi]"; +char *h_msg[]= { + "-h = bu yardim mesajini yazdir" , + "-V = surum bilgilerini yazdir" , + "-v = be verbose" , + "-d = ek debug bilgileri yazir" , + "-F tip = kutuk tipi. 'tip'= (clf | ftp | squid | w3c)" , + "-f = Siralama hatalarini duzelt" , + "-i = history dosyasina bakma" , + "-p = durumu koru (eklemeli)" , + "-b = ignore state (incremental)" , + "-q = bilgi mesajlarini iptal et" , + "-Q = _BUTUN_ mesajlari iptal et" , + "-Y = ulke grafigini iptal et" , + "-G = saate gore grafigini iptal et" , + "-H = saate gore istatistikleri iptal et" , + "-L = renk kodlu grafik aciklamalarini iptal et" , + "-l sayi = grafiklerde 'sayi' kadar cizgi kullan" , + "-m sayi = ziyaret bitim zamani 'sayi'= (seconds)" , + "-T = islem suresi bilgisini yazdir" , + "-c dosya = belirtilen konfigurasyon dosyasini kullan 'dosya'" , + "-n ad = kullanilacak makine adi 'ad'" , + "-o dizin = kullanilacak cikti dizini 'dizin'" , + "-t ad = rapor basligi 'ad'" , + "-a ad = kullanici ajanini sakla 'ad'" , + "-r ad = referansi sakla 'ad'" , + "-s ad = siteyi sakla 'ad'" , + "-u ad = URL'yi sakla 'ad'" , + "-x ad = Dosya uzantisini kullan 'ad'" , + "-O ad = Omit page 'ad'" , + "-P ad = Sayfa uzantisi 'ad'" , + "-I ad = Indeks ismi 'ad'" , + "-K sayi = sayi months in summary table" , + "-k sayi = sayi months in summary graph" , + "-A sayi = sayi kadar top ajan goster" , + "-C sayi = sayi kadar top ulke goster" , + "-R sayi = sayi kadar top referans goster" , + "-S sayi = sayi kadar top istemci goster" , + "-U sayi = sayi kadar top URL goster" , + "-e sayi = sayi kadar top giris sayfasi goster" , + "-E sayi = sayi kadar top cikis sayfasi goster" , + "-g sayi = alan adlarini 'sayi' kadar seviyede grupla" , + "-X = tek siteleri gizle" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D ad = 'ad' isimli DNS onbellek dosyasini kullan" , + "-N sayi = DNS islemcilerinin sayisi (0=iptal)" , + "-j = Enable native GeoDB lookups" , + "-J ad = Use GeoDB database 'ad'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W ad = Use GeoIP database 'ad'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Ozet Periyodu"; +char *msg_hhdr_gt = "Yaratilma Tarihi"; + +/* main index strings */ +char *msg_main_us = "Kullanim Ozeti"; +/* char *msg_main_per= "Son 12 Ay"; */ +char *msg_main_per= "Ay'a Gore Ozet"; +char *msg_main_sum= "Ay'a Gore Ozet"; +char *msg_main_da = "Gunluk Averaj"; +char *msg_main_mt = "Aylik Toplamlar"; + +/* month HTML page strings */ +char *msg_hmth_du = "Gunluk Kullanim:"; +char *msg_hmth_hu = "Saatlik Kullanim:"; + +/* table header strings */ +char *msg_h_by = ""; +char *msg_h_avg = "Averaj"; +char *msg_h_max = "Maksimum"; +char *msg_h_total = "Toplam"; +char *msg_h_totals= "Toplamlar"; +char *msg_h_day = "Gun"; +char *msg_h_mth = "Ay"; +char *msg_h_hour = "Saat"; +char *msg_h_hits = "HIT'ler"; +char *msg_h_pages = "Sayfa"; +char *msg_h_visits= "Ziyaret"; +char *msg_h_files = "Dosya"; +char *msg_h_sites = "Istemci"; +char *msg_h_xfer = "KBayt'a Gore"; +char *msg_h_hname = "Makine Adi"; +char *msg_h_url = "URL"; +char *msg_h_agent = "Kullanici Ajani"; +char *msg_h_ref = "Referans"; +char *msg_h_ctry = "Ulke"; +char *msg_h_search= "Arama Girdisi"; +char *msg_h_uname = "Kullanici"; + +/* links along top of page */ +char *msg_hlnk_ds = "Gunluk Istatistikler"; +char *msg_hlnk_hs = "Saatlik Istatistikler"; +char *msg_hlnk_u = "URL'ler"; +char *msg_hlnk_s = "Istemciler"; +char *msg_hlnk_a = "Ajanlar"; +char *msg_hlnk_c = "Ulkeler"; +char *msg_hlnk_r = "Referanslar"; +char *msg_hlnk_en = "Giris"; +char *msg_hlnk_ex = "Cikis"; +char *msg_hlnk_sr = "Arama"; +char *msg_hlnk_i = "Kullanicilar"; + +/* monthly total table */ +char *msg_mtot_ms = "Aylik Istatistikler:"; +char *msg_mtot_th = "Toplam HIT'ler"; +char *msg_mtot_tf = "Toplam Dosyalar"; +char *msg_mtot_tx = "Toplam KBaytlar"; +char *msg_mtot_us = "Toplam Ayni Istemciler"; +char *msg_mtot_ur = "Toplam Ayni Referanslar"; +char *msg_mtot_ua = "Toplam Ayni Kullanici Ajanlari"; +char *msg_mtot_uu = "Toplam Ayni URL'ler"; +char *msg_mtot_ui = "Toplam Ayni Kullanici Adlari"; +char *msg_mtot_mhd= "Gunluk HIT"; +char *msg_mtot_mhh= "Saatlik HIT"; +char *msg_mtot_mfd= "Gunluk Dosyalar"; +char *msg_mtot_mpd= "Gunluk Sayfalar"; +char *msg_mtot_msd= "Gunluk Istemciler"; +char *msg_mtot_mvd= "Gunluk Ziyaretler"; +char *msg_mtot_mkd= "Gunluk KBaytlar"; +char *msg_mtot_rc = "Cevap Koduna Gore HIT"; + +/* daily total table */ +char *msg_dtot_ds = "Gunluk Istatistikler:"; + +/* hourly total table */ +char *msg_htot_hs = "Saatlik Istatistikler:"; + +/* country pie chart */ +char *msg_ctry_use= "Ulkeye Gore Kullanim:"; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "Top"; +char *msg_top_of = "/"; +char *msg_top_s = "Toplam Istemciler"; +char *msg_top_u = "Toplam URL'ler"; +char *msg_top_r = "Toplam Referanslar"; +char *msg_top_a = "Toplam Kullanici Ajanlari"; +char *msg_top_c = "Toplam Ulkeler"; +char *msg_top_en = "Toplam Giris Sayfalari"; +char *msg_top_ex = "Toplam Cikis Sayfalari"; +char *msg_top_sr = "Toplam Arama Girdileri"; +char *msg_top_i = "Toplam Kullanici Adlari"; +char *msg_v_sites = "Butun Istemcileri Goster"; +char *msg_v_urls = "Butun URL'leri Goster"; +char *msg_v_refs = "Butun Referanslar Goster"; +char *msg_v_agents= "Butun Kullanici Ajanlarini Goster"; +char *msg_v_search= "Butun Arama Girdilerini Goster"; +char *msg_v_users = "Butun Kullanici Adlarini Goster"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "Oca", "Sub", "Mar", + "Nis", "May", "Haz", + "Tem", "Agu", "Eyl", + "Eki", "Kas", "Ara"}; + +/* long month names - can be any length */ +char *l_month[12]={ "Ocak", "Subat", "Mart", "Nisan", + "Mayis", "Haziran", "Temmuz", "Agustos", + "Eylul", "Ekim", "Kasim", "Aralik"}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "Tanimlanmamis cevap kodu", 0 }, + { "Kod 100 - Devam", 0 }, + { "Kod 101 - Protokol Degistirme", 0 }, + { "Kod 200 - TAMAM", 0 }, + { "Kod 201 - Yaratildi", 0 }, + { "Kod 202 - Kabul Edildi", 0 }, + { "Kod 203 - Otantikasyonu Olmayan Bilgi", 0 }, + { "Kod 204 - Icerik Yok", 0 }, + { "Kod 205 - Icerigi Sifirla", 0 }, + { "Kod 206 - Bolumsel Icerik", 0 }, + { "Kod 300 - Bircok Secim", 0 }, + { "Kod 301 - Tamamen Tasindi", 0 }, + { "Kod 302 - Bulundu", 0 }, + { "Kod 303 - Digerine Bakiniz", 0 }, + { "Kod 304 - Degismedi", 0 }, + { "Kod 305 - Proxy Kullaniniz", 0 }, + { "Kod 307 - Gecici Olarak Tasindi", 0 }, + { "Kod 400 - Kotu Istek", 0 }, + { "Kod 401 - Yetkisiz", 0 }, + { "Kod 402 - Odeme Gerekli", 0 }, + { "Kod 403 - Yasak", 0 }, + { "Kod 404 - Bulunamadi", 0 }, + { "Kod 405 - Metoda Izin Verilmedi", 0 }, + { "Kod 406 - Kabul Edilemez", 0 }, + { "Kod 407 - Proxy Otantikasyonu Gerekli", 0 }, + { "Kod 408 - Istek Zaman Asimi", 0 }, + { "Kod 409 - Cakisma", 0 }, + { "Kod 410 - Gitti", 0 }, + { "Kod 411 - Uzunluk Gerekli", 0 }, + { "Kod 412 - On Kosul Basarisiz", 0 }, + { "Kod 413 - Istek Varligi Cok Buyuk", 0 }, + { "Kod 414 - Istek-URI'si Cok Uzun", 0 }, + { "Kod 415 - Desteklenmeyen Orta Tipi", 0 }, + { "Kod 416 - Istenen Uzaklik Karsilanamaz", 0 }, + { "Kod 417 - Beklenti Basarisiz", 0 }, + { "Kod 500 - Ic Sunucu Hatasi", 0 }, + { "Kod 501 - Tamamlanmadi", 0 }, + { "Kod 502 - Kotu Gecit", 0 }, + { "Kod 503 - Servis Kapali", 0 }, + { "Kod 504 - Gecit Zaman Asimi", 0 }, + { "Kod 505 - HTTP Surumu Desteklenmiyor", 0 } }; + +char *msg_title = "Kullanim Istatistikleri:"; +char *msg_h_other = "Diger"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "Cozumlenemeyen/Bilinemeyen", 0,0,0 }, +{ IDX_3C('c','o','m'), "Ticari (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "Egitimsel (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "US Devlet (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "Uluslarasi (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "US Askeri (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "Ag (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "Organizasyon (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Eski stil Arpanet (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o'),"Nato alani (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), "Andora", 0,0,0 }, +{ IDX_2C('a','e'), "Birlesmis Arab Emirlikleri", 0,0,0 }, +{ IDX_2C('a','f'), "Afganistan", 0,0,0 }, +{ IDX_2C('a','g'), "Antigua ve Barbuda", 0,0,0 }, +{ IDX_2C('a','i'), "Anguilla", 0,0,0 }, +{ IDX_2C('a','l'), "Albanya", 0,0,0 }, +{ IDX_2C('a','m'), "Ermenistan", 0,0,0 }, +{ IDX_2C('a','n'), "Hollanda Antil Adalari", 0,0,0 }, +{ IDX_2C('a','o'), "Angola", 0,0,0 }, +{ IDX_2C('a','q'), "Antartik", 0,0,0 }, +{ IDX_2C('a','r'), "Arjantin", 0,0,0 }, +{ IDX_2C('a','s'), "Amerikan Samoa Adalari", 0,0,0 }, +{ IDX_2C('a','t'), "Avusturya", 0,0,0 }, +{ IDX_2C('a','u'), "Avusturalya", 0,0,0 }, +{ IDX_2C('a','w'), "Aruba", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), "Azerbeycan", 0,0,0 }, +{ IDX_2C('b','a'), "Bosna ve Herzegova", 0,0,0 }, +{ IDX_2C('b','b'), "Barbados", 0,0,0 }, +{ IDX_2C('b','d'), "Banglades", 0,0,0 }, +{ IDX_2C('b','e'), "Belcika", 0,0,0 }, +{ IDX_2C('b','f'), "Burkina Faso", 0,0,0 }, +{ IDX_2C('b','g'), "Bulgaristan", 0,0,0 }, +{ IDX_2C('b','h'), "Bahreyn", 0,0,0 }, +{ IDX_2C('b','i'), "Burundi", 0,0,0 }, +{ IDX_2C('b','j'), "Benin", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), "Bermuda", 0,0,0 }, +{ IDX_2C('b','n'), "Brunei Darussalam", 0,0,0 }, +{ IDX_2C('b','o'), "Bolivya", 0,0,0 }, +{ IDX_2C('b','r'), "Brezilya", 0,0,0 }, +{ IDX_2C('b','s'), "Bahamalar", 0,0,0 }, +{ IDX_2C('b','t'), "Bhutan", 0,0,0 }, +{ IDX_2C('b','v'), "Bouvet Adasi", 0,0,0 }, +{ IDX_2C('b','w'), "Botswana", 0,0,0 }, +{ IDX_2C('b','y'), "Belarusya", 0,0,0 }, +{ IDX_2C('b','z'), "Belize", 0,0,0 }, +{ IDX_2C('c','a'), "Kanada", 0,0,0 }, +{ IDX_2C('c','c'), "Cocos (Keeling) Adalari", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), "Orta Afrika Cumhuriyeti", 0,0,0 }, +{ IDX_2C('c','g'), "Kongo", 0,0,0 }, +{ IDX_2C('c','h'), "Isvicre", 0,0,0 }, +{ IDX_2C('c','i'), "Cote D'Ivoire (Ivory Sahili)", 0,0,0 }, +{ IDX_2C('c','k'), "Cook Adalari", 0,0,0 }, +{ IDX_2C('c','l'), "Sile", 0,0,0 }, +{ IDX_2C('c','m'), "Kamerun", 0,0,0 }, +{ IDX_2C('c','n'), "Cin", 0,0,0 }, +{ IDX_2C('c','o'), "Kolombiya", 0,0,0 }, +{ IDX_2C('c','r'), "Kosta Rica", 0,0,0 }, +{ IDX_2C('c','u'), "Kuba", 0,0,0 }, +{ IDX_2C('c','v'), "Cape Verde", 0,0,0 }, +{ IDX_2C('c','x'), "Christmas Adalari", 0,0,0 }, +{ IDX_2C('c','y'), "Kibris", 0,0,0 }, +{ IDX_2C('c','z'), "Cek Cumhuriyeti", 0,0,0 }, +{ IDX_2C('d','e'), "Almanya", 0,0,0 }, +{ IDX_2C('d','j'), "Djibuti", 0,0,0 }, +{ IDX_2C('d','k'), "Danimarka", 0,0,0 }, +{ IDX_2C('d','m'), "Dominika", 0,0,0 }, +{ IDX_2C('d','o'), "Dominik Cumhuriyeti", 0,0,0 }, +{ IDX_2C('d','z'), "Algeria", 0,0,0 }, +{ IDX_2C('e','c'), "Ekvator", 0,0,0 }, +{ IDX_2C('e','e'), "Estonya", 0,0,0 }, +{ IDX_2C('e','g'), "Misir", 0,0,0 }, +{ IDX_2C('e','h'), "Bati Sahara", 0,0,0 }, +{ IDX_2C('e','r'), "Eritrea", 0,0,0 }, +{ IDX_2C('e','s'), "Ispanya", 0,0,0 }, +{ IDX_2C('e','t'), "Etiyopya", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "Finlandiya", 0,0,0 }, +{ IDX_2C('f','j'), "Fiji", 0,0,0 }, +{ IDX_2C('f','k'), "Folkland Adalari (Malvinas)", 0,0,0 }, +{ IDX_2C('f','m'), "Micronesia", 0,0,0 }, +{ IDX_2C('f','o'), "Faroe Adalari", 0,0,0 }, +{ IDX_2C('f','r'), "Fransa", 0,0,0 }, +{ IDX_2C('g','a'), "Gabon", 0,0,0 }, +{ IDX_2C('g','b'), "Buyuk Biritanya (UK)", 0,0,0 }, +{ IDX_2C('g','d'), "Granada", 0,0,0 }, +{ IDX_2C('g','e'), "Georgia", 0,0,0 }, +{ IDX_2C('g','f'), "Fransiz Guyanasi", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), "Ghana", 0,0,0 }, +{ IDX_2C('g','i'), "Gibraltar", 0,0,0 }, +{ IDX_2C('g','l'), "Greenland", 0,0,0 }, +{ IDX_2C('g','m'), "Gambia", 0,0,0 }, +{ IDX_2C('g','n'), "Gine", 0,0,0 }, +{ IDX_2C('g','p'), "Guadeloupe", 0,0,0 }, +{ IDX_2C('g','q'), "Ekvator Ginesi", 0,0,0 }, +{ IDX_2C('g','r'), "Yunanistan", 0,0,0 }, +{ IDX_2C('g','s'), "S. Georgia and S. Sandwich Adalari.", 0,0,0 }, +{ IDX_2C('g','t'), "Guatemala", 0,0,0 }, +{ IDX_2C('g','u'), "Guam", 0,0,0 }, +{ IDX_2C('g','w'), "Guinea-Bissau", 0,0,0 }, +{ IDX_2C('g','y'), "Guyana", 0,0,0 }, +{ IDX_2C('h','k'), "Hong Kong", 0,0,0 }, +{ IDX_2C('h','m'), "Heard and McDonald Adalari", 0,0,0 }, +{ IDX_2C('h','n'), "Honduras", 0,0,0 }, +{ IDX_2C('h','r'), "Hirvatistan", 0,0,0 }, +{ IDX_2C('h','t'), "Haiti", 0,0,0 }, +{ IDX_2C('h','u'), "Macaristan", 0,0,0 }, +{ IDX_2C('i','d'), "Endonezya", 0,0,0 }, +{ IDX_2C('i','e'), "Irlanda", 0,0,0 }, +{ IDX_2C('i','l'), "Israil", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "Hindistan", 0,0,0 }, +{ IDX_2C('i','o'), "Ingiliz-Hint Okyanis Bolgesi", 0,0,0 }, +{ IDX_2C('i','q'), "Irak", 0,0,0 }, +{ IDX_2C('i','r'), "Iran", 0,0,0 }, +{ IDX_2C('i','s'), "Izlanda", 0,0,0 }, +{ IDX_2C('i','t'), "Italya", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), "Jamaika", 0,0,0 }, +{ IDX_2C('j','o'), "Urdun", 0,0,0 }, +{ IDX_2C('j','p'), "Japonya", 0,0,0 }, +{ IDX_2C('k','e'), "Kenya", 0,0,0 }, +{ IDX_2C('k','g'), "Kirgizistan", 0,0,0 }, +{ IDX_2C('k','h'), "Kambocya", 0,0,0 }, +{ IDX_2C('k','i'), "Kiribati", 0,0,0 }, +{ IDX_2C('k','m'), "Comoros", 0,0,0 }, +{ IDX_2C('k','n'), "Saint Kitts and Nevis", 0,0,0 }, +{ IDX_2C('k','p'), "Kore (Kuzey)", 0,0,0 }, +{ IDX_2C('k','r'), "Kore (Guney)", 0,0,0 }, +{ IDX_2C('k','w'), "Kuveyt", 0,0,0 }, +{ IDX_2C('k','y'), "Cayman Islands", 0,0,0 }, +{ IDX_2C('k','z'), "Kazakhistan", 0,0,0 }, +{ IDX_2C('l','a'), "Laos", 0,0,0 }, +{ IDX_2C('l','b'), "Lubnan", 0,0,0 }, +{ IDX_2C('l','c'), "Saint Lucia", 0,0,0 }, +{ IDX_2C('l','i'), "Liechtenstein", 0,0,0 }, +{ IDX_2C('l','k'), "Sri Lanka", 0,0,0 }, +{ IDX_2C('l','r'), "Liberya", 0,0,0 }, +{ IDX_2C('l','s'), "Lesotho", 0,0,0 }, +{ IDX_2C('l','t'), "Litvanya", 0,0,0 }, +{ IDX_2C('l','u'), "Luxemburg", 0,0,0 }, +{ IDX_2C('l','v'), "Latvia", 0,0,0 }, +{ IDX_2C('l','y'), "Libya", 0,0,0 }, +{ IDX_2C('m','a'), "Moroko", 0,0,0 }, +{ IDX_2C('m','c'), "Monako", 0,0,0 }, +{ IDX_2C('m','d'), "Moldova", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), "Madagascar", 0,0,0 }, +{ IDX_2C('m','h'), "Marshall Adalari", 0,0,0 }, +{ IDX_2C('m','k'), "Makedonya", 0,0,0 }, +{ IDX_2C('m','l'), "Mali", 0,0,0 }, +{ IDX_2C('m','m'), "Myanmar", 0,0,0 }, +{ IDX_2C('m','n'), "Mongolya", 0,0,0 }, +{ IDX_2C('m','o'), "Macau", 0,0,0 }, +{ IDX_2C('m','p'), "Kuzey Mariana Adalari", 0,0,0 }, +{ IDX_2C('m','q'), "Martinik", 0,0,0 }, +{ IDX_2C('m','r'), "Moritanya", 0,0,0 }, +{ IDX_2C('m','s'), "Montserrat", 0,0,0 }, +{ IDX_2C('m','t'), "Malta", 0,0,0 }, +{ IDX_2C('m','u'), "Mauritius", 0,0,0 }, +{ IDX_2C('m','v'), "Maldivler", 0,0,0 }, +{ IDX_2C('m','w'), "Malawi", 0,0,0 }, +{ IDX_2C('m','x'), "Meksika", 0,0,0 }, +{ IDX_2C('m','y'), "Malezya", 0,0,0 }, +{ IDX_2C('m','z'), "Mozambik", 0,0,0 }, +{ IDX_2C('n','a'), "Namibya", 0,0,0 }, +{ IDX_2C('n','c'), "Yeni Kaledonya", 0,0,0 }, +{ IDX_2C('n','e'), "Niger", 0,0,0 }, +{ IDX_2C('n','f'), "Norfolk Adalari", 0,0,0 }, +{ IDX_2C('n','g'), "Nijerya", 0,0,0 }, +{ IDX_2C('n','i'), "Nikaragua", 0,0,0 }, +{ IDX_2C('n','l'), "Hollanda", 0,0,0 }, +{ IDX_2C('n','o'), "Norvec", 0,0,0 }, +{ IDX_2C('n','p'), "Nepal", 0,0,0 }, +{ IDX_2C('n','r'), "Nauru", 0,0,0 }, +{ IDX_2C('n','u'), "Niue", 0,0,0 }, +{ IDX_2C('n','z'), "Yeni Zellanda", 0,0,0 }, +{ IDX_2C('o','m'), "Umman", 0,0,0 }, +{ IDX_2C('p','a'), "Panama", 0,0,0 }, +{ IDX_2C('p','e'), "Peru", 0,0,0 }, +{ IDX_2C('p','f'), "Fransiz Polinezyasi", 0,0,0 }, +{ IDX_2C('p','g'), "Papua Yeni Gine", 0,0,0 }, +{ IDX_2C('p','h'), "Filipinler", 0,0,0 }, +{ IDX_2C('p','k'), "Pakistan", 0,0,0 }, +{ IDX_2C('p','l'), "Polonya", 0,0,0 }, +{ IDX_2C('p','m'), "St. Pierre and Miquelon", 0,0,0 }, +{ IDX_2C('p','n'), "Pitcairn", 0,0,0 }, +{ IDX_2C('p','r'), "Porto Riko", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "Portekiz", 0,0,0 }, +{ IDX_2C('p','w'), "Palau", 0,0,0 }, +{ IDX_2C('p','y'), "Paraguay", 0,0,0 }, +{ IDX_2C('q','a'), "Katar", 0,0,0 }, +{ IDX_2C('r','e'), "Reunion", 0,0,0 }, +{ IDX_2C('r','o'), "Romanya", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Rus Federasyonu", 0,0,0 }, +{ IDX_2C('r','w'), "Ruanda", 0,0,0 }, +{ IDX_2C('s','a'), "Suudi Arabistan", 0,0,0 }, +{ IDX_2C('s','b'), "Solomon Adalari", 0,0,0 }, +{ IDX_2C('s','c'), "Seychelles", 0,0,0 }, +{ IDX_2C('s','d'), "Sudan", 0,0,0 }, +{ IDX_2C('s','e'), "Isvec", 0,0,0 }, +{ IDX_2C('s','g'), "Singapur", 0,0,0 }, +{ IDX_2C('s','h'), "St. Helena", 0,0,0 }, +{ IDX_2C('s','i'), "Slovenya", 0,0,0 }, +{ IDX_2C('s','j'), "Svalbard ve Jan Mayen Adalari", 0,0,0 }, +{ IDX_2C('s','k'), "Slovak Cumhuriyeti", 0,0,0 }, +{ IDX_2C('s','l'), "Sierra Leone", 0,0,0 }, +{ IDX_2C('s','m'), "San Marino", 0,0,0 }, +{ IDX_2C('s','n'), "Senegal", 0,0,0 }, +{ IDX_2C('s','o'), "Somali", 0,0,0 }, +{ IDX_2C('s','r'), "Surinam", 0,0,0 }, +{ IDX_2C('s','t'), "Sao Tome and Principe", 0,0,0 }, +{ IDX_2C('s','u'), "SSCB (eski)", 0,0,0 }, +{ IDX_2C('s','v'), "El Salvador", 0,0,0 }, +{ IDX_2C('s','y'), "Suriye", 0,0,0 }, +{ IDX_2C('s','z'), "Swaziland", 0,0,0 }, +{ IDX_2C('t','c'), "Turks ve Caicos Adalari", 0,0,0 }, +{ IDX_2C('t','d'), "Cad", 0,0,0 }, +{ IDX_2C('t','f'), "Fransiz Guney Bolgeleri", 0,0,0 }, +{ IDX_2C('t','g'), "Togo", 0,0,0 }, +{ IDX_2C('t','h'), "Tayland", 0,0,0 }, +{ IDX_2C('t','j'), "Tacikistan", 0,0,0 }, +{ IDX_2C('t','k'), "Tokelau", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), "Turkmenistan", 0,0,0 }, +{ IDX_2C('t','n'), "Tunus", 0,0,0 }, +{ IDX_2C('t','o'), "Tonga", 0,0,0 }, +{ IDX_2C('t','p'), "Dogu Timor", 0,0,0 }, +{ IDX_2C('t','r'), "Turkiye", 0,0,0 }, +{ IDX_2C('t','t'), "Trinidad ve Tobago", 0,0,0 }, +{ IDX_2C('t','v'), "Tuvalu", 0,0,0 }, +{ IDX_2C('t','w'), "Tayvan", 0,0,0 }, +{ IDX_2C('t','z'), "Tanzanya", 0,0,0 }, +{ IDX_2C('u','a'), "Ukrayna", 0,0,0 }, +{ IDX_2C('u','g'), "Uganda", 0,0,0 }, +{ IDX_2C('u','k'), "Ingiltere", 0,0,0 }, +{ IDX_2C('u','m'), "US Minor Outlying Adalari", 0,0,0 }, +{ IDX_2C('u','s'), "United States", 0,0,0 }, +{ IDX_2C('u','y'), "Uruguay", 0,0,0 }, +{ IDX_2C('u','z'), "Uzbekistan", 0,0,0 }, +{ IDX_2C('v','a'), "Vatican Sehiri Devleti (Kutsal Deniz)", 0,0,0 }, +{ IDX_2C('v','c'), "Saint Vincent ve Grenadines", 0,0,0 }, +{ IDX_2C('v','e'), "Venezuela", 0,0,0 }, +{ IDX_2C('v','g'), "Virgin Adalari (British)", 0,0,0 }, +{ IDX_2C('v','i'), "Virgin Adalari (U.S.)", 0,0,0 }, +{ IDX_2C('v','n'), "Vietnam", 0,0,0 }, +{ IDX_2C('v','u'), "Vanuatu", 0,0,0 }, +{ IDX_2C('w','f'), "Wallis ve Futuna Adalari", 0,0,0 }, +{ IDX_2C('w','s'), "Samoa", 0,0,0 }, +{ IDX_2C('y','e'), "Yemen", 0,0,0 }, +{ IDX_2C('y','t'), "Mayotte", 0,0,0 }, +{ IDX_2C('y','u'), "Yugoslavya", 0,0,0 }, +{ IDX_2C('z','a'), "Guney Afrika", 0,0,0 }, +{ IDX_2C('z','m'), "Zambia", 0,0,0 }, +{ IDX_2C('z','w'), "Zimbabve", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/lang/webalizer_lang.ukrainian b/webalizer-2.23-08/lang/webalizer_lang.ukrainian new file mode 100644 index 0000000..ded23a8 --- /dev/null +++ b/webalizer-2.23-08/lang/webalizer_lang.ukrainian @@ -0,0 +1,638 @@ +/* + webalizer_lang.ukrainian + + Webalizer V2.0x Language Support file for English. + 15-May-1998 by Bradford L. Barrett (brad@mrunix.net) + 31-May-1998 Modified for level 1.1 support (brad@mrunix.net) + 23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net) + 08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org) + 28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net) + 16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net) + 17-May-2001 Translated by Mike Futerko (mike@LITech.lviv.ua) + 26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net) + 26-May-2008 Modified for level 2.2 support (brad@mrunix.net) + + + Language files are named using the following convention: + + webalizer_lang.LANGUAGE + + where 'LANGUAGE' is the name of the language the file is + translated into (ie: webalizer_lang.russian for russian). + Either copy the desired language file to webalizer_lang.h + or create a symbolic link, then re-compile. + + If you translate this file into a different language, please + send a copy to brad@mrunix.net. + + Note: to use this translation, your GD should be able to display + the right Cyrillic chars. Who is require GD patch mail to: + mike@LITech.lviv.ua + +*/ + +/***********************************************************************/ +/* DEFINE LANGUAGE NAME here */ +/***********************************************************************/ + +char *language = "Ukrainian"; +char *langcode = "uk"; + +/***********************************************************************/ +/* */ +/* Informational messages */ +/* */ +/* These messages are only displayed while The Webalizer is being run, */ +/* usually to the screen, and are not part of the HTML output. */ +/* */ +/***********************************************************************/ + +/* these are only used in timing totals */ +/* Format: XXX records (XXX ignored, XXX bad) in X.XX seconds */ +char *msg_records = "records"; +char *msg_addresses="addresses"; +char *msg_ignored = "ignored"; +char *msg_bad = "bad"; +char *msg_in = "in"; +char *msg_seconds = "seconds"; + +/* progress and setup error messages */ +char *msg_log_err = "Error: Can't open log file"; +char *msg_log_use = "Using logfile"; +char *msg_dir_err = "Error: Can't change directory to"; +char *msg_dir_use = "Creating output in"; +char *msg_cur_dir = "current directory"; +char *msg_hostname= "Hostname for reports is"; +char *msg_ign_hist= "Ignoring previous history..."; +char *msg_no_hist = "History file not found..."; +char *msg_get_hist= "Reading history file..."; +char *msg_put_hist= "Saving history information..."; +char *msg_hist_err= "Error: Unable to write history file"; +char *msg_bad_hist= "Error: Ignoring invalid history record"; +char *msg_bad_conf= "Error: Unable to open configuration file"; +char *msg_bad_key = "Warning: Invalid keyword"; +char *msg_bad_date= "Error: Skipping record (bad date)"; +char *msg_ign_nscp= "Skipping Netscape header record"; +char *msg_bad_rec = "Skipping bad record"; +char *msg_no_vrec = "No valid records found!"; +char *msg_gen_rpt = "Generating report for"; +char *msg_gen_sum = "Generating summary report"; +char *msg_get_data= "Reading previous run data.."; +char *msg_put_data= "Saving current run data..."; +char *msg_no_data = "Previous run data not found..."; +char *msg_bad_data= "Error: Unable to restore run data"; +char *msg_data_err= "Error: Unable to save current run data"; +char *msg_dup_data= "Warning: Possible duplicate data found"; + +/* DNS Stuff */ +char *msg_dns_nocf= "No cache file specified, aborting..."; +char *msg_dns_nodb= "Error: Unable to open DNS cache file"; +char *msg_dns_nolk= "Error: Unable to lock DNS cache file"; +char *msg_dns_usec= "Using DNS cache file"; +char *msg_dns_rslv= "DNS Lookup"; +char *msg_dns_none= "None to process"; +char *msg_dns_abrt= "DNS support not present, aborting..."; + +/* Geolocation stuff */ +char *msg_geo_open= "Error opening file"; +char *msg_geo_use = "Using"; +char *msg_geo_nolu= "lookups disabled"; +char *msg_geo_dflt= "default"; + +/* memory allocation errors */ +char *msg_nomem_ts= "Can't allocate enough memory, Top Sites disabled!"; +char *msg_nomem_tr= "Can't allocate enough memory, Top Referrers disabled!"; +char *msg_nomem_tu= "Can't allocate enough memory, Top URLs disabled!"; +char *msg_nomem_tc= "Can't allocate enough memory, Top Countries disabled!"; +char *msg_nomem_ta= "Can't allocate enough memory, Top User Agents disabled!"; +char *msg_nomem_tsr="Can't allocate enough memory, Top Search Strings disabled!"; +char *msg_nomem_ti= "Can't allocate enough memory, Top Usernames disabled!"; +char *msg_nomem_dh= "Error adding host node (daily), skipping"; +char *msg_nomem_mh= "Error adding host node (monthly), skipping"; +char *msg_nomem_u = "Error adding URL node, skipping"; +char *msg_nomem_a = "Error adding User Agent node, skipping"; +char *msg_nomem_r = "Error adding Referrer node, skipping"; +char *msg_nomem_sc= "Error adding Search String Node, skipping"; +char *msg_nomem_i = "Error adding Username node, skipping"; + +/* log record errors */ +char *msg_big_rec = "Error: Skipping oversized log record"; +char *msg_big_host= "Warning: Truncating oversized hostname"; +char *msg_big_date= "Warning: Truncating oversized date field"; +char *msg_big_req = "Warning: Truncating oversized request field"; +char *msg_big_ref = "Warning: Truncating oversized referrer field"; +char *msg_big_user= "Warning: Truncating oversized username"; +char *msg_big_one = "Warning: String exceeds storage size"; + +/* misc errors */ +char *msg_no_open = "Error: Unable to open file"; + +/* Help display... */ +char *h_usage1 = "Usage"; +char *h_usage2 = "[options] [log file]"; +char *h_msg[]= { + "-h = print this help message" , + "-V = print version information" , + "-v = be verbose" , + "-d = print additional debug info" , + "-F type = Log type. type= (clf | ftp | squid | w3c)", + "-f = Fold sequence errors" , + "-i = ignore history file" , + "-p = preserve state (incremental)" , + "-b = ignore state (incremental)" , + "-q = supress informational messages" , + "-Q = supress _ALL_ messages" , + "-Y = supress country graph" , + "-G = supress hourly graph" , + "-H = supress hourly stats" , + "-L = supress color coded graph legends" , + "-l num = use num background lines on graph" , + "-m num = Visit timout value (seconds)" , + "-T = print timing information" , + "-c file = use configuration file 'file'" , + "-n name = hostname to use" , + "-o dir = output directory to use" , + "-t name = report title 'name'" , + "-a name = hide user agent 'name'" , + "-r name = hide referrer 'name'" , + "-s name = hide site 'name'" , + "-u name = hide URL 'name'" , + "-x name = Use filename extension 'name'" , + "-O name = Omit page 'name'" , + "-P name = Page type extension 'name'" , + "-I name = Index alias 'name'" , + "-K num = num months in summary table" , + "-k num = num months in summary graph" , + "-A num = Display num top agents" , + "-C num = Display num top countries" , + "-R num = Display num top referrers" , + "-S num = Display num top sites" , + "-U num = Display num top URLs" , + "-e num = Display num top Entry Pages" , + "-E num = Display num top Exit Pages" , + "-g num = Group Domains to 'num' levels" , + "-X = Hide individual sites" , + "-z dir = Use country flags in 'dir'" , +#ifdef USE_DNS + "-D name = Use DNS Cache file 'name'" , + "-N num = Number of DNS processes (0=disable)" , + "-j = Enable native GeoDB lookups" , + "-J name = Use GeoDB database 'name'" , +#endif +#ifdef USE_GEOIP + "-w = Enable GeoIP lookups" , + "-W name = Use GeoIP database 'name'" , +#endif + NULL}; + +/***********************************************************************/ +/* */ +/* HTML strings */ +/* */ +/* These strings are used as part of the HTML output generated by The */ +/* Webalizer. */ +/* */ +/***********************************************************************/ + +/* header strings */ +char *msg_hhdr_sp = "Ҧ "; +char *msg_hhdr_gt = ""; + +/* main index strings */ +char *msg_main_us = " "; +/* char *msg_main_per= "Φ 12 ͦæ"; */ +char *msg_main_per= "ͦ Ц"; +char *msg_main_sum= "ͦ Ц"; +char *msg_main_da = " "; +char *msg_main_mt = " ͦ"; + +/* month HTML page strings */ +char *msg_hmth_du = " "; +char *msg_hmth_hu = " "; + +/* table header strings */ +char *msg_h_by = ""; +char *msg_h_avg = "."; +char *msg_h_max = "."; +char *msg_h_total = ""; +char *msg_h_totals= ""; +char *msg_h_day = ""; +char *msg_h_mth = "ͦ"; +char *msg_h_hour = ""; +char *msg_h_hits = "Ԧ"; +char *msg_h_pages = "."; +char *msg_h_visits= "צצ."; +char *msg_h_files = "̦"; +char *msg_h_sites = "Ԧ"; +char *msg_h_xfer = ""; +char *msg_h_hname = "' "; +char *msg_h_url = "URL"; +char *msg_h_agent = " "; +char *msg_h_ref = ""; +char *msg_h_ctry = ""; +char *msg_h_search= "Ҧ "; +char *msg_h_uname = "' "; + +/* links along top of page */ +char *msg_hlnk_ds = " "; +char *msg_hlnk_hs = " "; +char *msg_hlnk_u = "URL'"; +char *msg_hlnk_s = ""; +char *msg_hlnk_a = " "; +char *msg_hlnk_c = ""; +char *msg_hlnk_r = ""; +char *msg_hlnk_en = "צ Ҧ"; +char *msg_hlnk_ex = "צ Ҧ"; +char *msg_hlnk_sr = ""; +char *msg_hlnk_i = "ަ"; + +/* monthly total table */ +char *msg_mtot_ms = " "; +char *msg_mtot_th = " Ԧ"; +char *msg_mtot_tf = " ̦"; +char *msg_mtot_tx = " "; +char *msg_mtot_us = " Φ Ԧ"; +char *msg_mtot_ur = " Φ "; +char *msg_mtot_ua = " Φ Ԧ "; +char *msg_mtot_uu = " Φ URL'"; +char *msg_mtot_ui = " Φ "; +char *msg_mtot_mhd= " "; +char *msg_mtot_mhh= " "; +char *msg_mtot_mfd= "̦ "; +char *msg_mtot_mpd= "Ҧ "; +char *msg_mtot_msd= "Sites per Day"; +char *msg_mtot_mvd= "צ "; +char *msg_mtot_mkd= "K "; +char *msg_mtot_rc = " צצĦ"; + +/* daily total table */ +char *msg_dtot_ds = " "; + +/* hourly total table */ +char *msg_htot_hs = " "; + +/* country pie chart */ +char *msg_ctry_use= "C "; + +/* top tables */ +/* Formatted as "Top xxx of xxx Total something" */ +char *msg_top_top = "ۦ"; +char *msg_top_of = ""; +char *msg_top_s = "Ԧ"; +char *msg_top_u = "URL'"; +char *msg_top_r = ""; +char *msg_top_a = "Ԧ "; +char *msg_top_c = ""; +char *msg_top_en = " Ҧ"; +char *msg_top_ex = "˦ Ҧ"; +char *msg_top_sr = "Ҧ "; +char *msg_top_i = " "; +char *msg_v_sites = " Ӧ "; +char *msg_v_urls = " Ӧ URL'"; +char *msg_v_refs = " Ӧ "; +char *msg_v_agents= " Ӧ "; +char *msg_v_search= " Ӧ cҦ "; +char *msg_v_users = " Ӧ ަ"; + +/* short month names MUST BE 3 CHARS in size... pad if needed*/ +char *s_month[12]={ "", "", "", + "צ", "", "", + "", "", "", + "", "", ""}; + +/* long month names - can be any length */ +char *l_month[12]={ "", "", "", "צ", + "", "", "", "", + "", "", "", ""}; + +/* response code descriptions... order IS important! */ +struct response_code response[] = + { { "צ צצĦ", 0 }, + { "Code 100 - Continue", 0 }, + { "Code 101 - Switching Protocols", 0 }, + { "Code 200 - OK", 0 }, + { "Code 201 - Created", 0 }, + { "Code 202 - Accepted", 0 }, + { "Code 203 - Non-Authoritative Information", 0 }, + { "Code 204 - No Content", 0 }, + { "Code 205 - Reset Content", 0 }, + { "Code 206 - Partial Content", 0 }, + { "Code 300 - Multiple Choices", 0 }, + { "Code 301 - Moved Permanently", 0 }, + { "Code 302 - Found", 0 }, + { "Code 303 - See Other", 0 }, + { "Code 304 - Not Modified", 0 }, + { "Code 305 - Use Proxy", 0 }, + { "Code 307 - Moved Temporarily", 0 }, + { "Code 400 - Bad Request", 0 }, + { "Code 401 - Unauthorized", 0 }, + { "Code 402 - Payment Required", 0 }, + { "Code 403 - Forbidden", 0 }, + { "Code 404 - Not Found", 0 }, + { "Code 405 - Method Not Allowed", 0 }, + { "Code 406 - Not Acceptable", 0 }, + { "Code 407 - Proxy Authentication Required", 0 }, + { "Code 408 - Request Timeout", 0 }, + { "Code 409 - Conflict", 0 }, + { "Code 410 - Gone", 0 }, + { "Code 411 - Length Required", 0 }, + { "Code 412 - Precondition Failed", 0 }, + { "Code 413 - Request Entity Too Large", 0 }, + { "Code 414 - Request-URI Too Long", 0 }, + { "Code 415 - Unsupported Media Type", 0 }, + { "Code 416 - Requested Range Not Satisfiable", 0 }, + { "Code 417 - Expectation Failed", 0 }, + { "Code 500 - Internal Server Error", 0 }, + { "Code 501 - Not Implemented", 0 }, + { "Code 502 - Bad Gateway", 0 }, + { "Code 503 - Service Unavailable", 0 }, + { "Code 504 - Gateway Timeout", 0 }, + { "Code 505 - HTTP Version Not Supported", 0 } }; + +char *msg_title = " צצ"; +char *msg_h_other = "ۦ"; + +/* Country codes (previously in ctry.h header file) */ + +struct country_code ctry[] = { +{ 0, "'Φ/צͦ", 0,0,0 }, +{ IDX_3C('c','o','m'), "æΦ (com)", 0,0,0 }, +{ IDX_3C('e','d','u'), "צΦ (edu)", 0,0,0 }, +{ IDX_3C('g','o','v'), "צ (gov)", 0,0,0 }, +{ IDX_3C('i','n','t'), "æΦ (int)", 0,0,0 }, +{ IDX_3C('m','i','l'), "צ (mil)", 0,0,0 }, +{ IDX_3C('n','e','t'), "צ (net)", 0,0,0 }, +{ IDX_3C('o','r','g'), "æΦ Φæ (org)", 0,0,0 }, +{ IDX_3C('b','i','z'), "Generic Business (biz)", 0,0,0 }, +{ IDX_3C('c','a','t'), "Catalan Community (cat)", 0,0,0 }, +{ IDX_3C('p','r','o'), "Professional (pro)", 0,0,0 }, +{ IDX_3C('t','e','l'), "Ind. Contact Data (tel)", 0,0,0 }, +{ IDX_4C('a','e','r','o'),"Air Transport Industry (aero)", 0,0,0 }, +{ IDX_4C('a','s','i','a'),"Asia Pacific Community (asia)", 0,0,0 }, +{ IDX_4C('c','o','o','p'),"Cooperative Association (coop)", 0,0,0 }, +{ IDX_4C('i','n','f','o'),"Generic TLD (info)", 0,0,0 }, +{ IDX_4C('j','o','b','s'),"Human Resources (jobs)", 0,0,0 }, +{ IDX_4C('m','o','b','i'),"Generic Mobile TLD (mobi)", 0,0,0 }, +{ IDX_4C('n','a','m','e'),"Individual (name)", 0,0,0 }, +{ IDX_4C('a','r','p','a'),"Address Routing (arpa)", 0,0,0 }, +{ IDX_4C('n','a','t','o')," Nato (nato)", 0,0,0 }, +{ IDX_6C('m','u','s','e','u','m'), "Museums (museum)", 0,0,0 }, +{ IDX_6C('t','r','a','v','e','l'), "Travel Ind. (travel)", 0,0,0 }, +{ IDX_2C('a','c'), "Ascension Island", 0,0,0 }, +{ IDX_2C('a','d'), " (ad)", 0,0,0 }, +{ IDX_2C('a','e'), "'Φ ˦ ͦ (ae)", 0,0,0 }, +{ IDX_2C('a','f'), "Φ (af)", 0,0,0 }, +{ IDX_2C('a','g'), "ҦΦ (ag)", 0,0,0 }, +{ IDX_2C('a','i'), "Ǧ (ai)", 0,0,0 }, +{ IDX_2C('a','l'), "Φ (al)", 0,0,0 }, +{ IDX_2C('a','m'), "Φ (am)", 0,0,0 }, +{ IDX_2C('a','n'), "˦ ˦ (an)", 0,0,0 }, +{ IDX_2C('a','o'), " (ao)", 0,0,0 }, +{ IDX_2C('a','q'), " (aq)", 0,0,0 }, +{ IDX_2C('a','r'), " (ar)", 0,0,0 }, +{ IDX_2C('a','s'), " (as)", 0,0,0 }, +{ IDX_2C('a','t'), "Ҧ (at)", 0,0,0 }, +{ IDX_2C('a','u'), "̦ (au)", 0,0,0 }, +{ IDX_2C('a','w'), " (aw)", 0,0,0 }, +{ IDX_2C('a','x'), "Aland Islands", 0,0,0 }, +{ IDX_2C('a','z'), " (az)", 0,0,0 }, +{ IDX_2C('b','a'), "Φ (ba)", 0,0,0 }, +{ IDX_2C('b','b'), " (bb)", 0,0,0 }, +{ IDX_2C('b','d'), " (bd)", 0,0,0 }, +{ IDX_2C('b','e'), "Ǧ (be)", 0,0,0 }, +{ IDX_2C('b','f'), "˦ (bf)", 0,0,0 }, +{ IDX_2C('b','g'), "Ҧ (bg)", 0,0,0 }, +{ IDX_2C('b','h'), " (bh)", 0,0,0 }, +{ IDX_2C('b','i'), "Ħ (bi)", 0,0,0 }, +{ IDX_2C('b','j'), "Φ (bj)", 0,0,0 }, +{ IDX_2C('b','l'), "Saint Barthelemy", 0,0,0 }, +{ IDX_2C('b','m'), " (bm)", 0,0,0 }, +{ IDX_2C('b','n'), " (bn)", 0,0,0 }, +{ IDX_2C('b','o'), "̦צ (bo)", 0,0,0 }, +{ IDX_2C('b','r'), "̦ (br)", 0,0,0 }, +{ IDX_2C('b','s'), " (bs)", 0,0,0 }, +{ IDX_2C('b','t'), " (bt)", 0,0,0 }, +{ IDX_2C('b','v'), "Ҧ (bv)", 0,0,0 }, +{ IDX_2C('b','w'), " (bw)", 0,0,0 }, +{ IDX_2C('b','y'), " (by)", 0,0,0 }, +{ IDX_2C('b','z'), "̦ (bz)", 0,0,0 }, +{ IDX_2C('c','a'), " (ca)", 0,0,0 }, +{ IDX_2C('c','c'), "צ (cc)", 0,0,0 }, +{ IDX_2C('c','d'), "Congo, Democratic Republic", 0,0,0 }, +{ IDX_2C('c','f'), " ̦ (cf)", 0,0,0 }, +{ IDX_2C('c','g'), " (cg)", 0,0,0 }, +{ IDX_2C('c','h'), "Ҧ (ch)", 0,0,0 }, +{ IDX_2C('c','i'), " Ҧ (ci)", 0,0,0 }, +{ IDX_2C('c','k'), " (cg)", 0,0,0 }, +{ IDX_2C('c','l'), "̦ (cl)", 0,0,0 }, +{ IDX_2C('c','m'), " (cm)", 0,0,0 }, +{ IDX_2C('c','n'), " (cn)", 0,0,0 }, +{ IDX_2C('c','o'), "¦ (co)", 0,0,0 }, +{ IDX_2C('c','r'), " (cr)", 0,0,0 }, +{ IDX_2C('c','u'), " (cu)", 0,0,0 }, +{ IDX_2C('c','v'), " (cv)", 0,0,0 }, +{ IDX_2C('c','x'), "Ҧ (cx)", 0,0,0 }, +{ IDX_2C('c','y'), " (cy)", 0,0,0 }, +{ IDX_2C('c','z'), " ̦ (cz)", 0,0,0 }, +{ IDX_2C('d','e'), " (de)", 0,0,0 }, +{ IDX_2C('d','j'), "Ԧ (dj)", 0,0,0 }, +{ IDX_2C('d','k'), "Φ (dk)", 0,0,0 }, +{ IDX_2C('d','m'), "ͦΦ (dm)", 0,0,0 }, +{ IDX_2C('d','o'), "ͦΦ ̦ (do)", 0,0,0 }, +{ IDX_2C('d','z'), "Ҧ (dz)", 0,0,0 }, +{ IDX_2C('e','c'), " (ec)", 0,0,0 }, +{ IDX_2C('e','e'), "Φ (ee)", 0,0,0 }, +{ IDX_2C('e','g'), " (eg)", 0,0,0 }, +{ IDX_2C('e','h'), "Ȧ (eh)", 0,0,0 }, +{ IDX_2C('e','r'), "Ҧ (er)", 0,0,0 }, +{ IDX_2C('e','s'), "Φ (es)", 0,0,0 }, +{ IDX_2C('e','t'), "ƦЦ (et)", 0,0,0 }, +{ IDX_2C('e','u'), "European Union", 0,0,0 }, +{ IDX_2C('f','i'), "AĦ (fi)", 0,0,0 }, +{ IDX_2C('f','j'), "֦ (fj)", 0,0,0 }, +{ IDX_2C('f','k'), "˦ (fk)", 0,0,0 }, +{ IDX_2C('f','m'), "ڦ (fm)", 0,0,0 }, +{ IDX_2C('f','o'), "˦ (fo)", 0,0,0 }, +{ IDX_2C('f','r'), "æ (fr)", 0,0,0 }, +{ IDX_2C('g','a'), " (ga)", 0,0,0 }, +{ IDX_2C('g','b'), "Φ (gb)", 0,0,0 }, +{ IDX_2C('g','d'), " (gd)", 0,0,0 }, +{ IDX_2C('g','e'), "ڦ (ge)", 0,0,0 }, +{ IDX_2C('g','f'), " (gf)", 0,0,0 }, +{ IDX_2C('g','g'), "Guernsey", 0,0,0 }, +{ IDX_2C('g','h'), " (gh)", 0,0,0 }, +{ IDX_2C('g','i'), " (gi)", 0,0,0 }, +{ IDX_2C('g','l'), "Ħ (gl)", 0,0,0 }, +{ IDX_2C('g','m'), "¦ (gm)", 0,0,0 }, +{ IDX_2C('g','n'), "צ (gn)", 0,0,0 }, +{ IDX_2C('g','p'), " (gp)", 0,0,0 }, +{ IDX_2C('g','q'), "Ҧ צ (gq)", 0,0,0 }, +{ IDX_2C('g','r'), "æ (gr)", 0,0,0 }, +{ IDX_2C('g','s'), ". Ǧ . צ (gs)", 0,0,0 }, +{ IDX_2C('g','t'), " (gt)", 0,0,0 }, +{ IDX_2C('g','u'), " (gu)", 0,0,0 }, +{ IDX_2C('g','w'), "צ- (gw)", 0,0,0 }, +{ IDX_2C('g','y'), " (gy)", 0,0,0 }, +{ IDX_2C('h','k'), " (hk)", 0,0,0 }, +{ IDX_2C('h','m'), " (hm)", 0,0,0 }, +{ IDX_2C('h','n'), " (hn)", 0,0,0 }, +{ IDX_2C('h','r'), "Ԧ (hr)", 0,0,0 }, +{ IDX_2C('h','t'), "Ԧ (ht)", 0,0,0 }, +{ IDX_2C('h','u'), "Φ (hu)", 0,0,0 }, +{ IDX_2C('i','d'), "ڦ (id)", 0,0,0 }, +{ IDX_2C('i','e'), "Ħ (ie)", 0,0,0 }, +{ IDX_2C('i','l'), " (il)", 0,0,0 }, +{ IDX_2C('i','m'), "Isle of Man", 0,0,0 }, +{ IDX_2C('i','n'), "Ħ (in)", 0,0,0 }, +{ IDX_2C('i','o'), "˦ . Ħ Φ (io)",0,0,0 }, +{ IDX_2C('i','q'), " (iq)", 0,0,0 }, +{ IDX_2C('i','r'), " (ir)", 0,0,0 }, +{ IDX_2C('i','s'), "Ħ (is)", 0,0,0 }, +{ IDX_2C('i','t'), "̦ (it)", 0,0,0 }, +{ IDX_2C('j','e'), "Jersey", 0,0,0 }, +{ IDX_2C('j','m'), " (jm)", 0,0,0 }, +{ IDX_2C('j','o'), " (jo)", 0,0,0 }, +{ IDX_2C('j','p'), "Φ (jp)", 0,0,0 }, +{ IDX_2C('k','e'), "Φ (ke)", 0,0,0 }, +{ IDX_2C('k','g'), " (kg)", 0,0,0 }, +{ IDX_2C('k','h'), " (kh)", 0,0,0 }, +{ IDX_2C('k','i'), "ҦԦ (ki)", 0,0,0 }, +{ IDX_2C('k','m'), "˦ (km)", 0,0,0 }, +{ IDX_2C('k','n'), " . צ (kn)", 0,0,0 }, +{ IDX_2C('k','p'), " (Φ) (kp)", 0,0,0 }, +{ IDX_2C('k','r'), " () (kr)", 0,0,0 }, +{ IDX_2C('k','w'), " (kw)", 0,0,0 }, +{ IDX_2C('k','y'), "˦ (ky)", 0,0,0 }, +{ IDX_2C('k','z'), " (kz)", 0,0,0 }, +{ IDX_2C('l','a'), " (la)", 0,0,0 }, +{ IDX_2C('l','b'), " (lb)", 0,0,0 }, +{ IDX_2C('l','c'), " ަ (lc)", 0,0,0 }, +{ IDX_2C('l','i'), " (li)", 0,0,0 }, +{ IDX_2C('l','k'), "Ҧ (lk)", 0,0,0 }, +{ IDX_2C('l','r'), "Ҧ (lr)", 0,0,0 }, +{ IDX_2C('l','s'), " (ls)", 0,0,0 }, +{ IDX_2C('l','t'), " (lt)", 0,0,0 }, +{ IDX_2C('l','u'), " (lu)", 0,0,0 }, +{ IDX_2C('l','v'), "צ (lv)", 0,0,0 }, +{ IDX_2C('l','y'), "צ (ly)", 0,0,0 }, +{ IDX_2C('m','a'), " (ma)", 0,0,0 }, +{ IDX_2C('m','c'), " (mc)", 0,0,0 }, +{ IDX_2C('m','d'), " (md)", 0,0,0 }, +{ IDX_2C('m','e'), "Montenegro", 0,0,0 }, +{ IDX_2C('m','f'), "Saint Martin (French part)", 0,0,0 }, +{ IDX_2C('m','g'), " (mg)", 0,0,0 }, +{ IDX_2C('m','h'), "צ (mh)", 0,0,0 }, +{ IDX_2C('m','k'), "Φ (mk)", 0,0,0 }, +{ IDX_2C('m','l'), "̦ (ml)", 0,0,0 }, +{ IDX_2C('m','m'), " (mm)", 0,0,0 }, +{ IDX_2C('m','n'), "̦ (mn)", 0,0,0 }, +{ IDX_2C('m','o'), " (mo)", 0,0,0 }, +{ IDX_2C('m','p'), "ΦΦ Ҧ˦ (mp)", 0,0,0 }, +{ IDX_2C('m','q'), "ԦΦ (mq)", 0,0,0 }, +{ IDX_2C('m','r'), "Φ (mr)", 0,0,0 }, +{ IDX_2C('m','s'), " (ms)", 0,0,0 }, +{ IDX_2C('m','t'), " (mt)", 0,0,0 }, +{ IDX_2C('m','u'), "Φ (mu)", 0,0,0 }, +{ IDX_2C('m','v'), "Ħ ̦ (mv)", 0,0,0 }, +{ IDX_2C('m','w'), "צ (mw)", 0,0,0 }, +{ IDX_2C('m','x'), " (mx)", 0,0,0 }, +{ IDX_2C('m','y'), "ڦ (my)", 0,0,0 }, +{ IDX_2C('m','z'), "¦ (mz)", 0,0,0 }, +{ IDX_2C('n','a'), "ͦ¦ (na)", 0,0,0 }, +{ IDX_2C('n','c'), " Φ (nc)", 0,0,0 }, +{ IDX_2C('n','e'), " (ne)", 0,0,0 }, +{ IDX_2C('n','f'), "Ҧ (nf)", 0,0,0 }, +{ IDX_2C('n','g'), "Ҧ (ng)", 0,0,0 }, +{ IDX_2C('n','i'), " (ni)", 0,0,0 }, +{ IDX_2C('n','l'), " (nl)", 0,0,0 }, +{ IDX_2C('n','o'), "Ǧ (no)", 0,0,0 }, +{ IDX_2C('n','p'), " (np)", 0,0,0 }, +{ IDX_2C('n','r'), " (nr)", 0,0,0 }, +{ IDX_2C('n','u'), " (nu)", 0,0,0 }, +{ IDX_2C('n','z'), " Ħ (nz)", 0,0,0 }, +{ IDX_2C('o','m'), " (om)", 0,0,0 }, +{ IDX_2C('p','a'), " (pa)", 0,0,0 }, +{ IDX_2C('p','e'), " (pr)", 0,0,0 }, +{ IDX_2C('p','f'), " ̦ڦ (pf)", 0,0,0 }, +{ IDX_2C('p','g'), " צ (pg)", 0,0,0 }, +{ IDX_2C('p','h'), "̦Ц (ph)", 0,0,0 }, +{ IDX_2C('p','k'), "˦ (pk)", 0,0,0 }, +{ IDX_2C('p','l'), " (pl)", 0,0,0 }, +{ IDX_2C('p','m'), "Ҧ . (pm)", 0,0,0 }, +{ IDX_2C('p','n'), " (pn)", 0,0,0 }, +{ IDX_2C('p','r'), " (pr)", 0,0,0 }, +{ IDX_2C('p','s'), "Palestinian Territory, Occupied", 0,0,0 }, +{ IDX_2C('p','t'), "̦ (pt)", 0,0,0 }, +{ IDX_2C('p','w'), " (pw)", 0,0,0 }, +{ IDX_2C('p','y'), " (py)", 0,0,0 }, +{ IDX_2C('q','a'), " (qa)", 0,0,0 }, +{ IDX_2C('r','e'), "Ҧ (re)", 0,0,0 }, +{ IDX_2C('r','o'), "Φ (po)", 0,0,0 }, +{ IDX_2C('r','s'), "Serbia", 0,0,0 }, +{ IDX_2C('r','u'), "Ӧ æ (ru)", 0,0,0 }, +{ IDX_2C('r','w'), " (rw)", 0,0,0 }, +{ IDX_2C('s','a'), "Ħ צ (sa)", 0,0,0 }, +{ IDX_2C('s','b'), "צ (sb)", 0,0,0 }, +{ IDX_2C('s','c'), "˦ (sc)", 0,0,0 }, +{ IDX_2C('s','d'), " (sd)", 0,0,0 }, +{ IDX_2C('s','e'), "æ (se)", 0,0,0 }, +{ IDX_2C('s','g'), " (sg)", 0,0,0 }, +{ IDX_2C('s','h'), "Ҧ . (sh)", 0,0,0 }, +{ IDX_2C('s','i'), "Φ (si)", 0,0,0 }, +{ IDX_2C('s','j'), " - (sj)", 0,0,0 }, +{ IDX_2C('s','k'), "̦ ˦ (sk)", 0,0,0 }, +{ IDX_2C('s','l'), " (sl)", 0,0,0 }, +{ IDX_2C('s','m'), " Ҧ (sm)", 0,0,0 }, +{ IDX_2C('s','n'), " (sn)", 0,0,0 }, +{ IDX_2C('s','o'), "̦ (so)", 0,0,0 }, +{ IDX_2C('s','r'), "Ҧ (sr)", 0,0,0 }, +{ IDX_2C('s','t'), " צ (st)",0,0,0 }, +{ IDX_2C('s','u'), " (Φ, su)", 0,0,0 }, +{ IDX_2C('s','v'), " (sv)", 0,0,0 }, +{ IDX_2C('s','y'), "Ҧ (sy)", 0,0,0 }, +{ IDX_2C('s','z'), "ڦ (sz)", 0,0,0 }, +{ IDX_2C('t','c'), " (tc)", 0,0,0 }, +{ IDX_2C('t','d'), " (td)", 0,0,0 }, +{ IDX_2C('t','f'), "Φ ˦ Ҧ (tf)", 0,0,0 }, +{ IDX_2C('t','g'), " (tg)", 0,0,0 }, +{ IDX_2C('t','h'), " (th)", 0,0,0 }, +{ IDX_2C('t','j'), " (tj)", 0,0,0 }, +{ IDX_2C('t','k'), " (tk)", 0,0,0 }, +{ IDX_2C('t','l'), "Timor-Leste", 0,0,0 }, +{ IDX_2C('t','m'), " (tm)", 0,0,0 }, +{ IDX_2C('t','n'), "Φ (tn)", 0,0,0 }, +{ IDX_2C('t','o'), " (to)", 0,0,0 }, +{ IDX_2C('t','p'), "Ȧ (tp)", 0,0,0 }, +{ IDX_2C('t','r'), " (tr)", 0,0,0 }, +{ IDX_2C('t','t'), "̦ ҦΦ (tt)",0,0,0 }, +{ IDX_2C('t','v'), " (tv)", 0,0,0 }, +{ IDX_2C('t','w'), " (tw)", 0,0,0 }, +{ IDX_2C('t','z'), "Φ (tz)", 0,0,0 }, +{ IDX_2C('u','a'), " (ua)", 0,0,0 }, +{ IDX_2C('u','g'), " (ug)", 0,0,0 }, +{ IDX_2C('u','k'), "Φ (uk)", 0,0,0 }, +{ IDX_2C('u','m'), "̦ ΦΦ (um)", 0,0,0 }, +{ IDX_2C('u','s'), "CΦ (us)", 0,0,0 }, +{ IDX_2C('u','y'), " (uy)", 0,0,0 }, +{ IDX_2C('u','z'), "E (uz)", 0,0,0 }, +{ IDX_2C('v','a'), "Ԧ (va)", 0,0,0 }, +{ IDX_2C('v','c'), " . Ħ (vc)", 0,0,0 }, +{ IDX_2C('v','e'), " (ve)", 0,0,0 }, +{ IDX_2C('v','g'), "˦ (˦, vg)", 0,0,0 }, +{ IDX_2C('v','i'), "˦ (, vi)", 0,0,0 }, +{ IDX_2C('v','n'), "' (vn)", 0,0,0 }, +{ IDX_2C('v','u'), " (vu)", 0,0,0 }, +{ IDX_2C('w','f'), " ̦ (wf)", 0,0,0 }, +{ IDX_2C('w','s'), " (ws)", 0,0,0 }, +{ IDX_2C('y','e'), " (ye)", 0,0,0 }, +{ IDX_2C('y','t'), "Ҧ (yt)", 0,0,0 }, +{ IDX_2C('y','u'), "צ (, yu)", 0,0,0 }, +{ IDX_2C('z','a'), " (za)", 0,0,0 }, +{ IDX_2C('z','m'), "¦ (zm)", 0,0,0 }, +{ IDX_2C('z','w'), " (zw)", 0,0,0 }, +{ IDX_2C('a','1'), "Anonymous Proxy", 0,0,0 }, +{ IDX_2C('a','2'), "Satellite Provider", 0,0,0 }, +{ IDX_2C('o','1'), "Other", 0,0,0 }, +{ IDX_2C('a','p'), "Asia/Pacific Region", 0,0,0 }, +{ IDX_3C('l','a','n'), "Local Network (lan)", 0,0,0 }, +{ 0 , NULL, 0,0,0 }}; diff --git a/webalizer-2.23-08/linklist.c b/webalizer-2.23-08/linklist.c new file mode 100644 index 0000000..f541ae1 --- /dev/null +++ b/webalizer-2.23-08/linklist.c @@ -0,0 +1,305 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include /* normal stuff */ +#include +#include + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#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 separated */ + while (!isspace((unsigned char)*name) && *name!=0) name++; + else + while (*name!=sep && *name!=0) name++; /* Quote separated */ + + if (*name==0) name=temp_buf; + else + { + *name++=0; + while (isspace((unsigned char)*name)&&*name!=0) name++; + if (*name==0) name=temp_buf; + } + + if ( (newptr = new_glist(temp_buf, name)) != NULL) + { + if (*list==NULL) *list=newptr; + else + { + cptr=pptr=*list; + while(cptr!=NULL) { pptr=cptr; cptr=cptr->next; }; + pptr->next = newptr; + } + } + return newptr==NULL; +} + +/*********************************************/ +/* DEL_GLIST - delete FIFO linked list */ +/*********************************************/ + +void del_glist(GLISTPTR *list) +{ + GLISTPTR cptr,nptr; + + cptr=*list; + while (cptr!=NULL) + { + nptr=cptr->next; + free(cptr); + cptr=nptr; + } +} + +/*********************************************/ +/* ISINLIST - Test if string is in list */ +/*********************************************/ + +char *isinlist(NLISTPTR list, char *str) +{ + NLISTPTR lptr; + + lptr=list; + while (lptr!=NULL) + { + if (isinstr(str,lptr->string)) return lptr->string; + lptr=lptr->next; + } + return NULL; +} + +/*********************************************/ +/* ISINGLIST - Test if string is in list */ +/*********************************************/ + +char *isinglist(GLISTPTR list, char *str) +{ + GLISTPTR lptr; + + lptr=list; + while (lptr!=NULL) + { + if (isinstr(str,lptr->string)) return lptr->name; + lptr=lptr->next; + } + return NULL; +} + +/*********************************************/ +/* ISINSTR - Scan for string in string */ +/*********************************************/ + +int isinstr(char *str, char *cp) +{ + char *cp1,*cp2; + + cp1=(cp+strlen(cp))-1; + if (*cp=='*') + { + /* if leading wildcard, start from end */ + cp2=str+strlen(str)-1; + while ( (cp1!=cp) && (cp2!=str)) + { + if (*cp1=='*') return 1; + if (*cp1--!=*cp2--) return 0; + } + if (cp1==cp) return 1; + else return 0; + } + else + { + /* if no leading/trailing wildcard, just strstr */ + if (*cp1!='*') return(strstr(str,cp)!=NULL); + /* otherwise do normal forward scan */ + cp1=cp; cp2=str; + while (*cp2!='\0') + { + if (*cp1=='*') return 1; + if (*cp1++!=*cp2++) return 0; + } + if (*cp1=='*') return 1; + else return 0; + } +} diff --git a/webalizer-2.23-08/linklist.h b/webalizer-2.23-08/linklist.h new file mode 100644 index 0000000..38e360c --- /dev/null +++ b/webalizer-2.23-08/linklist.h @@ -0,0 +1,50 @@ +#ifndef _LINKLIST_H +#define _LINKLIST_H + +struct nlist { char string[MAXKVAL]; /* list struct for HIDE items */ + struct nlist *next; }; +typedef struct nlist *NLISTPTR; + +struct glist { char string[MAXKVAL]; /* list struct for GROUP items */ + char name[MAXKVAL]; + struct glist *next; }; +typedef struct glist *GLISTPTR; + +extern GLISTPTR group_sites ; /* "group" lists */ +extern GLISTPTR group_urls ; +extern GLISTPTR group_refs ; +extern GLISTPTR group_agents ; +extern GLISTPTR group_users ; +extern NLISTPTR hidden_sites ; /* "hidden" lists */ +extern NLISTPTR hidden_urls ; +extern NLISTPTR hidden_refs ; +extern NLISTPTR hidden_agents ; +extern NLISTPTR hidden_users ; +extern NLISTPTR ignored_sites ; /* "Ignored" lists */ +extern NLISTPTR ignored_urls ; +extern NLISTPTR ignored_refs ; +extern NLISTPTR ignored_agents; +extern NLISTPTR ignored_users ; +extern NLISTPTR include_sites ; /* "Include" lists */ +extern NLISTPTR include_urls ; +extern NLISTPTR include_refs ; +extern NLISTPTR include_agents; +extern NLISTPTR include_users ; +extern NLISTPTR index_alias ; /* index. aliases */ +extern NLISTPTR html_pre ; /* before anything else :) */ +extern NLISTPTR html_head ; /* top HTML code */ +extern NLISTPTR html_body ; /* body HTML code */ +extern NLISTPTR html_post ; /* middle HTML code */ +extern NLISTPTR html_tail ; /* tail HTML code */ +extern NLISTPTR html_end ; /* after everything else */ +extern NLISTPTR page_type ; /* page view types */ +extern NLISTPTR omit_page ; /* pages not counted */ +extern NLISTPTR page_prefix ; /* page view prefixes */ +extern GLISTPTR search_list ; /* Search engine list */ + +extern char *isinlist(NLISTPTR, char *); /* scan list for str */ +extern char *isinglist(GLISTPTR, char *); /* scan glist for str */ +extern int add_nlist(char *, NLISTPTR *); /* add list item */ +extern int add_glist(char *, GLISTPTR *); /* add group list item */ + +#endif /* _LINKLIST_H */ diff --git a/webalizer-2.23-08/linklist.o b/webalizer-2.23-08/linklist.o new file mode 100644 index 0000000000000000000000000000000000000000..658c043de3f346cd944e84f872fbdd388816637d GIT binary patch literal 5760 zcmbuCeQaA-6~M2Zl$p4(la@kI+r^9y+CojtXqWDz#Ld@D@w!1$)Yb`(6F(=`9NV&= z+hhVYm7S?iUbHZQHmOMT&uL=P{;0w1C$qU0B6PoXym2N&y7xWY@Dgjsr06!W{W z2$Y3;_4W7ywD(sT3klu4F#_a5>Ve*^mLy)Sx;zXoN%`UAKA{Z;`~)$I$# zZD`6Khpd~t)KP8rw)Zeryll4e!Y>`(#U@y|Jc!)>$#P!N7{;d~vR|F`{epId(yt0JPji-%z5hSx36{&S}} zI{Wy}{NsUgbt~;hgwOFp+0ps7ckTqtfp>9e9SeFF*Ebd~=idvI!67^XQzWJZ_x&9; znc)$byx_3+hjb`rA$nzn2j+Vkm#dxyURZMQLe=ruGmiY{`QEDO5AD5S?ttZj#QFEa zZ{q%wb1ve;0kHzGxbi#%$`DlR0Gx+IgLt4Gh35jCjOxafb9MR@WP49xvQ-Ra?cr;-%Aa@vocP#1rK&D%l@-;k=8_ z7qEZf5!frD-v|R`umj}^RIqT$I37tQ6FGCl_i(OB+7mUK^>=qa=G)$5j3uHeU#I^O zf5)ypJEVf~pTZl6Ib!duYOQgAvCHhEk@H<(!W1ago8 zyovf@sQ!lgsK>?H01YDt3E*u2&ZlND=_lfR;J7ZsibVJxjkOO$D^)-lNJ0{b? z(7N5-s=MHZaW7EZ5XM0}&*PjF8u~rHI7D$zOVH!uZeY+ZsKLqwbgVC!s*!!TT(7pF z?wgUZ2Kd#J2FO%T8kl%TuBvKa53FJc8W>EFChLX0I!`O{7R?{c2KI?n^wU5#*v2LH zEHEEj^>XZ4gX8PEo`3HeJhTSKHLRCsbPYbS22TUWab=)H5oZm`8Mu&_p+pgT97=rM z)ob?@a4|o$$Hch<_7d?k#Krjn_9M9J<#~<#KX8HqqS`$RI_B@7EhNqru%E+KFAqMv z(7%PYmN+ZGenotgxHt>I@J-)p+lOi=-6XDTRo)@4+EyITJ?3eH5=C(*j32pA&>D9W z->&gZ#5*+JPP|j&JBW8_{1M_@<4+KOM&r0X*w4cn|2FYajT^)#HJ&A&(fA4C(;A;A zKCAK5#7}AbHR1~z|0(fTG=84=8I4~h{;I~`CH{uSZxer0REh!`^T9-)ZKx%09$#HWb_8teOQd4PbR?QgM022zC-X5QlFu30nguPT%$fSq1`@0&4PZS|P(YX3vx}kCPU36dL>bvMLJ zasB`QKLbNC14FfdfPkW+qNb*%p`oFrrKOXTlb4rQP*6}*R8+E|VRCYEwxMBmc6M=b zadmZdOG`_SqGC@^&y*=s<}fhKnKNhU(xq#oqSmfmyLIc5?AW<;=dLj@ zT)TGd9s|QY0fBppiuVi+@7=riTtMKtqT+Ky!{?Tk&z+o}2L(M(PJUip{XRMQeR1)7 zAfu(_eNWH(DO29hne%?_+V^|+zJLGz`;;l)moELjcJ24Qd%qt$_Wj(s@AvL~fB*jf zxpV*T-TVLi`TzItf!-Viqai?i2$;^BV#dJ0ROspA7*a9k?X<+~+Xez{=TAr^W(i2i z$tAg|>3SEuV2Q>+&IFeWY)lC+D$u=eKRQ{X1=MjPN49xODz{k*4aT_Ua(s?=35C zU4C|a_S7xL9&#sVyg0pl_mp>b^=tihd`#tJGflU8H|zFOLvOFGAN`opj|R;=qrhhW zi?#L4tSM*W_zlzjJd?h?c(K*<*P(e1mza8`9%XNx60tl~FV?|G^TJUhw|1<{8ER%{-}?Be4(yJb8duUL9T_k2EAeeyA%bE`9J!+rLYX8YD{{=@ut;)e6L i*_-!d{TF#6`$qlO!?*9}ZLYrvN~)f&elF{r5}E*r-m^IX literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/output.c b/webalizer-2.23-08/output.c new file mode 100644 index 0000000..bbe0ee3 --- /dev/null +++ b/webalizer-2.23-08/output.c @@ -0,0 +1,2910 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include /* normal stuff */ +#include +#include +#include +#include +#ifdef USE_DNS +#include +#endif + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#endif + +#ifdef USE_GEOIP +#include +#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, + "\n\n"); + } + else + { + while (lptr!=NULL) + { + fprintf(out_fp,"%s\n",lptr->string); + lptr=lptr->next; + } + } + /* Standard header comments */ + fprintf(out_fp,"\n", + version,editlvl); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n\n",cur_time()); + + fprintf(out_fp,"\n\n",langcode); + fprintf(out_fp," %s %s - %s\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,"\n\n"); + + lptr = html_body; + if (lptr==NULL) + fprintf(out_fp,"\n", + LTGREY, BLACK, BLUE, RED); + else + { + while (lptr!=NULL) + { + fprintf(out_fp,"%s\n",lptr->string); + lptr=lptr->next; + } + } + fprintf(out_fp,"

%s %s

\n",msg_title, hname); + if (period) + fprintf(out_fp,"\n%s: %s
\n",msg_hhdr_sp,period); + else + fprintf(out_fp,"\n%s
\n",msg_main_per); + fprintf(out_fp,"%s %s
\n
\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,"
\n
\n

\n"); +} + +/*********************************************/ +/* WRITE_HTML_TAIL - output HTML page tail */ +/*********************************************/ + +void write_html_tail(FILE *out_fp) +{ + NLISTPTR lptr; + + fprintf(out_fp,"

\n"); + fprintf(out_fp,"

\n


\n"); + fprintf(out_fp,"
..
\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + lptr=html_tail; + if (lptr) + { + fprintf(out_fp,"\n"); + } + fprintf(out_fp,"\n
\n"); + fprintf(out_fp,"Generated by\n"); + fprintf(out_fp,""); + fprintf(out_fp,"Webalizer Version %s\n",version); + fprintf(out_fp,"\n\n"); + while (lptr!=NULL) + { + fprintf(out_fp,"%s\n",lptr->string); + lptr=lptr->next; + } + fprintf(out_fp,"
\n"); + + /* wind up, this is the end of the file */ + fprintf(out_fp,"\n\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\n\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,"
\n"); + if (daily_graph) fprintf(out_fp,"\"%s\"

\n",png1_fname,dtitle); + if (daily_stats) daily_total_table(); + } + + if (hourly_graph || hourly_stats) /* Hourly stuff */ + { + fprintf(out_fp,"\n"); + if (hourly_graph) fprintf(out_fp,"\"%s\"

\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,"\n"); + if (daily_stats || daily_graph) + fprintf(out_fp,"[%s]\n",msg_hlnk_ds); + if (hourly_stats || hourly_graph) + fprintf(out_fp,"[%s]\n",msg_hlnk_hs); + if (ntop_urls || ntop_urlsK) + fprintf(out_fp,"[%s]\n",msg_hlnk_u); + if (ntop_entry) + fprintf(out_fp,"[%s]\n",msg_hlnk_en); + if (ntop_exit) + fprintf(out_fp,"[%s]\n",msg_hlnk_ex); + if (ntop_sites || ntop_sitesK) + fprintf(out_fp,"[%s]\n",msg_hlnk_s); + if (ntop_refs && t_ref) + fprintf(out_fp,"[%s]\n",msg_hlnk_r); + if (ntop_search) + fprintf(out_fp,"[%s]\n",msg_hlnk_sr); + if (ntop_users && t_user) + fprintf(out_fp,"[%s]\n",msg_hlnk_i); + if (ntop_agents && t_agent) + fprintf(out_fp,"[%s]\n",msg_hlnk_a); + if (ntop_ctrys) + fprintf(out_fp,"[%s]\n",msg_hlnk_c); + fprintf(out_fp,"\n

\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,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY,msg_mtot_ms,l_month[cur_month-1],cur_year); + fprintf(out_fp,"\n"); + /* Total Hits */ + fprintf(out_fp,"\n" \ + "\n",msg_mtot_th,t_hit); + /* Total Files */ + fprintf(out_fp,"\n" \ + "\n",msg_mtot_tf,t_file); + /* Total Pages */ + fprintf(out_fp,"\n" \ + "\n",msg_h_total, msg_h_pages, t_page); + /* Total Visits */ + fprintf(out_fp,"\n" \ + "\n",msg_h_total, msg_h_visits, t_visit); + /* Total XFer */ + fprintf(out_fp,"\n" \ + "\n",msg_mtot_tx,t_xfer/1024); + fprintf(out_fp,"\n"); + /**********************************************/ + /* Unique Sites */ + fprintf(out_fp,"" \ + "\n" \ + "\n",msg_mtot_us,t_site); + /* Unique URLs */ + fprintf(out_fp,"" \ + "\n" \ + "\n",msg_mtot_uu,t_url); + /* Unique Referrers */ + if (t_ref != 0) + fprintf(out_fp,"" \ + "\n" \ + "\n",msg_mtot_ur,t_ref); + /* Unique Usernames */ + if (t_user != 0) + fprintf(out_fp,"" \ + "\n" \ + "\n",msg_mtot_ui,t_user); + /* Unique Agents */ + if (t_agent != 0) + fprintf(out_fp,"" \ + "\n" \ + "\n",msg_mtot_ua,t_agent); + fprintf(out_fp,"\n"); + /**********************************************/ + /* Hourly/Daily avg/max totals */ + fprintf(out_fp,"" \ + "\n"\ + "\n" \ + "\n", + GREY,GREY,GREY,msg_h_avg,GREY,msg_h_max); + fprintf(out_fp,"\n"); + /* Max/Avg Hits per Hour */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mhh, t_hit/(24*days_in_month),mh_hit); + /* Max/Avg Hits per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mhd, t_hit/days_in_month, max_hits); + /* Max/Avg Files per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mfd, t_file/days_in_month,max_files); + /* Max/Avg Pages per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mpd, t_page/days_in_month,max_pages); + /* Max/Avg Sites per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_msd, t_site/days_in_month,max_sites); + /* Max/Avg Visits per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mvd, t_visit/days_in_month,max_visits); + /* Max/Avg KBytes per Day */ + fprintf(out_fp,"" \ + "\n" \ + "\n" \ + "\n",msg_mtot_mkd, + (t_xfer/1024)/days_in_month,max_xfer/1024); + fprintf(out_fp,"\n"); + /**********************************************/ + /* response code totals */ + fprintf(out_fp,"\n",GREY,msg_mtot_rc); + fprintf(out_fp,"\n"); + for (i=0;i\n" \ + "\n" \ + "\n", + response[i].desc,PCENT(response[i].count,t_hit),response[i].count); + } + fprintf(out_fp,"\n"); + /**********************************************/ + + fprintf(out_fp,"
" \ + "%s %s %d
%s%llu" \ + "
%s%llu" \ + "
%s %s%llu" \ + "
%s %s%llu" \ + "
%s%.0f" \ + "
%s%llu" \ + "
%s%llu" \ + "
%s%llu" \ + "
%s%llu" \ + "
%s%llu" \ + "
." \ + "%s " \ + "%s
%s%llu%llu" \ + "
%s%llu%llu" \ + "
%s%llu%llu" \ + "
%s%llu%llu" \ + "
%s%llu%llu" \ + "
%s%llu%llu" \ + "
%s%.0f%.0f" \ + "
\n" \ + "%s
%s%3.02f%%%llu
\n"); + fprintf(out_fp,"

\n"); +} + +/*********************************************/ +/* DAILY_TOTAL_TABLE - daily totals */ +/*********************************************/ + +void daily_total_table() +{ + int i,j; + + /* Daily stats */ + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + /* Daily statistics for ... */ + fprintf(out_fp,"\n", + GREY,msg_dtot_ds,l_month[cur_month-1], cur_year); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\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,"\n"); + + /* skip beginning blank days in a month */ + for (i=0;i\n", i+1); + fprintf(out_fp,"\n" \ + "\n", + tm_hit[i],PCENT(tm_hit[i],t_hit)); + fprintf(out_fp,"\n" \ + "\n", + tm_file[i],PCENT(tm_file[i],t_file)); + fprintf(out_fp,"\n" \ + "\n", + tm_page[i],PCENT(tm_page[i],t_page)); + fprintf(out_fp,"\n" \ + "\n", + tm_visit[i],PCENT(tm_visit[i],t_visit)); + fprintf(out_fp,"\n" \ + "\n", + tm_site[i],PCENT(tm_site[i],t_site)); + fprintf(out_fp,"\n" \ + "\n", + tm_xfer[i]/1024,PCENT(tm_xfer[i],t_xfer)); + } + fprintf(out_fp,"\n"); + fprintf(out_fp,"
" \ + "%s %s %d
" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
",GRPCOLOR); + else fprintf(out_fp,"
"); + fprintf(out_fp,"%d" \ + "%llu%3.02f%%" \ + "%llu%3.02f%%" \ + "%llu%3.02f%%" \ + "%llu%3.02f%%" \ + "%llu%3.02f%%" \ + "%.0f%3.02f%%
\n"); + fprintf(out_fp,"

\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,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY,msg_htot_hs,l_month[cur_month-1], cur_year); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n", + GREY, msg_h_hour, + HITCOLOR, msg_h_hits, + FILECOLOR, msg_h_files, + PAGECOLOR, msg_h_pages, + KBYTECOLOR, msg_h_xfer); + fprintf(out_fp,"\n" \ + "\n", + HITCOLOR, msg_h_avg, HITCOLOR, msg_h_total); + fprintf(out_fp,"\n" \ + "\n", + FILECOLOR, msg_h_avg, FILECOLOR, msg_h_total); + fprintf(out_fp,"\n" \ + "\n", + PAGECOLOR, msg_h_avg, PAGECOLOR, msg_h_total); + fprintf(out_fp,"\n" \ + "\n", + KBYTECOLOR, msg_h_avg, KBYTECOLOR, msg_h_total); + + fprintf(out_fp,"\n"); + for (i=0;i<24;i++) + { + fprintf(out_fp,"\n",i); + fprintf(out_fp, + "\n"\ + "\n"\ + "\n", + th_hit[i]/days_in_month,th_hit[i], + PCENT(th_hit[i],t_hit)); + fprintf(out_fp, + "\n"\ + "\n"\ + "\n", + th_file[i]/days_in_month,th_file[i], + PCENT(th_file[i],t_file)); + fprintf(out_fp, + "\n"\ + "\n"\ + "\n", + th_page[i]/days_in_month,th_page[i], + PCENT(th_page[i],t_page)); + fprintf(out_fp, + "\n" \ + "\n" \ + "\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,"\n"); + fprintf(out_fp,"
"\ + "%s %s %d
" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
" \ + "%d%llu%llu%3.02f%%%llu%llu%3.02f%%%llu%llu%3.02f%%%.0f%.0f%3.02f%%
\n

\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 tag */ + fprintf(out_fp,"\n"); + + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + if (flag) fprintf(out_fp,"\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,"\n", + GREY,msg_top_top, tot_num, msg_top_of, t_site, msg_top_s); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY); + fprintf(out_fp,"\n",HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n",FILECOLOR,msg_h_files); + fprintf(out_fp,"\n",KBYTECOLOR,msg_h_xfer); + fprintf(out_fp,"\n",VISITCOLOR,msg_h_visits); + fprintf(out_fp,"\n",MISCCOLOR,msg_h_hname); + fprintf(out_fp,"\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,"\n", GRPCOLOR); + else fprintf(out_fp,"\n"); + + fprintf(out_fp, + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n", + hptr->string); + else fprintf(out_fp,"%s\n", + hptr->string); + tot_num--; + i++; + } + } + + fprintf(out_fp,"\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,"",GRPCOLOR); + fprintf(out_fp,"\n",msg_v_sites); + if (flag) /* do we need to sort? */ + qsort(h_array,a_ctr,sizeof(HNODEPTR),qs_site_cmph); + } + } + } + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s %s %s
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
%d%llu%3.02f%%%llu%3.02f%%%.0f%3.02f%%%llu%3.02f%%", + 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,"%s
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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 tag */ + fprintf(out_fp,"\n"); + + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + if (flag) fprintf(out_fp,"\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,"\n", + GREY,msg_top_top,tot_num,msg_top_of,t_url,msg_top_u); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY); + fprintf(out_fp,"\n", + HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n", + KBYTECOLOR,msg_h_xfer); + fprintf(out_fp,"\n", + MISCCOLOR,msg_h_url); + fprintf(out_fp,"\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,"\n", GRPCOLOR); + else fprintf(out_fp,"\n"); + + fprintf(out_fp, + "\n" \ + "\n"\ + "\n" \ + "\n"\ + "\n" \ + "\n", + uptr->string); + else fprintf(out_fp,"%s\n",uptr->string); + } + else + { + /* check for a service prefix (ie: http://) */ + if (strstr(uptr->string,"://")!=NULL) + fprintf(out_fp,"%s\n", + uptr->string,uptr->string); + else + { + if (log_type == LOG_FTP) /* FTP log? */ + fprintf(out_fp,"%s\n",uptr->string); + else + { /* Web log */ + if (use_https) + /* secure server mode, use https:// */ + fprintf(out_fp, + "%s\n", + hname,uptr->string,uptr->string); + else + /* otherwise use standard 'http://' */ + fprintf(out_fp, + "%s\n", + hname,uptr->string,uptr->string); + } + } + } + tot_num--; + i++; + } + } + fprintf(out_fp,"\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,"",GRPCOLOR); + fprintf(out_fp,"\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,"
" \ + "%s %llu %s %llu %s %s %s
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s" \ + "%s
%d%llu%3.02f%%%.0f%3.02f%%", + 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,"%s
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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,"\n"); /* do anchor tag */ + else fprintf(out_fp,"\n"); + + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\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,"\n"); + fprintf(out_fp,"\n", + GREY); + fprintf(out_fp,"\n", + HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n", + VISITCOLOR,msg_h_visits); + fprintf(out_fp,"\n", + MISCCOLOR,msg_h_url); + fprintf(out_fp,"\n"); + + pointer=u_array; i=0; + while (tot_num) + { + uptr=*pointer++; + if (uptr->flag != OBJ_HIDE) + { + fprintf(out_fp,"\n"); + fprintf(out_fp, + "\n" \ + "\n"\ + "\n" \ + "\n"\ + "\n" \ + "\n", + uptr->string,uptr->string); + else + { + if (use_https) + /* secure server mode, use https:// */ + fprintf(out_fp, + "%s\n", + hname,uptr->string,uptr->string); + else + /* otherwise use standard 'http://' */ + fprintf(out_fp, + "%s\n", + hname,uptr->string,uptr->string); + } + tot_num--; + i++; + } + } + fprintf(out_fp,"\n"); + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s" \ + "%s
%d%llu%3.02f%%%llu%3.02f%%", + 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, + "%s
\n

\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,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY, msg_top_top, tot_num, msg_top_of, t_ref, msg_top_r); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY); + fprintf(out_fp,"\n", + HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n", + MISCCOLOR,msg_h_ref); + fprintf(out_fp,"\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,"\n", GRPCOLOR); + else fprintf(out_fp,"\n"); + + fprintf(out_fp, + "\n" \ + "\n" \ + "\n" \ + "\n"); + tot_num--; + i++; + } + } + fprintf(out_fp,"\n"); + if ( (all_refs) && ((r_reg+r_grp)>ntop_refs) ) + { + if (all_refs_page(r_reg, r_grp)) + { + fprintf(out_fp,"",GRPCOLOR); + fprintf(out_fp,"\n",msg_v_refs); + } + } + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s
%d%llu%3.02f%%", + 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,"%s",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,"%s", + rptr->string, rptr->string); + else + fprintf(out_fp,"%s", rptr->string); + } + fprintf(out_fp,"
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY, msg_top_top, tot_num, msg_top_of, t_agent, msg_top_a); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY); + fprintf(out_fp,"\n", + HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n", + MISCCOLOR,msg_h_agent); + fprintf(out_fp,"\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,"\n", GRPCOLOR); + else fprintf(out_fp,"\n"); + + fprintf(out_fp, + "\n" \ + "\n"\ + "\n" \ + "\n", + aptr->string); + else fprintf(out_fp,"%s\n", + aptr->string); + tot_num--; + i++; + } + } + fprintf(out_fp,"\n"); + if ( (all_agents) && ((a_reg+a_grp)>ntop_agents) ) + { + if (all_agents_page(a_reg, a_grp)) + { + fprintf(out_fp,"",GRPCOLOR); + fprintf(out_fp,"\n",msg_v_agents); + } + } + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s
%d%llu%3.02f%%", + 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,"%s
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY, msg_top_top, tot_num, msg_top_of, a_ctr, msg_top_sr); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY); + fprintf(out_fp,"\n", + HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n", + MISCCOLOR,msg_h_search); + fprintf(out_fp,"\n"); + + pointer=s_array; i=0; + while(tot_num) + { + sptr=*pointer++; + fprintf(out_fp, + "\n" \ + "\n" \ + "\n"\ + "\n" \ + "\n",sptr->string); + tot_num--; + i++; + } + fprintf(out_fp,"\n"); + if ( (all_search) && (a_ctr>ntop_search) ) + { + if (all_search_page(a_ctr, t_val)) + { + fprintf(out_fp,"",GRPCOLOR); + fprintf(out_fp,"\n",msg_v_search); + } + } + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s
%d%llu%3.02f%%", + i+1,sptr->count, + (t_val==0)?0:((float)sptr->count/t_val)*100.0); + fprintf(out_fp,"%s
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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,"\n"); /* now do tag */ + + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY,msg_top_top, tot_num, msg_top_of, t_user, msg_top_i); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY); + fprintf(out_fp,"\n",HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n",FILECOLOR,msg_h_files); + fprintf(out_fp,"\n",KBYTECOLOR,msg_h_xfer); + fprintf(out_fp,"\n",VISITCOLOR,msg_h_visits); + fprintf(out_fp,"\n",MISCCOLOR,msg_h_uname); + fprintf(out_fp,"\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,"\n", GRPCOLOR); + else fprintf(out_fp,"\n"); + + fprintf(out_fp, + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n" \ + "\n", + iptr->string); + else fprintf(out_fp,"%s\n", + iptr->string); + tot_num--; + i++; + } + } + + fprintf(out_fp,"\n"); + if ( (all_users) && ((i_reg+i_grp)>ntop_users) ) + { + if (all_users_page(i_reg, i_grp)) + { + fprintf(out_fp,"",GRPCOLOR); + fprintf(out_fp,"\n",msg_v_users); + } + } + fprintf(out_fp,"
" \ + "%s %llu %s %llu %s
" \ + "#" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
%d%llu%3.02f%%%llu%3.02f%%%.0f%3.02f%%%llu%3.02f%%", + 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,"%s
\n"); + fprintf(out_fp,""); + fprintf(out_fp,"", + cur_year,cur_month,html_ext); + fprintf(out_fp,"%s
\n

\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,"

\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,"
\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;iflag != 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 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,"
\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;icount; /* 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,"\"%s\"

\n",pie_fname,pie_title); + } + + /* Now do the table */ + + for (i=0;icount!=0) tot_num++; + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n", + GREY,msg_top_top,tot_num,msg_top_of,tot_ctry,msg_top_c); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY); + fprintf(out_fp,"\n",HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n",FILECOLOR,msg_h_files); + fprintf(out_fp,"\n",KBYTECOLOR,msg_h_xfer); + fprintf(out_fp,"\n",MISCCOLOR,msg_h_ctry); + fprintf(out_fp,"\n"); + for (i=0;iidx)); + 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), + "\"%s\" ", + flag_dir,domain,top_ctrys[i]->desc); + } + } + + if (top_ctrys[i]->count!=0) + fprintf(out_fp,"" \ + "\n" \ + "\n"\ + "\n" \ + "\n"\ + "\n" \ + "\n"\ + "\n" \ + "\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,"\n"); + fprintf(out_fp,"
" \ + "%s %d %s %d %s
" \ + "#" \ + "%s" \ + "%s" \ + "%s" \ + "%s
%d%llu%3.02f%%%llu%3.02f%%%.0f%3.02f%%%s%s" \ + "
\n

\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,"\"%s\"

\n",buffer); + /* month table */ + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",msg_main_sum); + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY,msg_h_mth); + fprintf(out_fp,"\n",GREY,msg_main_da); + fprintf(out_fp,"\n",GREY,msg_main_mt); + fprintf(out_fp,"\n",HITCOLOR,msg_h_hits); + fprintf(out_fp,"\n",FILECOLOR,msg_h_files); + fprintf(out_fp,"\n",PAGECOLOR,msg_h_pages); + fprintf(out_fp,"\n",VISITCOLOR,msg_h_visits); + fprintf(out_fp,"\n",SITECOLOR,msg_h_sites); + fprintf(out_fp,"\n",KBYTECOLOR,msg_h_xfer); + fprintf(out_fp,"\n",VISITCOLOR,msg_h_visits); + fprintf(out_fp,"\n",PAGECOLOR,msg_h_pages); + fprintf(out_fp,"\n",FILECOLOR,msg_h_files); + fprintf(out_fp,"\n",HITCOLOR,msg_h_hits); + fprintf(out_fp,"\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,"\n", + GRPCOLOR,s_year); + fprintf(out_fp,"", GRPCOLOR, m_xfer); + fprintf(out_fp,"", GRPCOLOR, m_visits); + fprintf(out_fp,"", GRPCOLOR, m_pages); + fprintf(out_fp,"", GRPCOLOR, m_files); + fprintf(out_fp,"", 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,"\n", GREY, s_year); + } + + fprintf(out_fp,"\n", + hist[i].year, hist[i].month, html_ext, + s_month[hist[i].month-1], hist[i].year); + else + fprintf(out_fp,"%s %d\n", \ + s_month[hist[i].month-1], hist[i].year); + + fprintf(out_fp,"\n", + hist[i].hit/days_in_month); + fprintf(out_fp,"\n", + hist[i].files/days_in_month); + fprintf(out_fp,"\n", + hist[i].page/days_in_month); + fprintf(out_fp,"\n", + hist[i].visit/days_in_month); + fprintf(out_fp,"\n", + hist[i].site); + fprintf(out_fp,"\n", + hist[i].xfer); + fprintf(out_fp,"\n", + hist[i].visit); + fprintf(out_fp,"\n", + hist[i].page); + fprintf(out_fp,"\n", + hist[i].files); + fprintf(out_fp,"", + hist[i].hit); + fprintf(out_fp,"\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,"\n", + GRPCOLOR,s_year); + fprintf(out_fp,"", GRPCOLOR, m_xfer); + fprintf(out_fp,"", GRPCOLOR, m_visits); + fprintf(out_fp,"", GRPCOLOR, m_pages); + fprintf(out_fp,"", GRPCOLOR, m_files); + fprintf(out_fp,"", GRPCOLOR, m_hit); + } + fprintf(out_fp,"\n"); + fprintf(out_fp,"\n",GREY,msg_h_totals); + fprintf(out_fp,"\n",GREY,gt_xfer); + fprintf(out_fp,"\n",GREY,gt_visits); + fprintf(out_fp,"\n",GREY,gt_pages); + fprintf(out_fp,"\n",GREY,gt_files); + fprintf(out_fp,"\n",GREY,gt_hit); + fprintf(out_fp,"\n"); + fprintf(out_fp,"
",GREY); + fprintf(out_fp,"%s
" \ + "%s" \ + "%s" \ + "%s
" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s" \ + "%s
%04d" \ + "%.0f" \ + "%0llu" \ + "%0llu" \ + "%0llu" \ + "%0llu
%04d
"); + if (hist[i].hit!=0) + fprintf(out_fp,"" \ + "%s %d%llu%llu%llu%llu%llu%.0f%llu%llu%llu%llu
%04d" \ + "%.0f" \ + "%0llu" \ + "%0llu" \ + "%0llu" \ + "%0llu
" \ + "%s" \ + "%.0f" \ + "%.0f" \ + "%.0f" \ + "%.0f" \ + "%.0f
\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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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 (t2string, + (*(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;inext; + } + } + 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;inext; + } + } + 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;inext; + } + } + 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;inext; + } + } + 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;inext; + } + } + 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;inext; + } + } + return ctr; /* return number loaded */ +} + +/*********************************************/ +/* OPEN_OUT_FILE - Open file for output */ +/*********************************************/ + +FILE *open_out_file(char *filename) +{ + struct stat out_stat; + FILE *out_fp; + + /* stat the file */ + if ( !(lstat(filename, &out_stat)) ) + { + /* check if the file a symlink */ + if ( S_ISLNK(out_stat.st_mode) ) + { + if (verbose) + fprintf(stderr,"%s %s (symlink)\n",msg_no_open,filename); + return NULL; + } + } + + /* open the file... */ + if ( (out_fp=fopen(filename,"w")) == NULL) + { + if (verbose) + fprintf(stderr,"%s %s!\n",msg_no_open,filename); + return NULL; + } + return out_fp; +} + diff --git a/webalizer-2.23-08/output.h b/webalizer-2.23-08/output.h new file mode 100644 index 0000000..90cfe3a --- /dev/null +++ b/webalizer-2.23-08/output.h @@ -0,0 +1,12 @@ +#ifndef _OUTPUT_H +#define _OUTPUT_H + +extern int write_main_index(); /* produce main HTML */ +extern int write_month_html(); /* monthy HTML page */ +extern FILE *open_out_file(char *); /* open output file */ +#ifdef USE_DNS +extern char *geodb_get_cc(DB *, char *, char *); +extern DB *geo_db; +#endif + +#endif /* _OUTPUT_H */ diff --git a/webalizer-2.23-08/output.o b/webalizer-2.23-08/output.o new file mode 100644 index 0000000000000000000000000000000000000000..167614ff5e4aa2212ccf3fd505f309ef3cb96c68 GIT binary patch literal 122784 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/parser.c b/webalizer-2.23-08/parser.c new file mode 100644 index 0000000..abf2c71 --- /dev/null +++ b/webalizer-2.23-08/parser.c @@ -0,0 +1,740 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include /* normal stuff */ +#include +#include + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#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); /* separate fields with \0's */ + + /* Start out with date/time */ + cp1=buffer; + while (*cp1!=0 && cp12100) 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'9') log_rec.xfer_size=0; + else log_rec.xfer_size = strtoul(cp1,NULL,10); + + /* URL stuff */ + while (*cp1!=0 && cp1= 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 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); /* separate 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) 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'9') log_rec.xfer_size=0; + else log_rec.xfer_size = strtoul(cp1,NULL,10); + + while (*cp1!=0 && cp1= 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); /* separate 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; +} diff --git a/webalizer-2.23-08/parser.h b/webalizer-2.23-08/parser.h new file mode 100644 index 0000000..58da828 --- /dev/null +++ b/webalizer-2.23-08/parser.h @@ -0,0 +1,6 @@ +#ifndef _PARSER_H +#define _PARSER_H + +extern int parse_record(char *); + +#endif /* _PARSER_H */ diff --git a/webalizer-2.23-08/parser.o b/webalizer-2.23-08/parser.o new file mode 100644 index 0000000000000000000000000000000000000000..7b99b47934e7dc2292410e0bfe04dbe026f2081d GIT binary patch literal 17040 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/preserve.c b/webalizer-2.23-08/preserve.c new file mode 100644 index 0000000..d96a74c --- /dev/null +++ b/webalizer-2.23-08/preserve.c @@ -0,0 +1,859 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 +#include +#include +#include +#include /* normal stuff */ +#include +#include +#include +#include + +/* ensure sys/types */ +#ifndef _SYS_TYPES_H +#include +#endif + +/* need socket header? */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* some systems need this */ +#ifdef HAVE_MATH_H +#include +#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;istring, 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;istring, 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;istring, 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;istring, 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;istring, 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;istring,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;istring, 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;ik^I-%XYa``hdH+Q|GD?> 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

wIn93EL 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 Ky$vR7{r?9e_RUlP literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/sample.conf b/webalizer-2.23-08/sample.conf new file mode 100644 index 0000000..419474f --- /dev/null +++ b/webalizer-2.23-08/sample.conf @@ -0,0 +1,779 @@ +# +# Sample Webalizer configuration file +# Copyright 1997-2013 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.23) +# 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 (separated 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 affect +# 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 + +# HTMLHead defines HTML code to insert within the +# block, immediately after the 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 incremental 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 separate +# 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 separate +# 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 separated 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 +# separate 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 its 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 separate tab delimited +# text files, suitable for import into most database or spreadsheet +# programs. + +# DumpPath specifies the path to dump the files. If not specified, +# it will default to the current output directory. Do not use a +# trailing slash ('/'). + +#DumpPath /var/lib/httpd/logs + +# The DumpHeader keyword specifies if a header record should be +# written to the file. A header record is the first record of the +# file, and contains the labels for each field written. Normally, +# files that are intended to be imported into a database system +# will not need a header record, while spreadsheets usually do. +# Value can be either 'yes' or 'no', with 'no' being the default. + +#DumpHeader no + +# DumpExtension allow you to specify the dump filename extension +# to use. The default is "tab", but some programs are pickey about +# the filenames they use, so you may change it here (for example, +# some people may prefer to use "csv"). + +#DumpExtension tab + +# These control the dumping of each individual table. The value +# can be either 'yes' or 'no'.. the default is 'no'. + +#DumpSites no +#DumpURLs no +#DumpReferrers no +#DumpAgents no +#DumpUsers no +#DumpSearchStr no + +# The custom graph colors are defined here. Declare them +# in the standard hexadecimal way (as HTML, without the '#') +# If none are given, you will get the standard default colors. + +#ColorHit 00805c +#ColorFile 0040ff +#ColorSite ff8000 +#ColorKbyte ff0000 +#ColorPage 00e0ff +#ColorVisit ffff00 +#ColorMisc 00e0ff + +#PieColor1 800080 +#PieColor2 80ffc0 +#PieColor3 ff00ff +#PieColor4 ffc080 + +# End of configuration file... Have a nice day! diff --git a/webalizer-2.23-08/wcmgr b/webalizer-2.23-08/wcmgr new file mode 100755 index 0000000000000000000000000000000000000000..a0b703f5c4500693dae6b21dbf22362a5cd740b4 GIT binary patch literal 26984 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/wcmgr.1 b/webalizer-2.23-08/wcmgr.1 new file mode 100644 index 0000000..79d5128 --- /dev/null +++ b/webalizer-2.23-08/wcmgr.1 @@ -0,0 +1,110 @@ +.TH wcmgr 1 "12-Jul-2008" "Version 1.00" "The Webalizer" +.SH NAME +wcmgr - Webalizer (DNS) Cache file Manager +.SH SYNOPSIS +.B wcmgr\fP [\fI option ... \fP] \fIcache-file\fP +.PP +.SH DESCRIPTION +\fIwcmgr\fP is a utility program which allows manipulation of the DNS cache +files used and produced by The \fIWebalizer\fP. Each record in the cache +file contains an IP address (either IPv4 or IPv6), a timestamp of when the +entry was added to the cache, a flag to indicate if the record contains +a resolved name or not, and either the same IP address or a resolved host +name. All records are accessed by their IP address. +.SH RUNNING WCMGR +\fIwcmgr\fP was designed to be run from the Unix shell command line. This +facilitates its use in shell scripts and other automated processes. A +valid DNS cache file \fBmust\fP be specified. Command line options are +optional, and if none are given, the default action is to list the +contents of the specified cache file. +.SH COMMAND LINE OPTIONS +Different functions are selected by using one or more of the following +command line options. If no options are given, the default is to display +the contents of the cache file to the screen (stdout). +.PP +.TP 8 +.B \-h +Display all available command line options and exit. +.TP 8 +.B \-v +Be verbose. + +.TP 8 +.B \-V +Display the program version and exit. Additional program specific +information will be displayed if \fIverbose\fP mode is also used +(e.g. '\fI-vV\fP'), which can be useful when submitting bug reports. +.TP 8 +.B \-a \fIaddress\fP [\fI-n hostname\fP] [\fI-t0\fP] +Add a new record to the cache file. The IP \fIaddress\fP will be added to +the cache file using the current time as the timestamp and with a resolved +name \fIhostname\fP. If \fI-t0\fP is specified, the record will be +considered permanent, and will not be removed (during a purge) or expired. +If a \fIhostname\fP is not specified with the \fI-n\fP option, then the +\fIaddress\fP will be used instead, and the record will be flagged as +unresolved. +.TP 8 +.B \-c +Create a new cache file. If used alone, this option will create a new, +empty cache file. If used with the \fIimport\fP option, a new cache +file will be created before importing the data. An error will occur +if the file \fIcache-file\fP already exists. +.TP 8 +.B \-d \fIaddress\fP +Delete a record from the cache file using the specified \fIaddress\fP. +.TP 8 +.B \-f \fIaddress\fP +Find and display information for \fIaddress\fP from the cache file. +A single line similar to that produced by the \fI-l\fP option will +be displayed unless \fIverbose\fP mode is enabled, in which case a +more detailed listing will be produced. +.TP 8 +.B \-i \fIname\fP [\fI-c\fP] +Import data into the cache file from the file \fIname\fP. The import +file must be a valid tab delimited text file, such as that created by +the \fIexport\fP option. If the imported data contains records already +present in the cache file, those records will be overwritten by the +imported data. The cache file must exist unless the \fI-c\fP option +is specified, in which case, a new cache file will be created for the +imported data. +.TP 8 +.B \-l +List the contents of the cache file. This is the default action of the +program, so does not necessarily need to be specified. If \fIverbose\fP +mode is enabled, a report title, column headers and summary totals will +also be displayed. +.TP 8 +.B \-p \fInum\fP +Purge the cache file of entries older than \fInum\fP days. If \fInum\fP +is not specified, then a default of \fB7 days\fP will be used. if +\fIverbose\fP mode is enabled, each purged record will be printed and +the total number of purged records will be displayed. +.TP 8 +.B \-s [\fI-t num\fP] +Display cache file information/statistics. If a TTL value (in days) is +specified using the \fI-t\fP option, it will be used to calculate how +many records are older than \fInum\fP days, otherwise, the default value +of \fB7 days\fP will be used. +.TP 8 +.B \-n \fIname\fP +Specify the \fIname\fP to use as the resolved hostname when adding records +to the cache. +.TP 8 +.B \-t \fInum\fP +Time to live (TTL) value. If used along with the \fI-p\fP (purge) option, +it specifies how many days a record will remain valid. Any record that is +older than \fInum\fP days is considered expired and will be purged. If +used with the \fI-a\fP (add) option, a zero value will cause the record +to be considered permanent. +.TP 8 +.B \-x \fIname\fP +Export data from a cache file to a tab delimited text file named \fIname\fP. +If the text file \fIname\fP exists, it will be overwritten. +.SH BUGS +Please report bugs to the author. +.SH COPYRIGHT +Copyright (C) 1997-2013 by Bradford L. Barrett. Distributed under +the GNU GPL. See the files "\fICOPYING\fP" and "\fICopyright\fP", +supplied with all distributions for additional information. +.SH AUTHOR +Bradford L. Barrett <\fIbrad at mrunix dot net\fP> diff --git a/webalizer-2.23-08/wcmgr.c b/webalizer-2.23-08/wcmgr.c new file mode 100644 index 0000000..b7db80f --- /dev/null +++ b/webalizer-2.23-08/wcmgr.c @@ -0,0 +1,992 @@ +/* + wcmgr - Webalizer (DNS) Cache file Manager + + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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" + +/* Stupid pre-processor tricks */ +#define xstr(x) #x +#define str(x) xstr(x) +#define SMAXHOST str(MAXHOST) /* String version of MAXHOST value */ + +/*********************************************/ +/* 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 = "04"; /* edit level */ +char *moddate = "26-Aug-2013"; /* modification date */ +char *copyright = "Copyright 2007-2013 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; + +#define DNSZ sizeof(struct dnsRec) /* define static record size */ + +/*********************************************/ +/* 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>DNSZ)?DNSZ: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>DNSZ)?DNSZ: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>DNSZ)?DNSZ: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,"%47s\t%lu\t%d\t%" SMAXHOST "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>DNSZ)?DNSZ:r.size); + + /* Print out tab delimited line */ + /* Format: IP timestamp numeric hostname */ + fprintf(out_fp,"%s\t%lu\t%d\t%s\n", + ip_buf,dns_rec.timeStamp, + dns_rec.numeric, + dns_rec.hostName); + + /* done, clear for next rec */ + memset(&q, 0, sizeof(DBT)); + memset(&r, 0, sizeof(DBT)); + } + dns_db->close(dns_db,0); + fclose(out_fp); + + if (verbose) printf("%llu records exported from '%s' to file '%s'\n", + t_rec, in_file, out_file); +} + +/*********************************************/ +/* DB_PUT - put key/val in the cache db */ +/*********************************************/ + +static int db_put(char *key, char *value, int numeric, time_t ttl) +{ + + /* dnsRecord structure used in database */ + struct dnsRecord + { + time_t timeStamp; /* Timestamp of resolv data */ + int numeric; /* 0: Name, 1: IP-address */ + char hostName[1]; /* Hostname buffer (variable) */ + }; + + int i; + DBT k, v; + struct dnsRecord *recPtr = NULL; + int nameLen = strlen(value)+1; + + /* Align to multiple of eight bytes */ + int recSize = (sizeof(struct dnsRecord)+nameLen+7) & ~0x7; + + /* make sure we have a db ;) */ + if(dns_db) + { + if((recPtr = calloc(1, recSize))) + { + recPtr->timeStamp = ttl; + recPtr->numeric = numeric; + memcpy(&recPtr->hostName, value, nameLen); + memset(&k, 0, sizeof(k)); + memset(&v, 0, sizeof(v)); + + k.data = key; + k.size = strlen(key); + + v.size = recSize; + v.data = recPtr; + + if ( (i=dns_db->put(dns_db, NULL, &k, &v, 0)) != 0 ) + fprintf(stderr,"Error: db_put fail: %s!\n",db_strerror(i)); + free(recPtr); + } + else return 1; + } + else return 1; + return i; +} +#endif /* USE_DNS */ diff --git a/webalizer-2.23-08/wcmgr.o b/webalizer-2.23-08/wcmgr.o new file mode 100644 index 0000000000000000000000000000000000000000..4b07ddf1637c97396f50398903fa8aeda296ed0e GIT binary patch literal 37488 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 Ms)voBeA?&#FV#(gHUIzs literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/webalizer b/webalizer-2.23-08/webalizer new file mode 100755 index 0000000000000000000000000000000000000000..09a0d8e2db6135ff03474edb535ad26d3259b97d GIT binary patch literal 190136 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%0Ad$t>6i1{q( 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 literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/webalizer.1 b/webalizer-2.23-08/webalizer.1 new file mode 100644 index 0000000..bd94cb4 --- /dev/null +++ b/webalizer-2.23-08/webalizer.1 @@ -0,0 +1,905 @@ +.TH webalizer 1 "26-Feb-2013" "Version 2.23" "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.23 +.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-2013 by Bradford L. Barrett. Distributed under +the GNU GPL. See the files "\fICOPYING\fP" and "\fICopyright\fP", +supplied with all distributions for additional information. +.SH AUTHOR +Bradford L. Barrett <\fIbrad at mrunix dot net\fP> diff --git a/webalizer-2.23-08/webalizer.LSM b/webalizer-2.23-08/webalizer.LSM new file mode 100644 index 0000000..f975c40 --- /dev/null +++ b/webalizer-2.23-08/webalizer.LSM @@ -0,0 +1,26 @@ +Begin3 +Title: The Webalizer +Version: 2.20 +Entered-date: 01JUN2008 +Description: A fast, free web server log file analysis program. Produces + HTML output for viewing with a web browser. Written in C on + a Linux platform, however designed to be as ANSI/POSIX + compliant as possible so porting to other UNIX platforms should + be painless. Binary distributions for most popular platforms + are available. Features multiple language support, incremental + processing capabilities, reverse DNS lookup support, native + geolocation support as well as geolocation support via the + optional GeoIP library and database from MaxMind Inc., data + export via tab delimited ASCII files to popular databases and + spreadsheets, and much more. Supports all standard CLF and + combined web logs, wu-ftpd xferlog, squid proxy and extended + W3C format logs, all of which can be either in standard text + format or compressed using gzip or bzip2. +Keywords: Web Analysis, Log Analysis, Linux, Unix, apache, wcmgr, GeoDB +Author: Bradford L. Barrett +Maintained-by: Bradford L. Barrett +Primary-site: http://www.webalizer.org/ +Original-site: ftp://ftp.webalizer.org/pub/webalizer/ +Platforms: Linux/Unix, OS/2, Win32, MacOSX, POSIX +Copying-policy: GPL +End diff --git a/webalizer-2.23-08/webalizer.c b/webalizer-2.23-08/webalizer.c new file mode 100644 index 0000000..70ebd68 --- /dev/null +++ b/webalizer-2.23-08/webalizer.c @@ -0,0 +1,2479 @@ +/* + webalizer - a web server log analysis program + + Copyright (C) 1997-2013 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 = "08"; /* edit level */ +char *moddate = "26-Aug-2013"; /* modification date */ +char *copyright = "Copyright 1997-2013 by Bradford L. Barrett"; + +int verbose = 2; /* 2=verbose,1=err, 0=none */ +int debug_mode = 0; /* debug mode flag */ +int time_me = 0; /* timing display flag */ +int local_time = 1; /* 1=localtime 0=GMT (UTC) */ +int hist_gap = 0; /* 1=error w/hist, save bkp */ +int ignore_hist = 0; /* history flag (1=skip) */ +int ignore_state = 0; /* state flag (1=skip) */ +int default_index= 1; /* default index. (1=yes) */ +int hourly_graph = 1; /* hourly graph display */ +int hourly_stats = 1; /* hourly stats table */ +int daily_graph = 1; /* daily graph display */ +int daily_stats = 1; /* daily stats table */ +int ctry_graph = 1; /* country graph display */ +int shade_groups = 1; /* Group shading 0=no 1=yes */ +int hlite_groups = 1; /* Group hlite 0=no 1=yes */ +int mangle_agent = 0; /* mangle user agents */ +int incremental = 0; /* incremental mode 1=yes */ +int use_https = 0; /* use 'https://' on URLs */ +int htaccess = 0; /* create .htaccess? (0=no) */ +int stripcgi = 1; /* strip url cgi (0=no) */ +int normalize = 1; /* normalize CLF URL (0=no) */ +int trimsquid = 0; /* trim squid urls (0=no) */ +int searchcasei = 1; /* case insensitive search */ +int visit_timeout= 1800; /* visit timeout (seconds) */ +int graph_legend = 1; /* graph legend (1=yes) */ +int graph_lines = 2; /* graph lines (0=none) */ +int fold_seq_err = 0; /* fold seq err (0=no) */ +int log_type = LOG_CLF; /* log type (default=CLF) */ +int group_domains= 0; /* Group domains 0=none */ +int hide_sites = 0; /* Hide ind. sites (0=no) */ +int link_referrer= 0; /* Link referrers (0=no) */ +char *hname = NULL; /* hostname for reports */ +char *state_fname = "webalizer.current"; /* run state file name */ +char *hist_fname = "webalizer.hist"; /* name of history file */ +char *html_ext = "html"; /* HTML file suffix */ +char *dump_ext = "tab"; /* Dump file suffix */ +char *conf_fname = NULL; /* name of config file */ +char *log_fname = NULL; /* log file pointer */ +char *out_dir = NULL; /* output directory */ +char *blank_str = ""; /* blank string */ +char *geodb_fname = NULL; /* GeoDB database filename */ +char *dns_cache = NULL; /* DNS cache file name */ +int dns_children = 0; /* DNS children (0=don't do)*/ +int cache_ips = 0; /* CacheIPs in DB (0=no) */ +int cache_ttl = 7; /* DNS Cache TTL (days) */ +int geodb = 0; /* Use GeoDB (0=no) */ +int graph_mths = 12; /* # months in index graph */ +int index_mths = 12; /* # months in index table */ +int year_hdrs = 1; /* index year seperators */ +int year_totals = 1; /* index year subtotals */ +int use_flags = 0; /* Show flags in ctry table */ +char *flag_dir = "flags"; /* location of flag icons */ + +#ifdef USE_GEOIP +int geoip = 0; /* Use GeoIP (0=no) */ +char *geoip_db = NULL; /* GeoIP database filename */ +GeoIP *geo_fp = NULL; /* GeoIP database handle */ +#endif + +int ntop_sites = 30; /* top n sites to display */ +int ntop_sitesK = 10; /* top n sites (by kbytes) */ +int ntop_urls = 30; /* top n url's to display */ +int ntop_urlsK = 10; /* top n url's (by kbytes) */ +int ntop_entry = 10; /* top n entry url's */ +int ntop_exit = 10; /* top n exit url's */ +int ntop_refs = 30; /* top n referrers "" */ +int ntop_agents = 15; /* top n user agents "" */ +int ntop_ctrys = 30; /* top n countries "" */ +int ntop_search = 20; /* top n search strings */ +int ntop_users = 20; /* top n users to display */ + +int all_sites = 0; /* List All sites (0=no) */ +int all_urls = 0; /* List All URLs (0=no) */ +int all_refs = 0; /* List All Referrers */ +int all_agents = 0; /* List All User Agents */ +int all_search = 0; /* List All Search Strings */ +int all_users = 0; /* List All Usernames */ + +int dump_sites = 0; /* Dump tab delimited sites */ +int dump_urls = 0; /* URLs */ +int dump_refs = 0; /* Referrers */ +int dump_agents = 0; /* User Agents */ +int dump_users = 0; /* Usernames */ +int dump_search = 0; /* Search strings */ +int dump_header = 0; /* Dump header as first rec */ +char *dump_path = NULL; /* Path for dump files */ + +int cur_year=0, cur_month=0, /* year/month/day/hour */ + cur_day=0, cur_hour=0, /* tracking variables */ + cur_min=0, cur_sec=0; + +u_int64_t cur_tstamp=0; /* Timestamp... */ +u_int64_t rec_tstamp=0; +u_int64_t req_tstamp=0; +u_int64_t epoch; /* used for timestamp adj. */ + +int check_dup=0; /* check for dup flag */ +int gz_log=COMP_NONE; /* gziped log? (0=no) */ + +double t_xfer=0.0; /* monthly total xfer value */ +u_int64_t t_hit=0,t_file=0,t_site=0, /* monthly total vars */ + t_url=0,t_ref=0,t_agent=0, + t_page=0, t_visit=0, t_user=0; + +double tm_xfer[31]; /* daily transfer totals */ + +u_int64_t tm_hit[31], tm_file[31], /* daily total arrays */ + tm_site[31], tm_page[31], + tm_visit[31]; + +u_int64_t dt_site; /* daily 'sites' total */ + +u_int64_t ht_hit=0, mh_hit=0; /* hourly hits totals */ + +u_int64_t th_hit[24], th_file[24], /* hourly total arrays */ + th_page[24]; + +double th_xfer[24]; + +int f_day,l_day; /* first/last day vars */ + +struct utsname system_info; /* system info structure */ + +u_int64_t ul_bogus =0; /* Dummy counter for groups */ + +struct log_struct log_rec; /* expanded log storage */ + +void *zlog_fp; /* compressed logfile ptr */ +FILE *log_fp; /* regular logfile pointer */ + +char buffer[BUFSIZE]; /* log file record buffer */ +char tmp_buf[BUFSIZE]; /* used to temp save above */ + +CLISTPTR *top_ctrys = NULL; /* Top countries table */ + +#define GZ_BUFSIZE 16384 /* our_getfs buffer size */ +char f_buf[GZ_BUFSIZE]; /* our_getfs buffer */ +char *f_cp=f_buf+GZ_BUFSIZE; /* pointer into the buffer */ +int f_end=0; /* count to end of buffer */ + +char hit_color[] = "#00805c"; /* graph hit color */ +char file_color[] = "#0040ff"; /* graph file color */ +char site_color[] = "#ff8000"; /* graph site color */ +char kbyte_color[] = "#ff0000"; /* graph kbyte color */ +char page_color[] = "#00e0ff"; /* graph page color */ +char visit_color[] = "#ffff00"; /* graph visit color */ +char misc_color[] = "#00e0ff"; /* graph misc color */ +char pie_color1[] = "#800080"; /* pie additionnal color 1 */ +char pie_color2[] = "#80ffc0"; /* pie additionnal color 2 */ +char pie_color3[] = "#ff00ff"; /* pie additionnal color 3 */ +char pie_color4[] = "#ffc080"; /* pie additionnal color 4 */ + +/*********************************************/ +/* MAIN - start here */ +/*********************************************/ + +int main(int argc, char *argv[]) +{ + int i; /* generic counter */ + char *cp1, *cp2, *cp3; /* generic char pointers */ + char host_buf[MAXHOST+1]; /* used to save hostname */ + + NLISTPTR lptr; /* generic list pointer */ + + extern char *optarg; /* used for command line */ + extern int optind; /* parsing routine 'getopt' */ + extern int opterr; + + time_t start_time, end_time; /* program timers */ + float temp_time; /* temporary time storage */ + + int rec_year,rec_month=1,rec_day,rec_hour,rec_min,rec_sec; + + int good_rec =0; /* 1 if we had a good record */ + u_int64_t total_rec =0; /* Total Records Processed */ + u_int64_t total_ignore=0; /* Total Records Ignored */ + u_int64_t total_bad =0; /* Total Bad Records */ + + int max_ctry; /* max countries defined */ + + /* month names used for parsing logfile (shouldn't be lang specific) */ + char *log_month[12]={ "jan", "feb", "mar", + "apr", "may", "jun", + "jul", "aug", "sep", + "oct", "nov", "dec"}; + + /* stat struct for files */ + struct stat log_stat; + + /* Assume that LC_CTYPE is what the user wants for non-ASCII chars */ + setlocale(LC_CTYPE,""); + + /* initalize epoch */ + epoch=jdate(1,1,1970); /* used for timestamp adj. */ + + sprintf(tmp_buf,"%s/webalizer.conf",ETCDIR); + /* check for default config file */ + if (!access("webalizer.conf",F_OK)) + get_config("webalizer.conf"); + else if (!access(tmp_buf,F_OK)) + get_config(tmp_buf); + + /* get command line options */ + opterr = 0; /* disable parser errors */ + while ((i=getopt(argc,argv,"a:A:bc:C:dD:e:E:fF:g:GhHiI:jJ:k:K:l:Lm:M:n:N:o:O:pP:qQr:R:s:S:t:Tu:U:vVwW:x:XYz:Z"))!=EOF) + { + switch (i) + { + case 'a': add_nlist(optarg,&hidden_agents); break; /* Hide agents */ + case 'A': ntop_agents=atoi(optarg); break; /* Top agents */ + case 'b': ignore_state=1; break; /* Ignore state file */ + case 'c': get_config(optarg); break; /* Config file */ + case 'C': ntop_ctrys=atoi(optarg); break; /* Top countries */ + case 'd': debug_mode=1; break; /* Debug */ + case 'D': dns_cache=optarg; break; /* DNS Cache filename */ + case 'e': ntop_entry=atoi(optarg); break; /* Top entry pages */ + case 'E': ntop_exit=atoi(optarg); break; /* Top exit pages */ + case 'f': fold_seq_err=1; break; /* Fold sequence errs */ + case 'F': log_type=(tolower(optarg[0])=='f')? + LOG_FTP:(tolower(optarg[0])=='s')? + LOG_SQUID:(tolower(optarg[0])=='w')? + LOG_W3C:LOG_CLF; break; /* define log type */ + case 'g': group_domains=atoi(optarg); break; /* GroupDomains (0=no) */ + case 'G': hourly_graph=0; break; /* no hourly graph */ + case 'h': print_opts(argv[0]); break; /* help */ + case 'H': hourly_stats=0; break; /* no hourly stats */ + case 'i': ignore_hist=1; break; /* Ignore history */ + case 'I': add_nlist(optarg,&index_alias); break; /* Index alias */ + case 'j': geodb=1; break; /* Enable GeoDB */ + case 'J': geodb_fname=optarg; break; /* GeoDB db filename */ + case 'k': graph_mths=atoi(optarg); break; /* # months idx graph */ + case 'K': index_mths=atoi(optarg); break; /* # months idx table */ + case 'l': graph_lines=atoi(optarg); break; /* Graph Lines */ + case 'L': graph_legend=0; break; /* Graph Legends */ + case 'm': visit_timeout=atoi(optarg); break; /* Visit Timeout */ + case 'M': mangle_agent=atoi(optarg); break; /* mangle user agents */ + case 'n': hname=optarg; break; /* Hostname */ + case 'N': dns_children=atoi(optarg); break; /* # of DNS children */ + case 'o': out_dir=optarg; break; /* Output directory */ + case 'O': add_nlist(optarg,&omit_page); break; /* pages not counted */ + case 'p': incremental=1; break; /* Incremental run */ + case 'P': add_nlist(optarg,&page_type); break; /* page view types */ + case 'q': verbose=1; break; /* Quiet (verbose=1) */ + case 'Q': verbose=0; break; /* Really Quiet */ + case 'r': add_nlist(optarg,&hidden_refs); break; /* Hide referrer */ + case 'R': ntop_refs=atoi(optarg); break; /* Top referrers */ + case 's': add_nlist(optarg,&hidden_sites); break; /* Hide site */ + case 'S': ntop_sites=atoi(optarg); break; /* Top sites */ + case 't': msg_title=optarg; break; /* Report title */ + case 'T': time_me=1; break; /* TimeMe */ + case 'u': add_nlist(optarg,&hidden_urls); break; /* hide URL */ + case 'U': ntop_urls=atoi(optarg); break; /* Top urls */ + case 'v': verbose=2; debug_mode=1; break; /* Verbose */ + case 'V': print_version(); break; /* Version */ +#ifdef USE_GEOIP + case 'w': geoip=1; break; /* Enable GeoIP */ + case 'W': geoip_db=optarg; break; /* GeoIP database name */ +#endif + case 'x': html_ext=optarg; break; /* HTML file extension */ + case 'X': hide_sites=1; break; /* Hide ind. sites */ + case 'Y': ctry_graph=0; break; /* Supress ctry graph */ + case 'Z': normalize=0; break; /* Dont normalize URLs */ + case 'z': use_flags=1; flag_dir=optarg; break; /* Ctry flag dir */ + } + } + + if (argc - optind != 0) log_fname = argv[optind]; + if ( log_fname && (log_fname[0]=='-')) log_fname=NULL; /* force STDIN? */ + + /* check for gzipped file - .gz */ + if (log_fname) if (!strcmp((log_fname+strlen(log_fname)-3),".gz")) + gz_log=COMP_GZIP; + +#ifdef USE_BZIP + /* check for bzip file - .bz2 */ + if (log_fname) if (!strcmp((log_fname+strlen(log_fname)-4),".bz2")) + gz_log=COMP_BZIP; +#endif + + /* setup our internal variables */ + init_counters(); /* initalize (zero) main counters */ + memset(hist, 0, sizeof(hist)); /* initalize (zero) history array */ + + /* add default index. alias if needed */ + if (default_index) add_nlist("index.",&index_alias); + + if (page_type==NULL) /* check if page types present */ + { + if ((log_type==LOG_CLF)||(log_type==LOG_SQUID)||(log_type==LOG_W3C)) + { + add_nlist("htm*" ,&page_type); /* if no page types specified, we */ + add_nlist("cgi" ,&page_type); /* use the default ones here... */ + if (!isinlist(page_type,html_ext)) add_nlist(html_ext,&page_type); + } + else add_nlist("txt" ,&page_type); /* FTP logs default to .txt */ + } + + for (max_ctry=0;ctry[max_ctry].desc;max_ctry++); + if (ntop_ctrys > max_ctry) ntop_ctrys = max_ctry; /* force upper limit */ + if (graph_lines> 20) graph_lines= 20; /* keep graphs sane! */ + if (graph_mths<12) graph_mths=12; + if (graph_mths>GRAPHMAX) graph_mths=GRAPHMAX; + if (index_mths<12) index_mths=12; + if (index_mths>HISTSIZE) index_mths=HISTSIZE; + + if (log_type == LOG_FTP) + { + /* disable stuff for ftp logs */ + ntop_entry=ntop_exit=0; + ntop_search=0; + } + else + { + if (search_list==NULL) + { + /* If no search engines defined, define some :) */ + add_glist(".google. q=" ,&search_list); + add_glist("yahoo.com p=" ,&search_list); + add_glist("altavista.com q=" ,&search_list); + add_glist("aolsearch. query=" ,&search_list); + add_glist("ask.co q=" ,&search_list); + add_glist("eureka.com q=" ,&search_list); + add_glist("lycos.com query=" ,&search_list); + add_glist("hotbot.com MT=" ,&search_list); + add_glist("msn.com q=" ,&search_list); + add_glist("infoseek.com qt=" ,&search_list); + add_glist("webcrawler searchText=" ,&search_list); + add_glist("excite search=" ,&search_list); + add_glist("netscape.com query=" ,&search_list); + add_glist("mamma.com query=" ,&search_list); + add_glist("alltheweb.com q=" ,&search_list); + add_glist("northernlight.com qr=" ,&search_list); + } + } + + /* ensure entry/exits don't exceed urls */ + i=(ntop_urls>ntop_urlsK)?ntop_urls:ntop_urlsK; + if (ntop_entry>i) ntop_entry=i; + if (ntop_exit>i) ntop_exit=i; + + for (i=0;i<MAXHASH;i++) + { + sm_htab[i]=sd_htab[i]=NULL; /* initalize hash tables */ + um_htab[i]=NULL; + rm_htab[i]=NULL; + am_htab[i]=NULL; + sr_htab[i]=NULL; + } + + /* Be polite and announce yourself... */ + if (verbose>1) + { + uname(&system_info); + printf("Webalizer V%s-%s (%s %s %s) %s\n", version,editlvl, + system_info.sysname, system_info.release, + system_info.machine,language); + } + +#ifndef USE_DNS + if (strstr(argv[0],"webazolver")!=0) + /* DNS support not present, aborting... */ + { printf("%s\n",msg_dns_abrt); exit(1); } +#else + /* Force sane values for cache TTL */ + if (cache_ttl<1) cache_ttl=1; + if (cache_ttl>100) cache_ttl=100; +#endif /* USE_DNS */ + + /* open log file */ + if (log_fname) + { + /* stat the file */ + if ( !(lstat(log_fname, &log_stat)) ) + { + /* check if the file a symlink */ + if ( S_ISLNK(log_stat.st_mode) ) + { + if (verbose) + fprintf(stderr,"%s %s (symlink)\n",msg_log_err,log_fname); + exit(EBADF); + } + } + + if (gz_log) + { + /* open compressed file */ +#ifdef USE_BZIP + if (gz_log==COMP_BZIP) + zlog_fp = BZ2_bzopen(log_fname,"rb"); + else +#endif + zlog_fp = gzopen(log_fname, "rb"); + if (zlog_fp==Z_NULL) + { + /* Error: Can't open log file ... */ + fprintf(stderr, "%s %s (%d)\n",msg_log_err,log_fname,ENOENT); + exit(ENOENT); + } + } + else + { + /* open regular file */ + log_fp = fopen(log_fname,"r"); + if (log_fp==NULL) + { + /* Error: Can't open log file ... */ + fprintf(stderr, "%s %s\n",msg_log_err,log_fname); + exit(1); + } + } + } + + /* Using logfile ... */ + if (verbose>1) + { + printf("%s %s (",msg_log_use,log_fname?log_fname:"STDIN"); + if (gz_log==COMP_GZIP) printf("gzip-"); +#ifdef USE_BZIP + if (gz_log==COMP_BZIP) printf("bzip-"); +#endif + switch (log_type) + { + /* display log file type hint */ + case LOG_CLF: printf("clf)\n"); break; + case LOG_FTP: printf("ftp)\n"); break; + case LOG_SQUID: printf("squid)\n"); break; + case LOG_W3C: printf("w3c)\n"); break; + } + } + + /* switch directories if needed */ + if (out_dir) + { + if (chdir(out_dir) != 0) + { + /* Error: Can't change directory to ... */ + fprintf(stderr, "%s %s\n",msg_dir_err,out_dir); + exit(1); + } + } + +#ifdef USE_DNS + if (strstr(argv[0],"webazolver")!=0) + { + if (!dns_children) dns_children=5; /* default dns children if needed */ + if (!dns_cache) + { + /* No cache file specified, aborting... */ + fprintf(stderr,"%s\n",msg_dns_nocf); /* Must have a cache file */ + exit(1); + } + } + + if (dns_cache && dns_children) /* run-time resolution */ + { + if (dns_children > MAXCHILD) dns_children=MAXCHILD; + /* DNS Lookup (#children): */ + if (verbose>1) printf("%s (%d): ",msg_dns_rslv,dns_children); + fflush(stdout); + (gz_log)?dns_resolver(zlog_fp):dns_resolver(log_fp); +#ifdef USE_BZIP + (gz_log==COMP_BZIP)?bz2_rewind(&zlog_fp, log_fname, "rb"): +#endif + (gz_log==COMP_GZIP)?gzrewind(zlog_fp): + (log_fname)?rewind(log_fp):exit(0); + } + + if (strstr(argv[0],"webazolver")!=0) exit(0); /* webazolver exits here */ + + if (dns_cache) + { + if (!open_cache()) { dns_cache=NULL; dns_db=NULL; } + else + { + /* Using DNS cache file <filaneme> */ + if (verbose>1) printf("%s %s\n",msg_dns_usec,dns_cache); + } + } + + /* Open GeoDB? */ + if (geodb) + { + geo_db=geodb_open(geodb_fname); + if (geo_db==NULL) + { + if (verbose) printf("%s: %s\n",msg_geo_open, + (geodb_fname)?geodb_fname:msg_geo_dflt); + if (verbose) printf("GeoDB %s\n",msg_geo_nolu); + geodb=0; + } + else if (verbose>1) printf("%s %s\n", + msg_geo_use,geodb_ver(geo_db,buffer)); +#ifdef USE_GEOIP + if (geoip) geoip=0; /* Disable GeoIP if using GeoDB */ +#endif + } +#endif /* USE_DNS */ + +#ifdef USE_GEOIP + /* open GeoIP database */ + if (geoip) + { + if (geoip_db!=NULL) + geo_fp=GeoIP_open(geoip_db, GEOIP_MEMORY_CACHE); + else + geo_fp=GeoIP_new(GEOIP_MEMORY_CACHE); + + /* Did we open one? */ + if (geo_fp==NULL) + { + /* couldn't open.. warn user */ + if (verbose) printf("GeoIP %s\n",msg_geo_nolu); + geoip=0; + } + else if (verbose>1) printf("%s %s (%s)\n",msg_geo_use, + GeoIPDBDescription[(int)geo_fp->databaseType], + (geoip_db==NULL)?msg_geo_dflt:geo_fp->file_path); + } +#endif /* USE_GEOIP */ + + /* Creating output in ... */ + if (verbose>1) + printf("%s %s\n",msg_dir_use,out_dir?out_dir:msg_cur_dir); + + /* prep hostname */ + if (!hname) + { + if (uname(&system_info)) hname="localhost"; + else hname=system_info.nodename; + } + + /* Hostname for reports is ... */ + if (strlen(hname)) if (verbose>1) printf("%s '%s'\n",msg_hostname,hname); + + /* get past history */ + if (ignore_hist) { if (verbose>1) printf("%s\n",msg_ign_hist); } + else get_history(); + + if (incremental) /* incremental processing? */ + { + if ((i=restore_state())) /* restore internal data structs */ + { + /* Error: Unable to restore run data (error num) */ + /* if (verbose) fprintf(stderr,"%s (%d)\n",msg_bad_data,i); */ + fprintf(stderr,"%s (%d)\n",msg_bad_data,i); + exit(1); + } + } + + /* Allocate memory for our TOP countries array */ + if (ntop_ctrys != 0) + { if ( (top_ctrys=calloc(ntop_ctrys,sizeof(CLISTPTR))) == NULL) + /* Can't get memory, Top Countries disabled! */ + {if (verbose) fprintf(stderr,"%s\n",msg_nomem_tc); ntop_ctrys=0;}} + + /* get processing start time */ + start_time = time(NULL); + + /*********************************************/ + /* MAIN PROCESS LOOP - read through log file */ + /*********************************************/ + + while ( (gz_log)?(our_gzgets(zlog_fp,buffer,BUFSIZE) != Z_NULL): + (fgets(buffer,BUFSIZE,log_fname?log_fp:stdin) != NULL)) + { + total_rec++; + if (strlen(buffer) == (BUFSIZE-1)) + { + if (verbose) + { + fprintf(stderr,"%s",msg_big_rec); + if (debug_mode) fprintf(stderr,":\n%s",buffer); + else fprintf(stderr,"\n"); + } + + total_bad++; /* bump bad record counter */ + + /* get the rest of the record */ + while ( (gz_log)?(our_gzgets(zlog_fp,buffer,BUFSIZE)!=Z_NULL): + (fgets(buffer,BUFSIZE,log_fname?log_fp:stdin)!=NULL)) + { + if (strlen(buffer) < BUFSIZE-1) + { + if (debug_mode && verbose) fprintf(stderr,"%s\n",buffer); + break; + } + if (debug_mode && verbose) fprintf(stderr,"%s",buffer); + } + continue; /* go get next record if any */ + } + + /* got a record... */ + strcpy(tmp_buf, buffer); /* save buffer in case of error */ + if (parse_record(buffer)) /* parse the record */ + { + /*********************************************/ + /* PASSED MINIMAL CHECKS, DO A LITTLE MORE */ + /*********************************************/ + + /* convert month name to lowercase */ + for (i=4;i<7;i++) + log_rec.datetime[i]=tolower(log_rec.datetime[i]); + + /* lowercase sitename/IPv6 addresses */ + cp1=log_rec.hostname; + while (*cp1++!='\0') *cp1=tolower(*cp1); + + /* get year/month/day/hour/min/sec values */ + for (i=0;i<12;i++) + { + if (strncmp(log_month[i],&log_rec.datetime[4],3)==0) + { rec_month = i+1; break; } + } + + rec_year=atoi(&log_rec.datetime[8]); /* get year number (int) */ + rec_day =atoi(&log_rec.datetime[1]); /* get day number */ + rec_hour=atoi(&log_rec.datetime[13]); /* get hour number */ + rec_min =atoi(&log_rec.datetime[16]); /* get minute number */ + rec_sec =atoi(&log_rec.datetime[19]); /* get second number */ + + /* Kludge for Netscape server time (0-24?) error */ + if (rec_hour>23) rec_hour=0; + + /* minimal sanity check on date */ + if ((i>=12)||(rec_min>59)||(rec_sec>60)||(rec_year<1990)) + { + total_bad++; /* if a bad date, bump counter */ + if (verbose) + { + fprintf(stderr,"%s: %s [%llu]", + msg_bad_date,log_rec.datetime,total_rec); + if (debug_mode) fprintf(stderr,":\n%s\n",tmp_buf); + else fprintf(stderr,"\n"); + } + continue; /* and ignore this record */ + } + + /*********************************************/ + /* GOOD RECORD, CHECK INCREMENTAL/TIMESTAMPS */ + /*********************************************/ + + /* Flag as a good one */ + good_rec = 1; + + /* get current records timestamp (seconds since epoch) */ + req_tstamp=cur_tstamp; + rec_tstamp=((jdate(rec_day,rec_month,rec_year)-epoch)*86400)+ + (rec_hour*3600)+(rec_min*60)+rec_sec; + + /* Do we need to check for duplicate records? (incremental mode) */ + if (check_dup) + { + /* check if less than/equal to last record processed */ + if ( rec_tstamp <= cur_tstamp ) + { + /* if it is, assume we have already processed and ignore it */ + total_ignore++; + continue; + } + else + { + /* if it isn't.. disable any more checks this run */ + check_dup=0; + /* now check if it's a new month */ + if ( (cur_month != rec_month) || (cur_year != rec_year) ) + { + clear_month(); + cur_sec = rec_sec; /* set current counters */ + cur_min = rec_min; + cur_hour = rec_hour; + cur_day = rec_day; + cur_month = rec_month; + cur_year = rec_year; + cur_tstamp= rec_tstamp; + f_day=l_day=rec_day; /* reset first and last day */ + } + } + } + + /* check for out of sequence records */ + if (rec_tstamp/3600 < cur_tstamp/3600) + { + if (!fold_seq_err && ((rec_tstamp+SLOP_VAL)/3600<cur_tstamp/3600) ) + { total_ignore++; continue; } + else + { + rec_sec = cur_sec; /* if folding sequence */ + rec_min = cur_min; /* errors, just make it */ + rec_hour = cur_hour; /* look like the last */ + rec_day = cur_day; /* good records timestamp */ + rec_month = cur_month; + rec_year = cur_year; + rec_tstamp= cur_tstamp; + } + } + cur_tstamp=rec_tstamp; /* update current timestamp */ + + /*********************************************/ + /* DO SOME PRE-PROCESS FORMATTING */ + /*********************************************/ + + /* un-escape URL */ + unescape(log_rec.url); + + /* fix URL field */ + cp1 = cp2 = log_rec.url; + /* handle null '-' case here... */ + if (*++cp1 == '-') strcpy(log_rec.url,"/INVALID-URL"); + else + { + /* strip actual URL out of request */ + while ( (*cp1 != ' ') && (*cp1 != '\0') ) cp1++; + if (*cp1 != '\0') + { + /* scan to begin of actual URL field */ + while ((*cp1 == ' ') && (*cp1 != '\0')) cp1++; + /* remove duplicate / if needed */ + while (( *cp1=='/') && (*(cp1+1)=='/')) cp1++; + while (( *cp1!='\0')&&(*cp1!='"')) *cp2++=*cp1++; + *cp2='\0'; + } + } + + /* strip query portion of cgi scripts */ + cp1 = log_rec.url; + while (*cp1 != '\0') + if (!isurlchar(*cp1, stripcgi)) { *cp1 = '\0'; break; } + else cp1++; + if (log_rec.url[0]=='\0') + { log_rec.url[0]='/'; log_rec.url[1]='\0'; } + + /* Normalize URL */ + if (log_type==LOG_CLF && log_rec.resp_code!=RC_NOTFOUND && normalize) + { + if ( ((cp2=strstr(log_rec.url,"://"))!=NULL)&&(cp2<log_rec.url+6) ) + { + cp1=cp2+3; + /* see if a '/' is present after it */ + if ( (cp2=strchr(cp1,(int)'/'))==NULL) cp1--; + else cp1=cp2; + /* Ok, now shift url string */ + cp2=log_rec.url; while (*cp1!='\0') *cp2++=*cp1++; *cp2='\0'; + } + /* extra sanity checks on URL string */ + while ((cp2=strstr(log_rec.url,"/./"))) + { cp1=cp2+2; while (*cp1!='\0') *cp2++=*cp1++; *cp2='\0'; } + if (log_rec.url[0]!='/') + { + if ( log_rec.resp_code==RC_OK || + log_rec.resp_code==RC_PARTIALCONTENT || + log_rec.resp_code==RC_NOMOD) + { + if (debug_mode) + fprintf(stderr,"Converted URL '%s' to '/'\n",log_rec.url); + log_rec.url[0]='/'; + log_rec.url[1]='\0'; + } + else + { + if (debug_mode) + fprintf(stderr,"Invalid URL: '%s'\n",log_rec.url); + strcpy(log_rec.url,"/INVALID-URL"); + } + } + while ( log_rec.url[ (i=strlen(log_rec.url)-1) ] == '?' ) + log_rec.url[i]='\0'; /* drop trailing ?s if any */ + } + else + { + /* check for service (ie: http://) and lowercase if found */ + if (((cp2=strstr(log_rec.url,"://"))!= NULL)&&(cp2<log_rec.url+6)) + { + cp1=log_rec.url; + while (cp1!=cp2) + { + if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; + cp1++; + } + } + } + + /* strip off index.html (or any aliases) */ + lptr=index_alias; + while (lptr!=NULL) + { + if ((cp1=strstr(log_rec.url,lptr->string))!=NULL) + { + if (*(cp1-1)=='/') + { + if ( !stripcgi && (cp2=strchr(cp1,'?'))!=NULL ) + { while(*cp2) *cp1++=*cp2++; *cp1='\0'; } + else *cp1='\0'; + break; + } + } + lptr=lptr->next; + } + + /* unescape referrer */ + unescape(log_rec.refer); + + /* fix referrer field */ + cp1 = log_rec.refer; + cp3 = cp2 = cp1++; + if ( (*cp2 != '\0') && (*cp2 == '"') ) + { + while ( *cp1 != '\0' ) + { + cp3=cp2; + if (((unsigned char)*cp1<32&&(unsigned char)*cp1>0) || + *cp1==127 || (unsigned char)*cp1=='<') *cp1=0; + else *cp2++=*cp1++; + } + *cp3 = '\0'; + } + + /* get query portion of cgi referrals */ + cp1 = log_rec.refer; + if (*cp1 != '\0') + { + while (*cp1 != '\0') + { + if (!isurlchar(*cp1, 1)) + { + /* Save query portion in log.rec.srchstr */ + strncpy(log_rec.srchstr,(char *)cp1,MAXSRCH); + *cp1++='\0'; + break; + } + else cp1++; + } + /* handle null referrer */ + if (log_rec.refer[0]=='\0') + { log_rec.refer[0]='-'; log_rec.refer[1]='\0'; } + } + + /* if HTTP request, lowercase http://sitename/ portion */ + cp1 = log_rec.refer; + if ( (*cp1=='h') || (*cp1=='H')) + { + while ( (*cp1!='/') && (*cp1!='\0')) + { + if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; + cp1++; + } + /* now do hostname */ + if ( (*cp1=='/') && ( *(cp1+1)=='/')) {cp1++; cp1++;} + while ( (*cp1!='/') && (*cp1!='\0')) + { + if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; + cp1++; + } + } + + /* Do we need to mangle? */ + if (mangle_agent) agent_mangle(log_rec.agent); + + /* if necessary, shrink referrer to fit storage */ + if (strlen(log_rec.refer)>=MAXREFH) + { + if (verbose) fprintf(stderr,"%s [%llu]\n", + msg_big_ref,total_rec); + log_rec.refer[MAXREFH-1]='\0'; + } + + /* if necessary, shrink URL to fit storage */ + if (strlen(log_rec.url)>=MAXURLH) + { + if (verbose) fprintf(stderr,"%s [%llu]\n", + msg_big_req,total_rec); + log_rec.url[MAXURLH-1]='\0'; + } + + /* fix user agent field */ + cp1 = log_rec.agent; + cp3 = cp2 = cp1++; + if ( (*cp2 != '\0') && ((*cp2 == '"')||(*cp2 == '(')) ) + { + while (*cp1 != '\0') { cp3 = cp2; *cp2++ = *cp1++; } + *cp3 = '\0'; + } + cp1 = log_rec.agent; /* CHANGE !!! */ + while (*cp1 != 0) /* get rid of more common _bad_ chars ;) */ + { + if ( ((unsigned char)*cp1 < 32) || + ((unsigned char)*cp1==127) || + (*cp1=='<') || (*cp1=='>') ) + { *cp1='\0'; break; } + else cp1++; + } + + /* fix username if needed */ + if (log_rec.ident[0]==0) + { log_rec.ident[0]='-'; log_rec.ident[1]='\0'; } + else + { + cp3=log_rec.ident; + while ((unsigned char)*cp3>=32 && *cp3!='"') cp3++; + *cp3='\0'; + } + /* unescape user name */ + unescape(log_rec.ident); + + /********************************************/ + /* PROCESS RECORD */ + /********************************************/ + + /* first time through? */ + if (cur_month == 0) + { + /* if yes, init our date vars */ + cur_month=rec_month; cur_year=rec_year; + cur_day=rec_day; cur_hour=rec_hour; + cur_min=rec_min; cur_sec=rec_sec; + f_day=rec_day; + } + + /* adjust last day processed if different */ + if (rec_day > l_day) l_day = rec_day; + + /* update min/sec stuff */ + if (cur_sec != rec_sec) cur_sec = rec_sec; + if (cur_min != rec_min) cur_min = rec_min; + + /* check for hour change */ + if (cur_hour != rec_hour) + { + /* if yes, init hourly stuff */ + if (ht_hit > mh_hit) mh_hit = ht_hit; + ht_hit = 0; + cur_hour = rec_hour; + } + + /* check for day change */ + if (cur_day != rec_day) + { + /* if yes, init daily stuff */ + tm_site[cur_day-1]=dt_site; dt_site=0; + tm_visit[cur_day-1]=tot_visit(sd_htab); + del_hlist(sd_htab); + cur_day = rec_day; + } + + /* check for month change */ + if ( (cur_month != rec_month) || (cur_year != rec_year) ) + { + /* if yes, do monthly stuff */ + t_visit=tot_visit(sm_htab); + month_update_exit(req_tstamp); /* process exit pages */ + update_history(); + write_month_html(); /* generate HTML for month */ + clear_month(); + cur_month = rec_month; /* update our flags */ + cur_year = rec_year; + f_day=l_day=rec_day; + } + + /* save hostname for later */ + strncpy(host_buf, log_rec.hostname, sizeof(log_rec.hostname)); + +#ifdef USE_DNS + /* Resolve IP address if needed */ + if (dns_db) + { + struct addrinfo hints, *ares; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_NUMERICHOST; + if (0 == getaddrinfo(log_rec.hostname, "0", &hints, &ares)) + { + freeaddrinfo(ares); + resolve_dns(&log_rec); + } + } +#endif + /* lowercase hostname and validity check */ + cp1 = log_rec.hostname; i=0; + + if ( (!isalnum((unsigned char)*cp1)) && (*cp1!=':') ) + strncpy(log_rec.hostname, "Invalid", 8); + else + { + while (*cp1 != '\0') /* loop through string */ + { + if ( (*cp1>='A') && (*cp1<='Z') ) + { *cp1++ += 'a'-'A'; continue; } + if ( *cp1=='.' ) i++; + if ( (isalnum((unsigned char)*cp1)) || + (*cp1=='.')||(*cp1=='-') || + (*cp1==':')||((*cp1=='_')&&(i==0)) ) cp1++; + else + { + /* Invalid hostname found! */ + if (strcmp(log_rec.hostname, host_buf)) + strcpy(log_rec.hostname, host_buf); + else strncpy(log_rec.hostname,"Invalid",8); + break; + } + } + if (*cp1 == '\0') /* did we make it to the end? */ + { + if (!isalnum((unsigned char)*(cp1-1))) + strncpy(log_rec.hostname,"Invalid",8); + } + } + + /* Catch blank hostnames here */ + if (log_rec.hostname[0]=='\0') + strncpy(log_rec.hostname,"Unknown",8); + + /* Ignore/Include check */ + if ( (isinlist(include_sites,log_rec.hostname)==NULL) && + (isinlist(include_urls,log_rec.url)==NULL) && + (isinlist(include_refs,log_rec.refer)==NULL) && + (isinlist(include_agents,log_rec.agent)==NULL) && + (isinlist(include_users,log_rec.ident)==NULL) ) + { + if (isinlist(ignored_sites,log_rec.hostname)!=NULL) + { total_ignore++; continue; } + if (isinlist(ignored_urls,log_rec.url)!=NULL) + { total_ignore++; continue; } + if (isinlist(ignored_agents,log_rec.agent)!=NULL) + { total_ignore++; continue; } + if (isinlist(ignored_refs,log_rec.refer)!=NULL) + { total_ignore++; continue; } + if (isinlist(ignored_users,log_rec.ident)!=NULL) + { total_ignore++; continue; } + } + + /* Bump response code totals */ + switch (log_rec.resp_code) { + case RC_CONTINUE: i=IDX_CONTINUE; break; + case RC_SWITCHPROTO: i=IDX_SWITCHPROTO; break; + case RC_OK: i=IDX_OK; break; + case RC_CREATED: i=IDX_CREATED; break; + case RC_ACCEPTED: i=IDX_ACCEPTED; break; + case RC_NONAUTHINFO: i=IDX_NONAUTHINFO; break; + case RC_NOCONTENT: i=IDX_NOCONTENT; break; + case RC_RESETCONTENT: i=IDX_RESETCONTENT; break; + case RC_PARTIALCONTENT: i=IDX_PARTIALCONTENT; break; + case RC_MULTIPLECHOICES: i=IDX_MULTIPLECHOICES; break; + case RC_MOVEDPERM: i=IDX_MOVEDPERM; break; + case RC_MOVEDTEMP: i=IDX_MOVEDTEMP; break; + case RC_SEEOTHER: i=IDX_SEEOTHER; break; + case RC_NOMOD: i=IDX_NOMOD; break; + case RC_USEPROXY: i=IDX_USEPROXY; break; + case RC_MOVEDTEMPORARILY: i=IDX_MOVEDTEMPORARILY; break; + case RC_BAD: i=IDX_BAD; break; + case RC_UNAUTH: i=IDX_UNAUTH; break; + case RC_PAYMENTREQ: i=IDX_PAYMENTREQ; break; + case RC_FORBIDDEN: i=IDX_FORBIDDEN; break; + case RC_NOTFOUND: i=IDX_NOTFOUND; break; + case RC_METHODNOTALLOWED: i=IDX_METHODNOTALLOWED; break; + case RC_NOTACCEPTABLE: i=IDX_NOTACCEPTABLE; break; + case RC_PROXYAUTHREQ: i=IDX_PROXYAUTHREQ; break; + case RC_TIMEOUT: i=IDX_TIMEOUT; break; + case RC_CONFLICT: i=IDX_CONFLICT; break; + case RC_GONE: i=IDX_GONE; break; + case RC_LENGTHREQ: i=IDX_LENGTHREQ; break; + case RC_PREFAILED: i=IDX_PREFAILED; break; + case RC_REQENTTOOLARGE: i=IDX_REQENTTOOLARGE; break; + case RC_REQURITOOLARGE: i=IDX_REQURITOOLARGE; break; + case RC_UNSUPMEDIATYPE: i=IDX_UNSUPMEDIATYPE; break; + case RC_RNGNOTSATISFIABLE:i=IDX_RNGNOTSATISFIABLE;break; + case RC_EXPECTATIONFAILED:i=IDX_EXPECTATIONFAILED;break; + case RC_SERVERERR: i=IDX_SERVERERR; break; + case RC_NOTIMPLEMENTED: i=IDX_NOTIMPLEMENTED; break; + case RC_BADGATEWAY: i=IDX_BADGATEWAY; break; + case RC_UNAVAIL: i=IDX_UNAVAIL; break; + case RC_GATEWAYTIMEOUT: i=IDX_GATEWAYTIMEOUT; break; + case RC_BADHTTPVER: i=IDX_BADHTTPVER; break; + default: i=IDX_UNDEFINED; break; + } + response[i].count++; + + /* now save in the various hash tables... */ + if (log_rec.resp_code==RC_OK || log_rec.resp_code==RC_PARTIALCONTENT) + i=1; else i=0; + + /* URL/ident hash table (only if valid response code) */ + if ((log_rec.resp_code==RC_OK)||(log_rec.resp_code==RC_NOMOD)|| + (log_rec.resp_code==RC_PARTIALCONTENT)) + { + /* URL hash table */ + if (put_unode(log_rec.url,OBJ_REG,(u_int64_t)1, + log_rec.xfer_size,&t_url,(u_int64_t)0,(u_int64_t)0,um_htab)) + { + if (verbose) + /* Error adding URL node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_u, log_rec.url); + } + + /* ident (username) hash table */ + if (put_inode(log_rec.ident,OBJ_REG, + 1,(u_int64_t)i,log_rec.xfer_size,&t_user, + 0,rec_tstamp,im_htab)) + { + if (verbose) + /* Error adding ident node, skipping .... */ + fprintf(stderr,"%s %s\n", msg_nomem_i, log_rec.ident); + } + } + + /* referrer hash table */ + if (ntop_refs) + { + if (log_rec.refer[0]!='\0') + if (put_rnode(log_rec.refer,OBJ_REG,(u_int64_t)1,&t_ref,rm_htab)) + { + if (verbose) + fprintf(stderr,"%s %s\n", msg_nomem_r, log_rec.refer); + } + } + + /* hostname (site) hash table - daily */ + if (put_hnode(log_rec.hostname,OBJ_REG, + 1,(u_int64_t)i,log_rec.xfer_size,&dt_site, + 0,rec_tstamp,"",sd_htab)) + { + if (verbose) + /* Error adding host node (daily), skipping .... */ + fprintf(stderr,"%s %s\n",msg_nomem_dh, log_rec.hostname); + } + + /* hostname (site) hash table - monthly */ + if (put_hnode(log_rec.hostname,OBJ_REG, + 1,(u_int64_t)i,log_rec.xfer_size,&t_site, + 0,rec_tstamp,"",sm_htab)) + { + if (verbose) + /* Error adding host node (monthly), skipping .... */ + fprintf(stderr,"%s %s\n", msg_nomem_mh, log_rec.hostname); + } + + /* user agent hash table */ + if (ntop_agents) + { + if (log_rec.agent[0]!='\0') + if (put_anode(log_rec.agent,OBJ_REG,(u_int64_t)1,&t_agent,am_htab)) + { + if (verbose) + fprintf(stderr,"%s %s\n", msg_nomem_a, log_rec.agent); + } + } + + /* bump monthly/daily/hourly totals */ + t_hit++; ht_hit++; /* daily/hourly hits */ + t_xfer += log_rec.xfer_size; /* total xfer size */ + tm_xfer[rec_day-1] += log_rec.xfer_size; /* daily xfer total */ + tm_hit[rec_day-1]++; /* daily hits total */ + th_xfer[rec_hour] += log_rec.xfer_size; /* hourly xfer total */ + th_hit[rec_hour]++; /* hourly hits total */ + + /* if RC_OK, increase file counters */ + if (log_rec.resp_code == RC_OK) + { + t_file++; + tm_file[rec_day-1]++; + th_file[rec_hour]++; + } + + /* Pages (pageview) calculation */ + if (ispage(log_rec.url)) + { + t_page++; + tm_page[rec_day-1]++; + th_page[rec_hour]++; + + /* do search string stuff if needed */ + if (ntop_search) srch_string(log_rec.srchstr); + } + + /*********************************************/ + /* RECORD PROCESSED - DO GROUPS HERE */ + /*********************************************/ + + /* URL Grouping */ + if ( (cp1=isinglist(group_urls,log_rec.url))!=NULL) + { + if (put_unode(cp1,OBJ_GRP,(u_int64_t)1,log_rec.xfer_size, + &ul_bogus,(u_int64_t)0,(u_int64_t)0,um_htab)) + { + if (verbose) + /* Error adding URL node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_u, cp1); + } + } + + /* Site Grouping */ + if ( (cp1=isinglist(group_sites,log_rec.hostname))!=NULL) + { + if (put_hnode(cp1,OBJ_GRP,1, + (u_int64_t)(log_rec.resp_code==RC_OK)?1:0, + log_rec.xfer_size,&ul_bogus, + 0,rec_tstamp,"",sm_htab)) + { + if (verbose) + /* Error adding Site node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_mh, cp1); + } + } + else + { + /* Domain Grouping */ + if (group_domains) + { + cp1 = get_domain(log_rec.hostname); + if (cp1 != NULL) + { + if (put_hnode(cp1,OBJ_GRP,1, + (u_int64_t)(log_rec.resp_code==RC_OK)?1:0, + log_rec.xfer_size,&ul_bogus, + 0,rec_tstamp,"",sm_htab)) + { + if (verbose) + /* Error adding Site node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_mh, cp1); + } + } + } + } + + /* Referrer Grouping */ + if ( (cp1=isinglist(group_refs,log_rec.refer))!=NULL) + { + if (put_rnode(cp1,OBJ_GRP,(u_int64_t)1,&ul_bogus,rm_htab)) + { + if (verbose) + /* Error adding Referrer node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_r, cp1); + } + } + + /* User Agent Grouping */ + if ( (cp1=isinglist(group_agents,log_rec.agent))!=NULL) + { + if (put_anode(cp1,OBJ_GRP,(u_int64_t)1,&ul_bogus,am_htab)) + { + if (verbose) + /* Error adding User Agent node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_a, cp1); + } + } + + /* Ident (username) Grouping */ + if ( (cp1=isinglist(group_users,log_rec.ident))!=NULL) + { + if (put_inode(cp1,OBJ_GRP,1, + (u_int64_t)(log_rec.resp_code==RC_OK)?1:0, + log_rec.xfer_size,&ul_bogus, + 0,rec_tstamp,im_htab)) + { + if (verbose) + /* Error adding Username node, skipping ... */ + fprintf(stderr,"%s %s\n", msg_nomem_i, cp1); + } + } + } + + /*********************************************/ + /* BAD RECORD */ + /*********************************************/ + + else + { + /* If first record, check if stupid Netscape header stuff */ + if ( (total_rec==1) && (strncmp(buffer,"format=",7)==0) ) + { + /* Skipping Netscape header record */ + if (verbose>1) printf("%s\n",msg_ign_nscp); + /* count it as ignored... */ + total_ignore++; + } + else + { + /* Check if it's a W3C header or IIS Null-Character line */ + if ((buffer[0]=='\0') || (buffer[0]=='#')) + { + total_ignore++; + } + else + { + /* really bad record... */ + total_bad++; + if (verbose) + { + fprintf(stderr,"%s (%llu)",msg_bad_rec,total_rec); + if (debug_mode) fprintf(stderr,":\n%s\n",tmp_buf); + else fprintf(stderr,"\n"); + } + } + } + } + } + + /*********************************************/ + /* DONE READING LOG FILE - final processing */ + /*********************************************/ + + /* close log file if needed */ +#ifdef USE_BZIP + if (gz_log) (gz_log==COMP_BZIP)?BZ2_bzclose(zlog_fp):gzclose(zlog_fp); +#else + if (gz_log) gzclose(zlog_fp); +#endif + else if (log_fname) fclose(log_fp); + + if (good_rec) /* were any good records? */ + { + tm_site[cur_day-1]=dt_site; /* If yes, clean up a bit */ + tm_visit[cur_day-1]=tot_visit(sd_htab); + t_visit=tot_visit(sm_htab); + if (ht_hit > mh_hit) mh_hit = ht_hit; + + if (total_rec > (total_ignore+total_bad)) /* did we process any? */ + { + if (incremental) + { + if (save_state()) /* incremental stuff */ + { + /* Error: Unable to save current run data */ + if (verbose) fprintf(stderr,"%s\n",msg_data_err); + unlink(state_fname); + } + } + month_update_exit(rec_tstamp); /* calculate exit pages */ + update_history(); + write_month_html(); /* write monthly HTML file */ + put_history(); /* write history */ + } + if (hist[0].month!=0) write_main_index(); /* write main HTML file */ + + /* get processing end time */ + end_time = time(NULL); + + /* display end of processing statistics */ + if (time_me || (verbose>1)) + { + printf("%llu %s ",total_rec, msg_records); + if (total_ignore) + { + printf("(%llu %s",total_ignore,msg_ignored); + if (total_bad) printf(", %llu %s) ",total_bad,msg_bad); + else printf(") "); + } + else if (total_bad) printf("(%llu %s) ",total_bad,msg_bad); + + /* totoal processing time in seconds */ + temp_time = difftime(end_time, start_time); + if (temp_time==0) temp_time=1; + printf("%s %.0f %s", msg_in, temp_time, msg_seconds); + + /* calculate records per second */ + if (temp_time) + i=( (int)( (float)total_rec/temp_time ) ); + else i=0; + + if ( (i>0) && (i<=total_rec) ) printf(", %d/sec\n", i); + else printf("\n"); + } + +#ifdef USE_DNS + /* Close DNS cache file */ + if (dns_db) close_cache(); + /* Close GeoDB database */ + if (geo_db) geodb_close(geo_db); +#endif + +#ifdef USE_GEOIP + /* Close GeoIP database */ + if (geo_fp) GeoIP_delete(geo_fp); +#endif + + /* Whew, all done! Exit with completion status (0) */ + exit(0); + } + else + { + /* No valid records found... exit with error (1) */ + if (verbose) printf("%s\n",msg_no_vrec); + if (hist[0].month!=0) write_main_index(); /* write main HTML file */ + exit(1); + } +} + +/*********************************************/ +/* GET_CONFIG - get configuration file info */ +/*********************************************/ + +void get_config(char *fname) +{ + char *kwords[]= { "Undefined", /* 0 = undefined keyword 0 */ + "OutputDir", /* Output directory 1 */ + "LogFile", /* Log file to use for input 2 */ + "ReportTitle", /* Title for reports 3 */ + "HostName", /* Hostname to use 4 */ + "IgnoreHist", /* Ignore history file 5 */ + "Quiet", /* Run in quiet mode 6 */ + "TimeMe", /* Produce timing results 7 */ + "Debug", /* Produce debug information 8 */ + "HourlyGraph", /* Hourly stats graph 9 */ + "HourlyStats", /* Hourly stats table 10 */ + "TopSites", /* Top sites 11 */ + "TopURLs", /* Top URLs 12 */ + "TopReferrers", /* Top Referrers 13 */ + "TopAgents", /* Top User Agents 14 */ + "TopCountries", /* Top Countries 15 */ + "HideSite", /* Sites to hide 16 */ + "HideURL", /* URLs to hide 17 */ + "HideReferrer", /* Referrers to hide 18 */ + "HideAgent", /* User Agents to hide 19 */ + "IndexAlias", /* Aliases for index.html 20 */ + "HTMLHead", /* HTML Top1 code 21 */ + "HTMLPost", /* HTML Top2 code 22 */ + "HTMLTail", /* HTML Tail code 23 */ + "MangleAgents", /* Mangle User Agents 24 */ + "IgnoreSite", /* Sites to ignore 25 */ + "IgnoreURL", /* Url's to ignore 26 */ + "IgnoreReferrer", /* Referrers to ignore 27 */ + "IgnoreAgent", /* User Agents to ignore 28 */ + "ReallyQuiet", /* Dont display ANY messages 29 */ + "GMTTime", /* Local or UTC time? 30 */ + "GroupURL", /* Group URLs 31 */ + "GroupSite", /* Group Sites 32 */ + "GroupReferrer", /* Group Referrers 33 */ + "GroupAgent", /* Group Agents 34 */ + "GroupShading", /* Shade Grouped entries 35 */ + "GroupHighlight", /* BOLD Grouped entries 36 */ + "Incremental", /* Incremental runs 37 */ + "IncrementalName", /* Filename for state data 38 */ + "HistoryName", /* Filename for history data 39 */ + "HTMLExtension", /* HTML filename extension 40 */ + "HTMLPre", /* HTML code at beginning 41 */ + "HTMLBody", /* HTML body code 42 */ + "HTMLEnd", /* HTML code at end 43 */ + "UseHTTPS", /* Use https:// on URLs 44 */ + "IncludeSite", /* Sites to always include 45 */ + "IncludeURL", /* URLs to always include 46 */ + "IncludeReferrer", /* Referrers to include 47 */ + "IncludeAgent", /* User Agents to include 48 */ + "PageType", /* Page Type (pageview) 49 */ + "VisitTimeout", /* Visit timeout (seconds) 50 */ + "GraphLegend", /* Graph Legends (yes/no) 51 */ + "GraphLines", /* Graph Lines (0=none) 52 */ + "FoldSeqErr", /* Fold sequence errors 53 */ + "CountryGraph", /* Display ctry graph (0=no) 54 */ + "TopKSites", /* Top sites (by KBytes) 55 */ + "TopKURLs", /* Top URLs (by KBytes) 56 */ + "TopEntry", /* Top Entry Pages 57 */ + "TopExit", /* Top Exit Pages 58 */ + "TopSearch", /* Top Search Strings 59 */ + "LogType", /* Log Type (clf/ftp/squid) 60 */ + "SearchEngine", /* SearchEngine strings 61 */ + "GroupDomains", /* Group domains (n=level) 62 */ + "HideAllSites", /* Hide ind. sites (0=no) 63 */ + "AllSites", /* List all sites? 64 */ + "AllURLs", /* List all URLs? 65 */ + "AllReferrers", /* List all Referrers? 66 */ + "AllAgents", /* List all User Agents? 67 */ + "AllSearchStr", /* List all Search Strings? 68 */ + "AllUsers", /* List all Users? 69 */ + "TopUsers", /* Top Usernames to show 70 */ + "HideUser", /* Usernames to hide 71 */ + "IgnoreUser", /* Usernames to ignore 72 */ + "IncludeUser", /* Usernames to include 73 */ + "GroupUser", /* Usernames to group 74 */ + "DumpPath", /* Path for dump files 75 */ + "DumpExtension", /* Dump filename extension 76 */ + "DumpHeader", /* Dump header as first rec? 77 */ + "DumpSites", /* Dump sites tab file 78 */ + "DumpURLs", /* Dump urls tab file 79 */ + "DumpReferrers", /* Dump referrers tab file 80 */ + "DumpAgents", /* Dump user agents tab file 81 */ + "DumpUsers", /* Dump usernames tab file 82 */ + "DumpSearchStr", /* Dump search str tab file 83 */ + "DNSCache", /* DNS Cache file name 84 */ + "DNSChildren", /* DNS Children (0=no DNS) 85 */ + "DailyGraph", /* Daily Graph (0=no) 86 */ + "DailyStats", /* Daily Stats (0=no) 87 */ + "LinkReferrer", /* Link referrer (0=no) 88 */ + "PagePrefix", /* PagePrefix - treat as page 89 */ + "ColorHit", /* Hit Color (def=00805c) 90 */ + "ColorFile", /* File Color (def=0040ff) 91 */ + "ColorSite", /* Site Color (def=ff8000) 92 */ + "ColorKbyte", /* Kbyte Color (def=ff0000) 93 */ + "ColorPage", /* Page Color (def=00e0ff) 94 */ + "ColorVisit", /* Visit Color (def=ffff00) 95 */ + "ColorMisc", /* Misc Color (def=00e0ff) 96 */ + "PieColor1", /* Pie Color 1 (def=800080) 97 */ + "PieColor2", /* Pie Color 2 (def=80ffc0) 98 */ + "PieColor3", /* Pie Color 3 (def=ff00ff) 99 */ + "PieColor4", /* Pie Color 4 (def=ffc080) 100 */ + "CacheIPs", /* Cache IPs in DNS DB (0=no) 101 */ + "CacheTTL", /* DNS Cache entry TTL (days) 102 */ + "GeoDB", /* GeoDB lookups (0=no) 103 */ + "GeoDBDatabase", /* GeoDB database filename 104 */ + "StripCGI", /* Strip CGI in URLS (0=no) 105 */ + "TrimSquidURL", /* Trim squid URLs (0=none) 106 */ + "OmitPage", /* URLs not counted as pages 107 */ + "HTAccess", /* Write .httaccess files? 108 */ + "IgnoreState", /* Ignore state file (0=no) 109 */ + "DefaultIndex", /* Default index.* (1=yes) 110 */ + "GeoIP", /* Use GeoIP? (1=yes) 111 */ + "GeoIPDatabase", /* Database to use for GeoIP 112 */ + "NormalizeURL", /* Normalize CLF URLs (1=yes) 113 */ + "IndexMonths", /* # months for main page 114 */ + "GraphMonths", /* # months for yearly graph 115 */ + "YearHeaders", /* use year headers? (1=yes) 116 */ + "YearTotals", /* show year subtotals (0=no) 117 */ + "CountryFlags", /* show country flags? (0-no) 118 */ + "FlagDir", /* directory w/flag images 119 */ + "SearchCaseI" /* srch str case insensitive 120 */ + }; + + FILE *fp; + + char buffer[BUFSIZE]; + char keyword[MAXKWORD]; + char value[MAXKVAL]; + char *cp1, *cp2; + int i,key,count; + int num_kwords=sizeof(kwords)/sizeof(char *); + + if ( (fp=fopen(fname,"r")) == NULL) + { + if (verbose) + fprintf(stderr,"%s %s\n",msg_bad_conf,fname); + return; + } + + while ( (fgets(buffer,BUFSIZE,fp)) != NULL) + { + /* skip comments and blank lines */ + if ( (buffer[0]=='#') || isspace((unsigned char)buffer[0]) ) continue; + + /* Get keyword */ + cp1=buffer;cp2=keyword;count=MAXKWORD-1; + while ( (isalnum((unsigned char)*cp1)) && count ) + { *cp2++ = *cp1++; count--; } + *cp2='\0'; + + /* Get value */ + cp2=value; count=MAXKVAL-1; + while ((*cp1!='\n')&&(*cp1!='\0')&&(isspace((unsigned char)*cp1))) cp1++; + while ((*cp1!='\n')&&(*cp1!='\0')&&count ) { *cp2++ = *cp1++; count--; } + *cp2--='\0'; + while ((isspace((unsigned char)*cp2)) && (cp2 != value) ) *cp2--='\0'; + + /* check if blank keyword/value */ + if ( (keyword[0]=='\0') || (value[0]=='\0') ) continue; + + key=0; + for (i=0;i<num_kwords;i++) + if (!ouricmp(keyword,kwords[i])) { key=i; break; } + + if (key==0) { printf("%s '%s' (%s)\n", /* Invalid keyword */ + msg_bad_key,keyword,fname); + continue; + } + + switch (key) + { + case 1: out_dir=save_opt(value); break; /* OutputDir */ + case 2: log_fname=save_opt(value); break; /* LogFile */ + case 3: msg_title=save_opt(value); break; /* ReportTitle */ + case 4: hname=save_opt(value); break; /* HostName */ + case 5: ignore_hist= + (tolower(value[0])=='y')?1:0; break; /* IgnoreHist */ + case 6: verbose= + (tolower(value[0])=='y')?1:2; break; /* Quiet */ + case 7: time_me= + (tolower(value[0])=='n')?0:1; break; /* TimeMe */ + case 8: debug_mode= + (tolower(value[0])=='y')?1:0; break; /* Debug */ + case 9: hourly_graph= + (tolower(value[0])=='n')?0:1; break; /* HourlyGraph */ + case 10: hourly_stats= + (tolower(value[0])=='n')?0:1; break; /* HourlyStats */ + case 11: ntop_sites = atoi(value); break; /* TopSites */ + case 12: ntop_urls = atoi(value); break; /* TopURLs */ + case 13: ntop_refs = atoi(value); break; /* TopRefs */ + case 14: ntop_agents = atoi(value); break; /* TopAgents */ + case 15: ntop_ctrys = atoi(value); break; /* TopCountries */ + case 16: add_nlist(value,&hidden_sites); break; /* HideSite */ + case 17: add_nlist(value,&hidden_urls); break; /* HideURL */ + case 18: add_nlist(value,&hidden_refs); break; /* HideReferrer */ + case 19: add_nlist(value,&hidden_agents); break; /* HideAgent */ + case 20: add_nlist(value,&index_alias); break; /* IndexAlias */ + case 21: add_nlist(value,&html_head); break; /* HTMLHead */ + case 22: add_nlist(value,&html_post); break; /* HTMLPost */ + case 23: add_nlist(value,&html_tail); break; /* HTMLTail */ + case 24: mangle_agent=atoi(value); break; /* MangleAgents */ + case 25: add_nlist(value,&ignored_sites); break; /* IgnoreSite */ + case 26: add_nlist(value,&ignored_urls); break; /* IgnoreURL */ + case 27: add_nlist(value,&ignored_refs); break; /* IgnoreReferrer */ + case 28: add_nlist(value,&ignored_agents); break; /* IgnoreAgent */ + case 29: if (tolower(value[0])=='y') + verbose=0; break; /* ReallyQuiet */ + case 30: local_time= + (tolower(value[0])=='y')?0:1; break; /* GMTTime */ + case 31: add_glist(value,&group_urls); break; /* GroupURL */ + case 32: add_glist(value,&group_sites); break; /* GroupSite */ + case 33: add_glist(value,&group_refs); break; /* GroupReferrer */ + case 34: add_glist(value,&group_agents); break; /* GroupAgent */ + case 35: shade_groups= + (tolower(value[0])=='n')?0:1; break; /* GroupShading */ + case 36: hlite_groups= + (tolower(value[0])=='n')?0:1; break; /* GroupHighlight */ + case 37: incremental= + (tolower(value[0])=='y')?1:0; break; /* Incremental */ + case 38: state_fname=save_opt(value); break; /* State FName */ + case 39: hist_fname=save_opt(value); break; /* History FName */ + case 40: html_ext=save_opt(value); break; /* HTML extension */ + case 41: add_nlist(value,&html_pre); break; /* HTML Pre code */ + case 42: add_nlist(value,&html_body); break; /* HTML Body code */ + case 43: add_nlist(value,&html_end); break; /* HTML End code */ + case 44: use_https= + (tolower(value[0])=='y')?1:0; break; /* Use https:// */ + case 45: add_nlist(value,&include_sites); break; /* IncludeSite */ + case 46: add_nlist(value,&include_urls); break; /* IncludeURL */ + case 47: add_nlist(value,&include_refs); break; /* IncludeReferrer*/ + case 48: add_nlist(value,&include_agents); break; /* IncludeAgent */ + case 49: add_nlist(value,&page_type); break; /* PageType */ + case 50: visit_timeout=atoi(value); break; /* VisitTimeout */ + case 51: graph_legend= + (tolower(value[0])=='n')?0:1; break; /* GraphLegend */ + case 52: graph_lines = atoi(value); break; /* GraphLines */ + case 53: fold_seq_err= + (tolower(value[0])=='y')?1:0; break; /* FoldSeqErr */ + case 54: ctry_graph= + (tolower(value[0])=='n')?0:1; break; /* CountryGraph */ + case 55: ntop_sitesK = atoi(value); break; /* TopKSites (KB) */ + case 56: ntop_urlsK = atoi(value); break; /* TopKUrls (KB) */ + case 57: ntop_entry = atoi(value); break; /* Top Entry pgs */ + case 58: ntop_exit = atoi(value); break; /* Top Exit pages */ + case 59: ntop_search = atoi(value); break; /* Top Search pgs */ + case 60: log_type=(tolower(value[0])=='f')? + LOG_FTP:((tolower(value[0])=='s')? + LOG_SQUID:((tolower(value[0])=='w')? + LOG_W3C:LOG_CLF)); break; /* LogType */ + case 61: add_glist(value,&search_list); break; /* SearchEngine */ + case 62: group_domains=atoi(value); break; /* GroupDomains */ + case 63: hide_sites= + (tolower(value[0])=='y')?1:0; break; /* HideAllSites */ + case 64: all_sites= + (tolower(value[0])=='y')?1:0; break; /* All Sites? */ + case 65: all_urls= + (tolower(value[0])=='y')?1:0; break; /* All URLs? */ + case 66: all_refs= + (tolower(value[0])=='y')?1:0; break; /* All Refs */ + case 67: all_agents= + (tolower(value[0])=='y')?1:0; break; /* All Agents? */ + case 68: all_search= + (tolower(value[0])=='y')?1:0; break; /* All Srch str */ + case 69: all_users= + (tolower(value[0])=='y')?1:0; break; /* All Users? */ + case 70: ntop_users=atoi(value); break; /* TopUsers */ + case 71: add_nlist(value,&hidden_users); break; /* HideUser */ + case 72: add_nlist(value,&ignored_users); break; /* IgnoreUser */ + case 73: add_nlist(value,&include_users); break; /* IncludeUser */ + case 74: add_glist(value,&group_users); break; /* GroupUser */ + case 75: dump_path=save_opt(value); break; /* DumpPath */ + case 76: dump_ext=save_opt(value); break; /* Dumpfile ext */ + case 77: dump_header= + (tolower(value[0])=='y')?1:0; break; /* DumpHeader? */ + case 78: dump_sites= + (tolower(value[0])=='y')?1:0; break; /* DumpSites? */ + case 79: dump_urls= + (tolower(value[0])=='y')?1:0; break; /* DumpURLs? */ + case 80: dump_refs= + (tolower(value[0])=='y')?1:0; break; /* DumpReferrers? */ + case 81: dump_agents= + (tolower(value[0])=='y')?1:0; break; /* DumpAgents? */ + case 82: dump_users= + (tolower(value[0])=='y')?1:0; break; /* DumpUsers? */ + case 83: dump_search= + (tolower(value[0])=='y')?1:0; break; /* DumpSrchStrs? */ +#ifdef USE_DNS + case 84: dns_cache=save_opt(value); break; /* DNSCache fname */ + case 85: dns_children=atoi(value); break; /* DNSChildren */ +#else + case 84: /* Disable DNSCache and DNSChildren if DNS is not enabled */ + case 85: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break; +#endif /* USE_DNS */ + case 86: daily_graph= + (tolower(value[0])=='n')?0:1; break; /* HourlyGraph */ + case 87: daily_stats= + (tolower(value[0])=='n')?0:1; break; /* HourlyStats */ + case 88: link_referrer= + (tolower(value[0])=='y')?1:0; break; /* LinkReferrer */ + case 89: add_nlist(value,&page_prefix); break; /* PagePrefix */ + case 90: strncpy(hit_color+1, value, 6); break; /* ColorHit */ + case 91: strncpy(file_color+1, value, 6); break; /* ColorFile */ + case 92: strncpy(site_color+1, value, 6); break; /* ColorSite */ + case 93: strncpy(kbyte_color+1,value, 6); break; /* ColorKbyte */ + case 94: strncpy(page_color+1, value, 6); break; /* ColorPage */ + case 95: strncpy(visit_color+1,value, 6); break; /* ColorVisit */ + case 96: strncpy(misc_color+1, value, 6); break; /* ColorMisc */ + case 97: strncpy(pie_color1+1, value, 6); break; /* PieColor1 */ + case 98: strncpy(pie_color2+1, value, 6); break; /* PieColor2 */ + case 99: strncpy(pie_color3+1, value, 6); break; /* PieColor3 */ + case 100:strncpy(pie_color4+1, value, 6); break; /* PieColor4 */ +#ifdef USE_DNS + case 101: cache_ips= + (tolower(value[0])=='y')?1:0; break; /* CacheIPs */ + case 102: cache_ttl=atoi(value); break; /* CacheTTL days */ + case 103: geodb= + (tolower(value[0])=='y')?1:0; break; /* GeoDB */ + case 104: geodb_fname=save_opt(value); break; /* GeoDBDatabase */ +#else + case 101: /* Disable CacheIPs/CacheTTL/GeoDB/GeoDBDatabase if none */ + case 102: + case 103: + case 104: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break; +#endif /* USE_DNS */ + case 105: stripcgi= + (tolower(value[0])=='n')?0:1; break; /* StripCGI */ + case 106: trimsquid=atoi(value); break; /* TrimSquidURL */ + case 107: add_nlist(value,&omit_page); break; /* OmitPage */ + case 108: htaccess= + (tolower(value[0])=='y')?1:0; break; /* HTAccess */ + case 109: ignore_state= + (tolower(value[0])=='y')?1:0; break; /* IgnoreState */ + case 110: default_index= + (tolower(value[0])=='n')?0:1; break; /* DefaultIndex */ +#ifdef USE_GEOIP + case 111: geoip= + (tolower(value[0])=='y')?1:0; break; /* GeoIP */ + case 112: geoip_db=save_opt(value); break; /* GeoIPDatabase */ +#else + case 111: /* Disable GeoIP and GeoIPDatabase if not enabled */ + case 112: printf("%s '%s' (%s)\n",msg_bad_key,keyword,fname); break; +#endif + case 113: normalize= + (tolower(value[0])=='n')?0:1; break; /* NormalizeURL */ + case 114: index_mths=atoi(value); break; /* IndexMonths */ + case 115: graph_mths=atoi(value); break; /* GraphMonths */ + case 116: year_hdrs= + (tolower(value[0])=='n')?0:1; break; /* YearHeaders */ + case 117: year_totals= + (tolower(value[0])=='n')?0:1; break; /* YearTotals */ + case 118: use_flags= + (tolower(value[0])=='y')?1:0; break; /* CountryFlags */ + case 119: use_flags=1; flag_dir=save_opt(value); break; /* FlagDir */ + case 120: searchcasei= + (tolower(value[0])=='n')?0:1; break; /* SearchCaseI */ + } + } + fclose(fp); +} + +/*********************************************/ +/* SAVE_OPT - save option from config file */ +/*********************************************/ + +static char *save_opt(char *str) +{ + char *cp1; + + if ( (cp1=malloc(strlen(str)+1))==NULL) return NULL; + + strcpy(cp1,str); + return cp1; +} + +/*********************************************/ +/* CLEAR_MONTH - initalize monthly stuff */ +/*********************************************/ + +void clear_month() +{ + int i; + + init_counters(); /* reset monthly counters */ + del_htabs(); /* clear hash tables */ + if (ntop_ctrys!=0 ) for (i=0;i<ntop_ctrys;i++) top_ctrys[i]=NULL; +} + +/*********************************************/ +/* INIT_COUNTERS - prep counters for use */ +/*********************************************/ + +void init_counters() +{ + int i; + for (i=0;i<TOTAL_RC;i++) response[i].count = 0; + for (i=0;i<31;i++) /* monthly totals */ + { + tm_xfer[i]=0.0; + tm_hit[i]=tm_file[i]=tm_site[i]=tm_page[i]=tm_visit[i]=0; + } + for (i=0;i<24;i++) /* hourly totals */ + { + th_hit[i]=th_file[i]=th_page[i]=0; + th_xfer[i]=0.0; + } + for (i=0;ctry[i].desc;i++) /* country totals */ + { + ctry[i].count=0; + ctry[i].files=0; + ctry[i].xfer=0; + } + t_hit=t_file=t_site=t_url=t_ref=t_agent=t_page=t_visit=t_user=0; + t_xfer=0.0; + mh_hit = dt_site = 0; + f_day=l_day=1; +} + +/*********************************************/ +/* PRINT_OPTS - print command line options */ +/*********************************************/ + +void print_opts(char *pname) +{ + int i; + + printf("%s: %s %s\n",h_usage1,pname,h_usage2); + for (i=0;h_msg[i];i++) printf("%s\n",h_msg[i]); + exit(1); +} + +/*********************************************/ +/* PRINT_VERSION */ +/*********************************************/ + +void print_version() +{ + char buf[128]=""; + uname(&system_info); + + printf("Webalizer V%s-%s (%s %s %s) %s\n%s\n", + version,editlvl, + system_info.sysname,system_info.release,system_info.machine, + language,copyright); + +#ifdef USE_DNS + strncpy(&buf[strlen(buf)],"DNS/GeoDB ",11); +#endif +#ifdef USE_BZIP + strncpy(&buf[strlen(buf)],"BZip2 ",7); +#endif +#ifdef USE_GEOIP + strncpy(&buf[strlen(buf)],"GeoIP ",7); +#endif + + if (debug_mode) + { + printf("Mod date: %s Options: ",moddate); + if (buf[0]!=0) printf("%s",buf); + else printf("none"); + printf("\n"); +#if USE_DNS + printf("Default GeoDB dir : %s\n",GEODB_LOC); +#endif + printf("Default config dir: %s\n",ETCDIR); + printf("\n"); + } + else printf("\n"); + exit(1); +} + +/*********************************************/ +/* CUR_TIME - return date/time as a string */ +/*********************************************/ + +char *cur_time() +{ + time_t now; + static char timestamp[48]; + + /* get system time */ + now = time(NULL); + /* convert to timestamp string */ + if (local_time) + strftime(timestamp,sizeof(timestamp),"%d-%b-%Y %H:%M %Z", + localtime(&now)); + else + strftime(timestamp,sizeof(timestamp),"%d-%b-%Y %H:%M GMT", + gmtime(&now)); + + return timestamp; +} + +/*********************************************/ +/* ISPAGE - determine if an HTML page or not */ +/*********************************************/ + +int ispage(char *str) +{ + NLISTPTR t; + char *cp1, *cp2; + + if (isinlist(omit_page,str)!=NULL) return 0; + + cp1=cp2=str; + while (*cp1!='\0') { if (*cp1=='.') cp2=cp1; cp1++; } + if ((cp2++==str)||(*(--cp1)=='/')) return 1; + t=page_prefix; + while(t!=NULL) + { + /* Check if a PagePrefix matches */ + if(strncmp(str,t->string,strlen(t->string))==0) return 1; + t=t->next; + } + return (isinlist(page_type,cp2)!=NULL); +} + +/*********************************************/ +/* ISURLCHAR - checks for valid URL chars */ +/*********************************************/ + +int isurlchar(unsigned char ch, int flag) +{ + if (isalnum(ch)) return 1; /* allow letters, numbers... */ + if (ch > 127) return 1; /* allow extended chars... */ + if (flag) /* and filter some others */ + return (strchr(":/\\.,' *!-+_@~()[]!",ch)!=NULL); /* strip cgi vars */ + else + return (strchr(":/\\.,' *!-+_@~()[]!;?&=",ch)!=NULL); /* keep cgi vars */ +} + +/*********************************************/ +/* CTRY_IDX - create unique # from TLD */ +/*********************************************/ + +u_int64_t ctry_idx(char *str) +{ + int i=strlen(str),j=0; + u_int64_t idx=0; + char *cp=str+i; + + for (;i>0;i--) { idx+=((*--cp-'a'+1)<<j); j+=(j==0)?7:5; } + return idx; +} + +/*********************************************/ +/* UN_IDX - get TLD from index # */ +/*********************************************/ + +char *un_idx(u_int64_t idx) +{ + int i,j; + char *cp; + static char buf[8]; + + memset(buf, 0, sizeof(buf)); + if (idx<=0) return buf; + if ((j=(idx&0x7f))>32) /* only for a1, a2 and o1 */ + { buf[0]=(idx>>7)+'a'; buf[1]=j-32; return buf; } + + for (i=5;i>=0;i--) + buf[i]=(i==5)?(idx&0x7f)+'a'-1:(j=(idx>>(((5-i)*5)+2))&0x1f)?j+'a'-1:' '; + cp=buf; while (*cp==' ') { for (i=0;i<6;i++) buf[i]=buf[i+1]; } return buf; +} + +/*********************************************/ +/* FROM_HEX - convert hex char to decimal */ +/*********************************************/ + +char from_hex(char c) /* convert hex to dec */ +{ + c = (c>='0'&&c<='9')?c-'0': /* 0-9? */ + (c>='A'&&c<='F')?c-'A'+10: /* A-F? */ + c - 'a' + 10; /* lowercase... */ + return (c<0||c>15)?0:c; /* return 0 if bad... */ +} + +/*********************************************/ +/* UNESCAPE - convert escape seqs to chars */ +/*********************************************/ + +char *unescape(char *str) +{ + unsigned char *cp1=(unsigned char *)str; /* force unsigned so we */ + unsigned char *cp2=cp1; /* can do > 127 */ + + if (!str) return NULL; /* make sure strings valid */ + + while (*cp1) + { + if (*cp1=='%') /* Found an escape? */ + { + cp1++; + if (isxdigit(*cp1)) /* ensure a hex digit */ + { + if (*cp1) *cp2=from_hex(*cp1++)*16; /* convert hex to an ASCII */ + if (*cp1) *cp2+=from_hex(*cp1); /* (hopefully) character */ + if ((*cp2<32)||(*cp2==127)) *cp2='_'; /* make '_' if its bad */ + if (*cp1) { cp2++; cp1++; } + } + else *cp2++='%'; + } + else *cp2++ = *cp1++; /* if not, just continue */ + } + *cp2=*cp1; /* don't forget terminator */ + return str; /* return the string */ +} + +/*********************************************/ +/* OURICMP - Case insensitive string compare */ +/*********************************************/ + +int ouricmp(char *str1, char *str2) +{ + while((*str1!=0) && + (tolower((unsigned char)*str1)==tolower((unsigned char)*str2))) + { str1++;str2++; } + if (*str1==0) return 0; else return 1; +} + +/*********************************************/ +/* SRCH_STRING - get search strings from ref */ +/*********************************************/ + +void srch_string(char *ptr) +{ + /* ptr should point to unescaped query string */ + char tmpbuf[BUFSIZE]; + char srch[80]=""; + unsigned char *cp1, *cp2, *cps; + int sp_flg=0; + + /* Check if search engine referrer or return */ + if ( (cps=(unsigned char *)isinglist(search_list,log_rec.refer))==NULL) + return; + + /* Try to find query variable */ + srch[0]='?'; srch[sizeof(srch)-1] = '\0'; + strncpy(&srch[1],(char *)cps,sizeof(srch)-2); /* First, try "?..." */ + if ((cp1=(unsigned char *)strstr(ptr,srch))==NULL) + { + srch[0]='&'; /* Next, try "&..." */ + if ((cp1=(unsigned char *)strstr(ptr,srch))==NULL) return; + } + cp2=(unsigned char *)tmpbuf; + while (*cp1!='=' && *cp1!=0) cp1++; if (*cp1!=0) cp1++; + while (*cp1!='&' && *cp1!=0) + { + if (*cp1=='"' || *cp1==',' || *cp1=='?') + { cp1++; continue; } /* skip bad ones.. */ + else + { + if (*cp1=='+') *cp1=' '; /* change + to space */ + if (sp_flg && *cp1==' ') { cp1++; continue; } /* compress spaces */ + if (*cp1==' ') sp_flg=1; else sp_flg=0; /* (flag spaces here) */ + if (searchcasei) + *cp2++=tolower(*cp1++); /* normal character */ + else *cp2++=*cp1++; + } + } + *cp2=0; cp2=(unsigned char *)tmpbuf; + if (tmpbuf[0]=='?') tmpbuf[0]=' '; /* format fix ? */ + while( *cp2!=0 && isspace((unsigned char)*cp2) ) cp2++; /* skip sps. */ + if (*cp2==0) return; + + /* any trailing spaces? */ + cp1=cp2+strlen((char *)cp2)-1; + while (cp1!=cp2) if (isspace((unsigned char)*cp1)) *cp1--='\0'; else break; + + /* strip invalid chars */ + cp1=cp2; + while (*cp1!=0) { if ((*cp1<32)||(*cp1==127)) *cp1='_'; cp1++; } + + if (put_snode((char *)cp2,(u_int64_t)1,sr_htab)) + { + if (verbose) + /* Error adding search string node, skipping .... */ + fprintf(stderr,"%s %s\n", msg_nomem_sc, tmpbuf); + } + return; +} + +/*********************************************/ +/* GET_DOMAIN - Get domain portion of host */ +/*********************************************/ + +char *get_domain(char *str) +{ + char *cp; + int i=group_domains+1; + + if (isipaddr(str)) return NULL; + cp = str+strlen(str)-1; + + while (cp!=str) + { + if (*cp=='.') + if (!(--i)) return ++cp; + cp--; + } + return cp; +} + +/*********************************************/ +/* AGENT_MANGLE - Re-format user agent */ +/*********************************************/ + +void agent_mangle(char *str) +{ + char *cp1, *cp2, *cp3; + + str=cp2=log_rec.agent; + cp1=strstr(str,"ompatible"); /* check known fakers */ + if (cp1!=NULL) + { + while (*cp1!=';'&&*cp1!='\0') cp1++; + /* kludge for Mozilla/3.01 (compatible;) */ + if (*cp1++==';' && strcmp(cp1,")\"")) /* success! */ + { + /* Opera can hide as MSIE */ + cp3=strstr(str,"Opera"); + if (cp3!=NULL) + { + while (*cp3!='.'&&*cp3!='\0') + { + if(*cp3=='/') *cp2++=' '; + else *cp2++=*cp3; + cp3++; + } + cp1=cp3; + } + else + { + while (*cp1 == ' ') cp1++; /* eat spaces */ + while (*cp1!='.'&&*cp1!='\0'&&*cp1!=';') *cp2++=*cp1++; + } + if (mangle_agent<5) + { + while (*cp1!='.'&&*cp1!=';'&&*cp1!='\0') *cp2++=*cp1++; + if (*cp1!=';'&&*cp1!='\0') { *cp2++=*cp1++; *cp2++=*cp1++; } + } + if (mangle_agent<4) + if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; + if (mangle_agent<3) + while (*cp1!=';'&&*cp1!='\0'&&*cp1!='('&&*cp1!=' ') *cp2++=*cp1++; + if (mangle_agent<2) + { + /* Level 1 - try to get OS */ + cp1=strstr(cp1,")"); + if (cp1!=NULL) + { + *cp2++=' '; + *cp2++='('; + while (*cp1!=';'&&*cp1!='('&&cp1!=str) cp1--; + if (cp1!=str&&*cp1!='\0') cp1++; + while (*cp1==' '&&*cp1!='\0') cp1++; + while (*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; + *cp2++=')'; + } + } + *cp2='\0'; + } + else + { + /* nothing after "compatible", should we mangle? */ + /* not for now */ + } + } + else + { + cp1=strstr(str,"Opera"); /* Opera flavor */ + if (cp1!=NULL) + { + while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++; + while (*cp1!='.'&&*cp1!='\0') + { + if(*cp1=='/') *cp2++=' '; + else *cp2++=*cp1; + cp1++; + } + if (mangle_agent<5) + { + while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; + *cp2++=*cp1++; + *cp2++=*cp1++; + } + if (mangle_agent<4) + if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; + if (mangle_agent<3) + while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++; + if (mangle_agent<2) + { + cp1=strstr(cp1,"("); + if (cp1!=NULL) + { + cp1++; + *cp2++=' '; + *cp2++='('; + while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; + *cp2++=')'; + } + } + *cp2='\0'; + } + else + { + cp1=strstr(str,"Mozilla"); /* Netscape flavor */ + if (cp1!=NULL) + { + while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++; + if (*cp1==' ') *cp1='/'; + while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; + if (mangle_agent<5) + { + while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; + *cp2++=*cp1++; + *cp2++=*cp1++; + } + if (mangle_agent<4) + if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; + if (mangle_agent<3) + while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++; + if (mangle_agent<2) + { + /* Level 1 - Try to get OS */ + cp1=strstr(cp1,"("); + if (cp1!=NULL) + { + cp1++; + *cp2++=' '; + *cp2++='('; + while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; + *cp2++=')'; + } + } + *cp2='\0'; + } + } + } +} + +/*********************************************/ +/* OUR_GZGETS - enhanced gzgets for log only */ +/*********************************************/ + +char *our_gzgets(void *fp, char *buf, int size) +{ + char *out_cp=buf; /* point to output */ + while (1) + { + if (f_cp>(f_buf+f_end-1)) /* load? */ + { +#ifdef USE_BZIP + f_end=(gz_log==COMP_BZIP)? + BZ2_bzread(fp, f_buf, GZ_BUFSIZE): + gzread(fp, f_buf, GZ_BUFSIZE); +#else + f_end=gzread(fp, f_buf, GZ_BUFSIZE); +#endif + if (f_end<=0) return Z_NULL; + f_cp=f_buf; + } + + if (--size) /* more? */ + { + *out_cp++ = *f_cp; + if (*f_cp++ == '\n') { *out_cp='\0'; return buf; } + } + else { *out_cp='\0'; return buf; } + } +} + +#ifdef USE_BZIP +/*********************************************/ +/* bz2_rewind - our 'rewind' for bz2 files */ +/*********************************************/ + +int bz2_rewind( void **fp, char *fname, char *mode ) +{ + BZ2_bzclose( *fp ); + *fp = BZ2_bzopen( fname, "rb"); + f_cp=f_buf+GZ_BUFSIZE; f_end=0; /* reset buffer counters */ + memset(f_buf, 0, sizeof(f_buf)); + if (*fp == Z_NULL) return -1; + else return 0; +} +#endif /* USE_BZIP */ + +/*********************************************/ +/* ISIPADDR - Determine if str is IP address */ +/*********************************************/ + +int isipaddr(char *str) +{ + int i=1,j=0; + char *cp; /* generic ptr */ + + if (strchr(str,':')!=NULL) + { + /* Possible IPv6 Address */ + cp=str; + while (strchr(":.abcdef0123456789",*cp)!=NULL && *cp!='\0') + { + if (*cp=='.') j++; + if (*cp++==':') i++; + } + + if (*cp!='\0') return -1; /* bad hostname (has ':') */ + if (i>1 && j) return 2; /* IPv4/IPv6 */ + return 3; /* IPv6 */ + } + else + { + /* Not an IPv6 address, check for IPv4 */ + cp=str; + while (strchr(".0123456789",*cp)!=NULL && *cp!='\0') + { + if (*cp++=='.') i++; + } + if (*cp!='\0') return 0; /* hostname */ + if (i!=4) return -1; /* bad hostname */ + return 1; /* IPv4 */ + } +} + +/*****************************************************************/ +/* */ +/* JDATE - Julian date calculator */ +/* */ +/* Calculates the number of days since Jan 1, 0000. */ +/* */ +/* Originally written by Bradford L. Barrett (03/17/1988) */ +/* Returns an unsigned long value representing the number of */ +/* days since January 1, 0000. */ +/* */ +/* Note: Due to the changes made by Pope Gregory XIII in the */ +/* 16th Centyry (Feb 24, 1582), dates before 1583 will */ +/* not return a truely accurate number (will be at least */ +/* 10 days off). Somehow, I don't think this will */ +/* present much of a problem for most situations :) */ +/* */ +/* Usage: days = jdate(day, month, year) */ +/* */ +/* The number returned is adjusted by 5 to facilitate day of */ +/* week calculations. The mod of the returned value gives the */ +/* day of the week the date is. (ie: dow = days % 7 ) where */ +/* dow will return 0=Sunday, 1=Monday, 2=Tuesday, etc... */ +/* */ +/*****************************************************************/ + +u_int64_t jdate( int day, int month, int year ) +{ + u_int64_t days; /* value returned */ + int mtable[] = {0,31,59,90,120,151,181,212,243,273,304,334}; + + /* First, calculate base number including leap and Centenial year stuff */ + + days=(((u_int64_t)year*365)+day+mtable[month-1]+ + ((year+4)/4) - ((year/100)-(year/400))); + + /* now adjust for leap year before March 1st */ + + if ((year % 4 == 0) && !((year % 100 == 0) && + (year % 400 != 0)) && (month < 3)) + --days; + + /* done, return with calculated value */ + + return(days+5); +} diff --git a/webalizer-2.23-08/webalizer.h b/webalizer-2.23-08/webalizer.h new file mode 100644 index 0000000..5fad7ac --- /dev/null +++ b/webalizer-2.23-08/webalizer.h @@ -0,0 +1,302 @@ +#ifndef _WEBALIZER_H +#define _WEBALIZER_H + +#define PCENT(val,max) ((val)?((double)val/(double)max)*100.0 : 0.0) +#define IDX_2C(c1,c2) (((c1-'a'+1)<<7)+(c2-'a'+1) ) +#define IDX_3C(c1,c2,c3) (((c1-'a'+1)<<12)+((c2-'a'+1)<<7)+(c3-'a'+1) ) +#define IDX_4C(c1,c2,c3,c4) (((c1-'a'+1)<<17)+((c2-'a'+1)<<12)+((c3-'a'+1)<<7)+(c4-'a'+1) ) +#define IDX_5C(c1,c2,c3,c4,c5) (((c1-'a'+1)<<22)+((c2-'a'+1)<<17)+((c3-'a'+1)<<12)+((c4-'a'+1)<<7)+(c5-'a'+1) ) +#define IDX_6C(c1,c2,c3,c4,c5,c6) (((c1-'a'+1)<<27)+((c2-'a'+1)<<22)+((c3-'a'+1)<<17)+((c4-'a'+1)<<12)+((c5-'a'+1)<<7)+(c6-'a'+1) ) + +#ifndef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +#define MAXHASH 4096 /* Size of our hash tables */ +#define BUFSIZE 4096 /* Max buffer size for log record */ +#define MAXHOST 256 /* Max hostname buffer size */ +#define MAXURL 4096 /* Max HTTP request/URL field size */ +#define MAXURLH 512 /* Max URL field size in htab */ +#define MAXREF 1024 /* Max referrer field size */ +#define MAXREFH 256 /* Max referrer field size in htab */ +#define MAXAGENT 128 /* Max user agent field size */ +#define MAXCTRY 48 /* Max country name size */ +#define MAXSRCH 256 /* Max size of search string buffer */ +#define MAXSRCHH 128 /* Max size of search str in htab */ +#define MAXIDENT 64 /* Max size of ident string (user) */ +#define MAXKWORD 32 /* Max size of config keyword */ +#define MAXKVAL 132 /* Max size of config value */ +#define HISTSIZE 120 /* Size of history in months */ +#define GRAPHMAX 72 /* Max months in index graph */ + +#define SLOP_VAL 3600 /* out of sequence slop (seconds) */ + +/* Log types */ +#define LOG_CLF 0 /* CLF/combined log type */ +#define LOG_FTP 1 /* wu-ftpd xferlog type */ +#define LOG_SQUID 2 /* squid proxy log */ +#define LOG_W3C 3 /* W3C extended log format */ + +/* compression */ +#define COMP_NONE 0 +#define COMP_GZIP 1 +#define COMP_BZIP 2 + +/* Response code defines as per draft ietf HTTP/1.1 rev 6 */ +#define RC_CONTINUE 100 +#define RC_SWITCHPROTO 101 +#define RC_OK 200 +#define RC_CREATED 201 +#define RC_ACCEPTED 202 +#define RC_NONAUTHINFO 203 +#define RC_NOCONTENT 204 +#define RC_RESETCONTENT 205 +#define RC_PARTIALCONTENT 206 +#define RC_MULTIPLECHOICES 300 +#define RC_MOVEDPERM 301 +#define RC_MOVEDTEMP 302 +#define RC_SEEOTHER 303 +#define RC_NOMOD 304 +#define RC_USEPROXY 305 +#define RC_MOVEDTEMPORARILY 307 +#define RC_BAD 400 +#define RC_UNAUTH 401 +#define RC_PAYMENTREQ 402 +#define RC_FORBIDDEN 403 +#define RC_NOTFOUND 404 +#define RC_METHODNOTALLOWED 405 +#define RC_NOTACCEPTABLE 406 +#define RC_PROXYAUTHREQ 407 +#define RC_TIMEOUT 408 +#define RC_CONFLICT 409 +#define RC_GONE 410 +#define RC_LENGTHREQ 411 +#define RC_PREFAILED 412 +#define RC_REQENTTOOLARGE 413 +#define RC_REQURITOOLARGE 414 +#define RC_UNSUPMEDIATYPE 415 +#define RC_RNGNOTSATISFIABLE 416 +#define RC_EXPECTATIONFAILED 417 +#define RC_SERVERERR 500 +#define RC_NOTIMPLEMENTED 501 +#define RC_BADGATEWAY 502 +#define RC_UNAVAIL 503 +#define RC_GATEWAYTIMEOUT 504 +#define RC_BADHTTPVER 505 + +/* Index defines for RC codes */ +#define IDX_UNDEFINED 0 +#define IDX_CONTINUE 1 +#define IDX_SWITCHPROTO 2 +#define IDX_OK 3 +#define IDX_CREATED 4 +#define IDX_ACCEPTED 5 +#define IDX_NONAUTHINFO 6 +#define IDX_NOCONTENT 7 +#define IDX_RESETCONTENT 8 +#define IDX_PARTIALCONTENT 9 +#define IDX_MULTIPLECHOICES 10 +#define IDX_MOVEDPERM 11 +#define IDX_MOVEDTEMP 12 +#define IDX_SEEOTHER 13 +#define IDX_NOMOD 14 +#define IDX_USEPROXY 15 +#define IDX_MOVEDTEMPORARILY 16 +#define IDX_BAD 17 +#define IDX_UNAUTH 18 +#define IDX_PAYMENTREQ 19 +#define IDX_FORBIDDEN 20 +#define IDX_NOTFOUND 21 +#define IDX_METHODNOTALLOWED 22 +#define IDX_NOTACCEPTABLE 23 +#define IDX_PROXYAUTHREQ 24 +#define IDX_TIMEOUT 25 +#define IDX_CONFLICT 26 +#define IDX_GONE 27 +#define IDX_LENGTHREQ 28 +#define IDX_PREFAILED 29 +#define IDX_REQENTTOOLARGE 30 +#define IDX_REQURITOOLARGE 31 +#define IDX_UNSUPMEDIATYPE 32 +#define IDX_RNGNOTSATISFIABLE 33 +#define IDX_EXPECTATIONFAILED 34 +#define IDX_SERVERERR 35 +#define IDX_NOTIMPLEMENTED 36 +#define IDX_BADGATEWAY 37 +#define IDX_UNAVAIL 38 +#define IDX_GATEWAYTIMEOUT 39 +#define IDX_BADHTTPVER 40 +#define TOTAL_RC 41 + +#ifdef USE_DNS +#include <netinet/in.h> /* needed for in_addr structure definition */ +#ifndef INADDR_NONE +#define INADDR_NONE 0xFFFFFFFF +#endif /* INADDR_NONE */ +#endif + +/* Response code structure */ +struct response_code { char *desc; /* code description */ + u_int64_t count; }; /* hit counter */ + +/* Country code structure */ +struct country_code {u_int64_t idx; /* TLD index number */ + char *desc; /* TLD description */ + u_int64_t count; /* hit counter */ + u_int64_t files; /* file counter */ + double xfer; }; /* xfer amt counter */ + +typedef struct country_code *CLISTPTR; + +/* log record structure */ +struct log_struct { char hostname[MAXHOST]; /* hostname */ + char datetime[29]; /* raw timestamp */ + char url[MAXURL]; /* raw request field */ + int resp_code; /* response code */ + u_int64_t xfer_size; /* xfer size in bytes */ + char refer[MAXREF]; /* referrer */ + char agent[MAXAGENT]; /* user agent (browser) */ + char srchstr[MAXSRCH]; /* search string */ + char ident[MAXIDENT]; }; /* ident string (user) */ + +extern struct log_struct log_rec; + +extern char *version ; /* program version */ +extern char *editlvl ; /* edit level */ +extern char *moddate ; /* modification date */ +extern char *copyright ; + +extern int verbose ; /* 2=verbose,1=err, 0=none */ +extern int debug_mode ; /* debug mode flag */ +extern int time_me ; /* timing display flag */ +extern int local_time ; /* 1=localtime 0=GMT (UTC) */ +extern int hist_gap ; /* hist error, save backup */ +extern int ignore_hist ; /* history flag (1=skip) */ +extern int ignore_state ; /* state fiag (1=skip) */ +extern int hourly_graph ; /* hourly graph display */ +extern int hourly_stats ; /* hourly stats table */ +extern int daily_graph ; /* daily graph display */ +extern int daily_stats ; /* daily stats table */ +extern int ctry_graph ; /* country graph display */ +extern int shade_groups ; /* Group shading 0=no 1=yes */ +extern int hlite_groups ; /* Group hlite 0=no 1=yes */ +extern int mangle_agent ; /* mangle user agents */ +extern int incremental ; /* incremental mode 1=yes */ +extern int use_https ; /* use 'https://' on URLs */ +extern int htaccess ; /* create .htaccess? (0=no) */ +extern int visit_timeout; /* visit timeout (30 min) */ +extern int graph_legend ; /* graph legend (1=yes) */ +extern int graph_lines ; /* graph lines (0=none) */ +extern int fold_seq_err ; /* fold seq err (0=no) */ +extern int log_type ; /* (0=clf, 1=ftp, 2=squid) */ +extern int group_domains; /* Group domains 0=none */ +extern int hide_sites ; /* Hide ind. sites (0=no) */ +extern int graph_mths ; /* # months in index graph */ +extern int index_mths ; /* # months in index table */ +extern int year_hdrs ; /* Show year headers (0=no) */ +extern int year_totals ; /* Show year totals (0=no) */ +extern int use_flags ; /* Show flags in ctry table */ +extern char *flag_dir ; /* flag directory */ +extern char *hname ; /* hostname for reports */ +extern char *state_fname ; /* run state file name */ +extern char *hist_fname ; /* name of history file */ +extern char *html_ext ; /* HTML file prefix */ +extern char *dump_ext ; /* Dump file prefix */ +extern char *conf_fname ; /* name of config file */ +extern char *log_fname ; /* log file pointer */ +extern char *out_dir ; /* output directory */ +extern char *blank_str ; /* blank string */ +extern char *dns_cache ; /* DNS cache file name */ +extern int geodb ; /* Use GeoDB flag (0=no) */ +extern int dns_children ; /* # of DNS children */ +extern int cache_ips ; /* Cache IP addrs (0=no) */ +extern int cache_ttl ; /* Cache entry TTL (days) */ +extern int link_referrer; /* link referrer (0=no) */ +extern int trimsquid ; /* trim squid URLs (0=none) */ +extern int searchcasei ; /* case insensitive search */ + +extern int ntop_sites ; /* top n sites to display */ +extern int ntop_sitesK ; /* top n sites (by kbytes) */ +extern int ntop_urls ; /* top n url's to display */ +extern int ntop_urlsK ; /* top n url's (by kbytes) */ +extern int ntop_entry ; /* top n entry url's */ +extern int ntop_exit ; /* top n exit url's */ +extern int ntop_refs ; /* top n referrers "" */ +extern int ntop_agents ; /* top n user agents "" */ +extern int ntop_ctrys ; /* top n countries "" */ +extern int ntop_search ; /* top n search strings */ +extern int ntop_users ; /* top n users to display */ + +extern int all_sites ; /* List All sites (0=no) */ +extern int all_urls ; /* List All URLs (0=no) */ +extern int all_refs ; /* List All Referrers */ +extern int all_agents ; /* List All User Agents */ +extern int all_search ; /* List All Search Strings */ +extern int all_users ; /* List All Usernames */ + +extern int dump_sites ; /* Dump tab delimited sites */ +extern int dump_urls ; /* URLs */ +extern int dump_refs ; /* Referrers */ +extern int dump_agents ; /* User Agents */ +extern int dump_users ; /* Usernames */ +extern int dump_search ; /* Search strings */ +extern int dump_header ; /* Dump header as first rec */ +extern char *dump_path ; /* Path for dump files */ + +extern u_int64_t cur_tstamp; /* Current timestamp */ +extern u_int64_t epoch; /* used for timestamp adj. */ +extern int check_dup; /* check for dups flag */ + +extern int cur_year,cur_month, /* year/month/day/hour */ + cur_day, cur_hour, /* tracking variables */ + cur_min, cur_sec; + +extern double t_xfer; /* monthly total xfer value */ +extern u_int64_t t_hit, t_file, t_site, /* monthly total vars */ + t_url, t_ref, t_agent, + t_page,t_visit,t_user; + +extern double tm_xfer[31]; /* daily transfer totals */ + +extern u_int64_t tm_hit[31], tm_file[31], /* daily total arrays */ + tm_site[31],tm_page[31], + tm_visit[31]; + +extern u_int64_t dt_site; /* daily 'sites' total */ + +extern u_int64_t ht_hit,mh_hit; /* hourly hits totals */ + +extern u_int64_t th_hit[24], th_file[24], /* hourly total arrays */ + th_page[24]; + +extern double th_xfer[24]; /* hourly xfer array */ + +extern int f_day,l_day; /* first/last day vars */ +extern int gz_log; /* flag for zipped log */ + +extern CLISTPTR *top_ctrys; /* Top countries table */ + +extern char hit_color[]; /* graph hit color */ +extern char file_color[]; /* graph file color */ +extern char site_color[]; /* graph site color */ +extern char kbyte_color[]; /* graph kbyte color */ +extern char page_color[]; /* graph page color */ +extern char visit_color[]; /* graph visit color */ +extern char misc_color[]; /* graph misc color */ +extern char pie_color1[]; /* pie additionnal color 1 */ +extern char pie_color2[]; /* pie additionnal color 2 */ +extern char pie_color3[]; /* pie additionnal color 3 */ +extern char pie_color4[]; /* pie additionnal color 4 */ + +/* define our externally visable functions */ + +extern char *cur_time(); +extern u_int64_t ctry_idx(char *); +extern char *un_idx(u_int64_t); +extern void init_counters(); +extern int ispage(char *); +extern u_int64_t jdate(int,int,int); +extern char from_hex(char); +extern int isipaddr(char *); + +#endif /* _WEBALIZER_H */ diff --git a/webalizer-2.23-08/webalizer.o b/webalizer-2.23-08/webalizer.o new file mode 100644 index 0000000000000000000000000000000000000000..fb1c9c9be5aeb1209bccab58efcb92f4947efa43 GIT binary patch literal 128416 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∾}+^yvXpP{k;Ns{#ik{S<NDv95v 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 ah%v<Jx3|4N_589=^5kFfT)P>c|Nj8pIMb{E literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/webalizer.png b/webalizer-2.23-08/webalizer.png new file mode 100644 index 0000000000000000000000000000000000000000..39f41c589c9cd2c31213759a68d823c97cf0beb3 GIT binary patch literal 1253 zcmV<B1RDE^P)<h;3K|Lk000e1NJLTq003A30018d0{{R3R2KTu00004XF*Lt006O% z3;baP0002MP)t-syMTzopSiS*u8d@_iEhSjTCr_d&_*}lEhXd;4fi7+@KaIjQ&GzR z0RImU{2Uzm9v<v9HS}a;;dprMgM;XqncStN>9DZcgoLEe&*zVipT@@7|C=}eq)7g{ zcKyhc@0wH4nV0+u3hyy7-(g|ae0%@@|Kj4}+uPgK)z#0>&&$ip$jHdX#>U0P#lphE zz`($#r>CBto|ToAl9G~+j*g3qi;0Peg@uKGe}83VWeW=n2L}fP1Ox*E0{{R3&RWrv z000BfNkl<Zc$~GCeOIG85XM_WOVxH2Xzksr;0EZG_jawV!0PVz|5iKCB%xs4f9^T^ z9GgsD_$AC_f}>ymM?c@+e)RPA_WtwZl+myM{)+w<xMA?FCn<NINy^^9c3TxIqjiR& zD61_?Rm~YV4x?}<V@->@{xFKd%?VuQ3nM3`!priaEXxAI67?CFo(|(U8uQjojefLt zWXkbJa6-krZdxrYQGEiA=;4s?aTvy^BdXCK%P8K_ANEZzoO_-F?6tRKun@xczfn2& zymemI^+&Lb!U%gKH$)L?BA#3kM>1qzR7IA00N*7^qPIQ?Y-N18FJ8~U@t9q)qn#@7 zM(<dXwHwoza`Ff8)r^XOelx&V`SA>lmt}CcQQ%mjWFLoEPDPM>p}}biuxnBANI(1f z4`3ORD<s@OJ4U?;nH7dy$KlR^GXqZhVAd)>DDd_ZnS<49z*CX#Y1?Mbj;)&k*mgZc zuLD;Vox+M$vZZJ^@WxiBe8W9e**^FJ;E_KBTPw$L*2WbS<b0^Y<Po3w(=w`uCba(N z;HlO3u}aW&x~B3zWt(VFkq`29YkIQDXf)}8=imjG+Q;3F%lrz*FF`o&));a#+BI!0 z%S^tS#A+M#0A`<og(AC|ImbnYL$Y{6>8)Tc(~QL-_o$J#4=msJ(UZ(<TLdJZz-f{^ z2S(qMB<+FK(Ls`WY_9J;);%B6rMFBQ<SQu%7)&{Qp*kih&7E78kbw}^#gyjuz`RXH zI%@Nd&d#seZSLz_88(BTs1PcH=ZT(sY0h!q6)9gRjKXy1$t-aP15fUeuQMHc23x|i z8H|+1+zU*(r6MnC6TI|l(U&^_vv;0_MejKP2aojB<-Y(sQw_H8V%_aViGQtMT~*5` zvqT5}{wSv$^b`0IB=Kx+x5XHp|IleH%za$x=;<RwvEv;hdS5%Rr62EsF<Ua&u}Bi@ z94T~_`GRb9^wgq=9UgR%o#=NNj38J8FhJ8_&j)90+cq8+4Y(bcoXo(P3arC-?DRtW z?b?Np(KGZhS~58B7sSjJO<tWornm$-deeX_H%+y(7gE<Z`<b@XIR-<uXM?$-EpV?G z@V3Y~dctQXFSBf^W>1i3w>OKMb-lS=+?wwMr*sGI&lPQj`>F%e-I6twu1Hy*KD2a6 zpsCa#zgtdcZX(xPGx*S=sU{=m`{1Uj>(|4}%YOf&iUWxZ$W$*pu1uwUui2T0<7-_v z5P?zEgw{IJ53M6hRc5GX>v7dSS+(W@Z2o<OxO`{5^>yCU8yigP{_Fe=ZWU*Db7g@6 P00000NkvXXu0mjfC{T5d literal 0 HcmV?d00001 diff --git a/webalizer-2.23-08/webalizer_lang.h b/webalizer-2.23-08/webalizer_lang.h new file mode 120000 index 0000000..2d29389 --- /dev/null +++ b/webalizer-2.23-08/webalizer_lang.h @@ -0,0 +1 @@ +./lang/webalizer_lang.german \ No newline at end of file diff --git a/webalizer-2.23-08/webazolver b/webalizer-2.23-08/webazolver new file mode 120000 index 0000000..d1a1943 --- /dev/null +++ b/webalizer-2.23-08/webazolver @@ -0,0 +1 @@ +webalizer \ No newline at end of file