[PING] Rewrite ping. It now uses the Icmp* functions in iphlpapi, supports IPv4 and...
authorAmine Khaldi <amine.khaldi@reactos.org>
Thu, 22 Sep 2016 08:10:47 +0000 (08:10 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Thu, 22 Sep 2016 08:10:47 +0000 (08:10 +0000)
svn path=/trunk/; revision=72765

20 files changed:
reactos/base/applications/network/ping/CMakeLists.txt
reactos/base/applications/network/ping/lang/bg-BG.rc
reactos/base/applications/network/ping/lang/cs-CZ.rc
reactos/base/applications/network/ping/lang/de-DE.rc
reactos/base/applications/network/ping/lang/en-US.rc
reactos/base/applications/network/ping/lang/es-ES.rc
reactos/base/applications/network/ping/lang/fr-FR.rc
reactos/base/applications/network/ping/lang/it-IT.rc
reactos/base/applications/network/ping/lang/pl-PL.rc
reactos/base/applications/network/ping/lang/ro-RO.rc
reactos/base/applications/network/ping/lang/ru-RU.rc
reactos/base/applications/network/ping/lang/sq-AL.rc
reactos/base/applications/network/ping/lang/sv-SE.rc
reactos/base/applications/network/ping/lang/tr-TR.rc
reactos/base/applications/network/ping/lang/uk-UA.rc
reactos/base/applications/network/ping/lang/zh-CN.rc
reactos/base/applications/network/ping/lang/zh-TW.rc
reactos/base/applications/network/ping/ping.c
reactos/base/applications/network/ping/ping.rc
reactos/base/applications/network/ping/resource.h

index 141802a..8d2d5c6 100644 (file)
@@ -1,11 +1,5 @@
 
-add_definitions(-D__USE_W32_SOCKETS)
 add_executable(ping ping.c ping.rc)
 set_module_type(ping win32cui UNICODE)
-add_importlibs(ping user32 ws2_32 msvcrt kernel32)
-
-if(MSVC)
-    add_importlibs(ping ntdll)
-endif()
-
+add_importlibs(ping ws2_32 iphlpapi user32 msvcrt kernel32 ntdll)
 add_cd_file(TARGET ping DESTINATION reactos/system32 FOR all)
index fdc9695..28380d9 100644 (file)
@@ -1,42 +1,64 @@
 /*
- * Превод на Български/ Bulgarian translation
- * http://www.reactos.org/wiki/Bulgarian_translation
- * LOCATION: base/applications/network/ping/lang
+ * FILE:        base/applications/network/ping/lang/bg-BG.rc
+ * PURPOSE:     Bulgarian translations for ReactOS Ping Command
+ * TRANSLATORS:
  */
 
 LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nУпотреба: ping [-t] [-n пъти] [-l размер] [-w просрочване] целеви_приемник\n\n\
-Възможности:\n\
-    -t             Прави пинг към указания приемник до прекъсване.\n\
-                   За прекъсване- натиснете Контрол+C.\n\
-    -n пъти        Колко пъти да бъдат подадени заявките.\n\
-    -l размер      Размер на изпращания буфер.\n\
-    -w просрочване Просрочване на чакането [милисекунди].\n\n\0"
+    IDS_USAGE "\n\
+Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+            [-w timeout] [-4] [-6] target\n\
+\n\
+Options:\n\
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Number of echo requests to send.\n\
+    -l size     Send buffer size.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout in milliseconds to wait for each reply.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nПрави пинг %1 [%2] с %3!d! байта данни:\n\n\0"
-    IDS_PING_STATISTICS "\nСтатистика за пинга за %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Пакети: пратени= %1!d!, получени= %2!d!, изгубени = %3!d! (%4!d!%% загуби),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Приблизителна времетраене на приемо-предаването:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Най-малко= %1, Най-голямо= %2, Средно= %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Няма достатъчно свободни средства.\n\0"
-    IDS_UNKNOWN_HOST "Неизвестен приемник %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "Грешка при setsockopt (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Грешка при създаване на гнездо (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Грешка при подкаравнето на библиотеката (dll) за winsock.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Трябва да укажете името или IP адреса на целевият приемник.\n\0"
-    IDS_BAD_PARAMETER "Неправилен параметър %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Неправилно записване на възможността %1.\n\0"
-    IDS_BAD_OPTION "Неправилна стойност %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Неправилна стойност за -l, допустимите са от 0 до %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Неправилна стойност за -n, допустимите са от 1 до %1!u!.\n\0"
-    IDS_REPLY_FROM "Отговор от %1: байта=%2!d! време%3%4 ВЖ(TTL)=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Целевия приемник е недостижим.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Грешка при предаване на данните (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Грешка при получаване на данните (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Заявката е просрочена.\n\0"
-    IDS_MS "мс\0"
-    IDS_1MS "1 мс\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Not enough resources available.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistics for %1!s!:\n\
+    Packets: Sent = %2!d!, Received = %3!d!, Lost %4!d! (%5!u!%% loss),\n"
+
+    IDS_APPROXIMATE_RTT "Approximate round-trip time in milliseconds:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Average = %3!u!ms\n"
 END
index 62106d5..3b8d460 100644 (file)
@@ -1,41 +1,64 @@
-/* FILE:       base/applications/network/ping/lang/cs-CZ.rc
- * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
- * UPDATED:    2011-03-31
+/*
+ * FILE:        base/applications/network/ping/lang/cs-CZ.rc
+ * PURPOSE:     Czech translations for ReactOS Ping Command
+ * TRANSLATORS: Radek Liska (Black_Fox) <radekliska at gmail dot com>
  */
 
 LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nPoužití: ping [-t] [-n počet] [-l velikost] [-w timeout] cíl\n\n\
+    IDS_USAGE "\n\
+Použití: ping [-t] [-a] [-n počet] [-l velikost] [-f] [-i TTL] [-v TOS]\n\
+              [-w timeout] [-4] [-6] target\n\
+\n\
 Options:\n\
-    -t             Opakovaně zasílá požadavky o ozvěnu zadanému cíli až do zastavení.\n\
-                   Ukončení stisknutím Ctrl+C.\n\
-    -n počet       Počet požadavků o ozvěnu, které budou zaslány.\n\
-    -l velikost    Velikost vyrovnávací paměti.\n\
-    -w timeout     Doba v milisekundách, po kterou se bude čekat na odpověď.\n\n\0"
+    -t           Ping the specified host until stopped.\n\
+                 To see statistics and continue - type Control-Break;\n\
+                 To stop - type Control-C.\n\
+    -a           Resolve addresses to hostnames.\n\
+    -n počet     Počet požadavků o ozvěnu, které budou zaslány.\n\
+    -l velikost  Velikost vyrovnávací paměti.\n\
+    -f           Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL       Time To Live.\n\
+    -v TOS       Type Of Service (IPv4-only. This setting has been deprecated\n\
+                 and has no effect on the type of service field in the IP\n\
+                 Header).\n\
+    -w timeout   Doba v milisekundách, po kterou se bude čekat na odpověď.\n\
+    -4           Force using IPv4.\n\
+    -6           Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nPing na %1 [%2] s %3!d! bajty dat:\n\n\0"
-    IDS_PING_STATISTICS "\nStatistika pro %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Pakety: Odesláno = %1!d!, Přijato = %2!d!, Ztraceno = %3!d! (%4!d!%% ztráta),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Přibližná doba do přijetí odezvy v milisekundách:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Průměr = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Není k dispozici dostatek volných zdrojů.\n\0"
-    IDS_UNKNOWN_HOST "Neznámý hostitel %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt selhalo (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Nebylo možné vytvořit socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Nebylo možné inicializovat knihovnu winsock.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Je nutno zadat název nebo IP adresu cíle.\n\0"
-    IDS_BAD_PARAMETER "Nesprávný parametr %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Nesprávný formát volby %1.\n\0"
-    IDS_BAD_OPTION "Nesprávná volba %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Nesprávná hodnota volby -l, platný rozsah je od 0 do %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Nesprávná hodnota volby -n, platný rozsah je od 1 do %1!u!.\n\0"
-    IDS_REPLY_FROM "Odpověď od %1: bajtů=%2!d! čas%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Cíl je nedostupný.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Nebylo možné přenést data (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Nebylo možné přijmout data (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Časový limit žádosti vypršel.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Není k dispozici dostatek volných zdrojů.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Nesprávná volba %1.\n"
+    IDS_BAD_PARAMETER "Nesprávný parametr %1.\n"
+    IDS_BAD_VALUE "Nesprávná hodnota volby %1, platný rozsah je od %2!d! do %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Odpověď od %1: %0"
+    IDS_REPLY_BYTES "bajtů=%1!d! %0"
+    IDS_REPLY_TIME_MS "čas=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "čas<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Časový limit žádosti vypršel.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Statistika pro %1!s!:\n\
+    Pakety: Odesláno = %2!d!, Přijato = %3!d!, Ztraceno %4!d! (%5!u!%% ztráta),\n"
+
+    IDS_APPROXIMATE_RTT "Přibližná doba do přijetí odezvy v milisekundách:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Průměr = %3!u!ms\n"
 END
index b3e325e..8541397 100644 (file)
@@ -1,36 +1,64 @@
+/*
+ * FILE:        base/applications/network/ping/lang/de-DE.rc
+ * PURPOSE:     German translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
+
 LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nSyntax: ping [-t] [-n Anzahl] [-l Größe] [-w Zeitlimit] Zielhost\n\n\
+    IDS_USAGE "\n\
+Syntax: ping [-t] [-a] [-n Anzahl] [-l Größe] [-f] [-i TTL] [-v TOS]\n\
+             [-w Zeitlimit] [-4] [-6] Zielhost\n\
+\n\
 Optionen:\n\
-    -t             Sendet fortlaufend Ping-Signale an den angegebenen Host.\n\
-                   Drücken Sie STRG-C, um den Vorgang abzubrechen.\n\
-    -n Anzahl      Anzahl der Echoanforderungen, die gesendet werden.\n\
-    -l Größe       Größe des Sendepuffers.\n\
-    -w Zeitlimit   Zeitlimit in Millisekunden für eine Antwort.\n\n\0"
+    -t            Ping the specified host until stopped.\n\
+                  To see statistics and continue - type Control-Break;\n\
+                  To stop - type Control-C.\n\
+    -a            Resolve addresses to hostnames.\n\
+    -n Anzahl     Anzahl der Echoanforderungen, die gesendet werden.\n\
+    -l Größe      Größe des Sendepuffers.\n\
+    -f            Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL        Time To Live.\n\
+    -v TOS        Type Of Service (IPv4-only. This setting has been deprecated\n\
+                  and has no effect on the type of service field in the IP\n\
+                  Header).\n\
+    -w Zeitlimit  Zeitlimit in Millisekunden für eine Antwort.\n\
+    -4            Force using IPv4.\n\
+    -6            Force using IPv6.\n\
+\n"
+
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Nicht genügend freie Resourcen verfügbar.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Ungültiger Wert für Option %1, Erlaubter Bereich ist von %2!d! bis %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPing wird ausgeführt für %1 %0"
+    IDS_PINGING_HOSTNAME "\nPing wird ausgeführt für %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "von %1!s! %0"
+    IDS_PING_SIZE "mit %1!d! Bytes Daten:\n\n"
+    IDS_REPLY_FROM "Antwort von %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping Statistik für %1!s!:\n\
+    Pakete: Gesendet = %2!d!, Empfangen = %3!d!, Verloren %4!d! (%5!u!%% Verlust),\n"
 
-    IDS_PING_WITH_BYTES "\nPing wird ausgeführt für %1 [%2] mit %3!d! Bytes Daten:\n\n\0"
-    IDS_PING_STATISTICS "\nPing Statistik für %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Pakete: Gesendet = %1!d!, Empfangen = %2!d!, Verloren = %3!d! (%4!d!%% Verlust),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Durchschnittliche Antwortzeit in Millisekunden:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Durchschnitt = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Nicht genügend freie Resourcen verfügbar.\n\0"
-    IDS_UNKNOWN_HOST "Unbekannter Host %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt ist fehlgeschlagen (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Konnte keinen Socket erzeugen (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Die Winsock DLL konnte nicht initialisiert werden.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Name oder IP-Adresse des Zielhosts muss angegeben werden.\n\0"
-    IDS_BAD_PARAMETER "Ungültiger Parameter %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Ungültiges Format %1.\n\0"
-    IDS_BAD_OPTION "Ungültige Option %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Ungültiger Wert für Option -l, Erlaubter Bereich ist von 0 bis %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Ungültiger Wert für Option -n, Erlaubter Bereich ist von 1 bis %1!u!.\n\0"
-    IDS_REPLY_FROM "Antwort von %1: bytes=%2!d! time%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Zielhost nicht erreichbar.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Es konnten keine Daten gesendet werden (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Es konnten keine Daten empfangen werden (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Zeitüberschreitung der Anforderung.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_APPROXIMATE_RTT "Durchschnittliche Antwortzeit in Millisekunden:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Durchschnitt = %3!u!ms\n"
 END
index 867100f..235ce91 100644 (file)
@@ -1,36 +1,64 @@
+/*
+ * FILE:        base/applications/network/ping/lang/es-US.rc
+ * PURPOSE:     English translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
+
 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nUsage: ping [-t] [-n count] [-l size] [-w timeout] destination-host\n\n\
+    IDS_USAGE "\n\
+Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+            [-w timeout] [-4] [-6] target\n\
+\n\
 Options:\n\
-    -t             Ping the specified host until stopped.\n\
-                   To stop - type Control-C.\n\
-    -n count       Number of echo requests to send.\n\
-    -l size        Send buffer size.\n\
-    -w timeout     Timeout in milliseconds to wait for each reply.\n\n\0"
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Number of echo requests to send.\n\
+    -l size     Send buffer size.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout in milliseconds to wait for each reply.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
+
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Not enough resources available.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistics for %1!s!:\n\
+    Packets: Sent = %2!d!, Received = %3!d!, Lost %4!d! (%5!u!%% loss),\n"
 
-    IDS_PING_WITH_BYTES "\nPinging %1 [%2] with %3!d! bytes of data:\n\n\0"
-    IDS_PING_STATISTICS "\nPing statistics for %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Packets: Sent = %1!d!, Received = %2!d!, Lost = %3!d! (%4!d!%% loss),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Approximate round trip times in milli-seconds:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Average = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Not enough free resources available.\n\0"
-    IDS_UNKNOWN_HOST "Unknown host %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt failed (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Could not create socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Could not initialize winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Name or IP address of destination host must be specified.\n\0"
-    IDS_BAD_PARAMETER "Bad parameter %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Bad option format %1.\n\0"
-    IDS_BAD_OPTION "Bad option %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Bad value for option -l, valid range is from 0 to %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Bad value for option -n, valid range is from 1 to %1!u!.\n\0"
-    IDS_REPLY_FROM "Reply from %1: bytes=%2!d! time%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Destination host unreachable.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Could not transmit data (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Could not receive data (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Request timed out.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_APPROXIMATE_RTT "Approximate round-trip time in milliseconds:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Average = %3!u!ms\n"
 END
index 1839150..9e67741 100644 (file)
@@ -1,39 +1,64 @@
-/* Spanish Language resource file.
- * Translated by: Ismael Ferreras Morezuelas <2014-11-07> */
+/*
+ * FILE:        base/applications/network/ping/lang/es-ES.rc
+ * PURPOSE:     Spanish translations for ReactOS Ping Command
+ * TRANSLATORS: Ismael Ferreras Morezuelas
+ */
 
 LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nUso: ping [-t] [-n cuenta] [-l tamaño] [-w tiempo_de_espera] nombre_de_destino\n\n\
+    IDS_USAGE "\n\
+Uso: ping [-t] [-a] [-n cuenta] [-l tamaño] [-f] [-i TTL] [-v TOS]\n\
+          [-w tiempo_de_espera] [-4] [-6] nombre_de_destino\n\
+\n\
 Opciones:\n\
-    -t             Hacer ping al host especificado hasta que se detenga;\n\
-                   para detener, presione Ctrl+C.\n\
-    -n cuenta      Número de solicitudes de eco a enviar.\n\
-    -l tamaño      Tamaño de búfer a enviar.\n\
-    -w t_espera    Tiempo de espera en milisegundos para cada respuesta.\n\n\0"
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n cuenta   Número de solicitudes de eco a enviar.\n\
+    -l tamaño   Tamaño de búfer a enviar.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w t_espera Tiempo de espera en milisegundos para cada respuesta.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nHaciendo ping a %1 [%2] con %3!d! bytes de datos:\n\n\0"
-    IDS_PING_STATISTICS "\nEstadísticas de ping para %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Paquetes: enviados = %1!d!, recibidos = %2!d!, perdidos = %3!d! (%4!d!%% perdidos),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Tiempos aproximados de ida y vuelta en milisegundos:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Mínimo = %1, Máximo = %2, Media = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "No hay suficientes recursos libres disponibles.\n\0"
-    IDS_UNKNOWN_HOST "No se pudo encontrar el host %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt ha fallado (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "No se pudo iniciar el socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "No se pudo iniciar winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Debe especificar el nombre o dirección IP del destino.\n\0"
-    IDS_BAD_PARAMETER "El parámetro %1 no es válido.\n\0"
-    IDS_BAD_OPTION_FORMAT "El formato de opción %1 no es válido.\n\0"
-    IDS_BAD_OPTION "La opción %1 no es válida.\n\0"
-    IDS_BAD_VALUE_OPTION_L "El valor para la opción -l no es válido, debe de estar entre 0 y %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "El valor para la opción -n no es válido, debe de estar entre 1 y %1!u!.\n\0"
-    IDS_REPLY_FROM "Respuesta desde %1: bytes=%2!d! tiempo%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Host de destino inaccesible.\n\0"
-    IDS_COULD_NOT_TRANSMIT "No se ha podido transmitir ningún dato (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "No se ha podido recibir ningún dato (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "La petición ha caducado.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "No hay suficientes recursos libres disponibles.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "La opción %1 no es válida.\n"
+    IDS_BAD_PARAMETER "El parámetro %1 no es válido.\n"
+    IDS_BAD_VALUE "El valor para la opción %1 no es válido, debe de estar entre %2!d! y %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nHaciendo ping a %1 %0"
+    IDS_PINGING_HOSTNAME "\nHaciendo ping a %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "con %1!d! bytes de datos:\n\n"
+    IDS_REPLY_FROM "Respuesta desde %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "tiempo=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "tiempo<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "La petición ha caducado.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Estadísticas de ping para %1!s!:\n\
+    Paquetes: enviados = %2!d!, recibidos = %3!d!, perdidos %4!d! (%5!u!%% perdidos),\n"
+
+    IDS_APPROXIMATE_RTT "Tiempos aproximados de ida y vuelta en milisegundos:\n\
+    Mínimo = %1!u!ms, Máximo = %2!u!ms, Media = %3!u!ms\n"
 END
index 8bb866a..cd31719 100644 (file)
@@ -1,36 +1,64 @@
+/*
+ * FILE:        base/applications/network/ping/lang/fr-FR.rc
+ * PURPOSE:     French translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
+
 LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nUtilisation : ping [-t] [-n nombre] [-l taille] [-w délai] hôte-destination\n\n\
+    IDS_USAGE "\n\
+Utilisation : ping [-t] [-a] [-n nombre] [-l taille] [-f] [-i TTL] [-v TOS]\n\
+                   [-w délai] [-4] [-6] hôte-destination\n\
+\n\
 Options :\n\
-    -t             Ping l'hôte spécifié jusqu'à l'arrêt.\n\
-                   Pour l'arrêter, tapez Ctrl+c.\n\
-    -n nombre      Nombre de requêtes echo à envoyer.\n\
-    -l taille      Taille du tampon d'envoi.\n\
-    -w délai       Délai d'attente en millisecondes pour chaque réponse.\n\n\0"
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n nombre   Nombre de requêtes echo à envoyer.\n\
+    -l taille   Taille du tampon d'envoi.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w délai    Délai d'attente en millisecondes pour chaque réponse.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
+
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Ressources libres disponibles insuffisantes.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Option incorrecte %1.\n"
+    IDS_BAD_PARAMETER "Paramètre incorrect %1.\n"
+    IDS_BAD_VALUE "Valeur incorrecte pour l'option %1, elle doit être entre %2!d! et %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPing de %1 %0"
+    IDS_PINGING_HOSTNAME "\nPing de %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "avec %1!d! octets de données :\n\n"
+    IDS_REPLY_FROM "Réponse de %1 : %0"
+    IDS_REPLY_BYTES "octets=%1!d! %0"
+    IDS_REPLY_TIME_MS "durée=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "durée<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Expiration du délai d'attente.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Statistiques du ping de %1!s! :\n\
+    Paquets : Envoyés = %2!d!, Reçus = %3!d!, Perdus %4!d! (%5!u!%% de perte),\n"
 
-    IDS_PING_WITH_BYTES "\nPing de %1 [%2] avec %3!d! octets de données :\n\n\0"
-    IDS_PING_STATISTICS "\nStatistiques du ping de %1 :\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Paquets : Envoyés = %1!d!, Reçus = %2!d!, Perdus = %3!d! (%4!d!%% de perte),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Délai approximatif de réponse en millisecondes :\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Moyenne = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Ressources libres disponibles insuffisantes.\n\0"
-    IDS_UNKNOWN_HOST "Hôte inconnu %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "Échec de setsockopt (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Impossible de créer la socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Impossible d'initialiser winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Le nom ou l'adresse IP de l'hôte de destination doit être spécifié.\n\0"
-    IDS_BAD_PARAMETER "Paramètre incorrect %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Format d'option incorrect %1.\n\0"
-    IDS_BAD_OPTION "Option incorrecte %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Valeur incorrecte pour l'option -l, elle doit être entre 0 et %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Valeur incorrecte pour l'option -n, elle doit être entre 1 et %1!u!.\n\0"
-    IDS_REPLY_FROM "Réponse de %1 : octets=%2!d! durée%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Hôte de destination injoignable.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Échec lors de la transmission (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Échec lors de la récéption (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Expiration du délai d'attente.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_APPROXIMATE_RTT "Délai approximatif de réponse en millisecondes :\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Moyenne = %3!u!ms\n"
 END
index 2834b4a..e23e3f9 100644 (file)
@@ -1,36 +1,64 @@
+/*
+ * FILE:        base/applications/network/ping/lang/it-IT.rc
+ * PURPOSE:     Italian translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
+
 LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nUso: ping [-t] [-n conteggio] [-l dimensione] [-w timeout] host-destinazione\n\n\
+    IDS_USAGE "\n\
+Uso: ping [-t] [-a] [-n conteggio] [-l dimensione] [-f] [-i TTL] [-v TOS]\n\
+          [-w timeout] [-4] [-6] host-destinazione\n\
+\n\
 Opzioni:\n\
-    -t             Esegue il ping dell'host specificato finchè non termina.\n\
-                   Per fermare - digitare Control-C.\n\
-    -n conteggio   Numero di richieste echo da inviare.\n\
-    -l dimensione  Dimensione del buffer di invio.\n\
-    -w timeout     Timeout in millisecondi per l'attesa di ogni risposta.\n\n\0"
+    -t            Ping the specified host until stopped.\n\
+                  To see statistics and continue - type Control-Break;\n\
+                  To stop - type Control-C.\n\
+    -a            Resolve addresses to hostnames.\n\
+    -n conteggio  Numero di richieste echo da inviare.\n\
+    -l dimensione Dimensione del buffer di invio.\n\
+    -f            Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL        Time To Live.\n\
+    -v TOS        Type Of Service (IPv4-only. This setting has been deprecated\n\
+                  and has no effect on the type of service field in the IP\n\
+                  Header).\n\
+    -w timeout    Timeout in millisecondi per l'attesa di ogni risposta.\n\
+    -4            Force using IPv4.\n\
+    -6            Force using IPv6.\n\
+\n"
+
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Risorse disponibili insufficienti.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Opzione errata %1.\n"
+    IDS_BAD_PARAMETER "Parametro errato %1.\n"
+    IDS_BAD_VALUE "Valore errato per il parametro %1, è valido un valore tra %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPing in corso %1 %0"
+    IDS_PINGING_HOSTNAME "\nPing in corso %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "con %1!d! bytes di dati:\n\n"
+    IDS_REPLY_FROM "Risposta da %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Richiesta scaduta.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Statistiche di Ping per %1!s!:\n\
+    Pacchetti: Inviati = %2!d!, Ricevuti = %3!d!, Persi %4!d! (%5!u!%% perdita),\n"
 
-    IDS_PING_WITH_BYTES "\nPing in corso %1 [%2] con %3!d! bytes di dati:\n\n\0"
-    IDS_PING_STATISTICS "\nStatistiche di Ping per %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Pacchetti: Inviati = %1!d!, Ricevuti = %2!d!, Persi = %3!d! (%4!d!%% perdita),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Tempo approssimato di andata e ritorno in milli-secondi:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimo = %1, Massimo = %2, Media = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Risorse disponibili insufficienti.\n\0"
-    IDS_UNKNOWN_HOST "Host sconosciuto %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt fallito (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Impossibile creare il socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Impossibile inizializzare winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Il nome o l'IP dell'host deve essere specificato.\n\0"
-    IDS_BAD_PARAMETER "Parametro errato %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Formato opzione errato %1.\n\0"
-    IDS_BAD_OPTION "Opzione errata %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Valore errato per il parametro -l, è valido un valore tra 0 to %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Valore errato per il parametro -n, è valido un valore tra 1 to %1!u!.\n\0"
-    IDS_REPLY_FROM "Risposta da %1: bytes=%2!d! time%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Host destinazione irraggiungibile.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Impossibile trasmettere dati (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Impossibile ricevere dati (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Richiesta scaduta.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_APPROXIMATE_RTT "Tempo approssimato di andata e ritorno in milli-secondi:\n\
+    Minimo = %1!u!ms, Massimo = %2!u!ms, Media = %3!u!ms\n"
 END
index 83d4286..5ce426a 100644 (file)
@@ -1,44 +1,64 @@
 /*
- *    Translated by Caemyr - Olaf Siejka (Jan, 2011)
- *    Use ReactOS forum PM or IRC to contact me
- *    http://www.reactos.org
- *    IRC: irc.freenode.net #reactos-pl
- *    UTF-8 conversion by Caemyr (May, 2011)
+ * FILE:        base/applications/network/ping/lang/pl-PL.rc
+ * PURPOSE:     Polish translations for ReactOS Ping Command
+ * TRANSLATORS: Olaf Siejka (Caemyr)
  */
 
 LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nSposób użycia: ping [-t] [-n ilość] [-l bajtów] [-w czas] host-docelowy\n\n\
-Opcje:\n\
-    -t             Pinguj wskazanego hosta w sposób ciągły.\n\
-                   Aby przerwać - wciśnij Control C.\n\
-    -n ilość     Ilość prób pingowania.\n\
-    -l bajtów   Rozmiar pakietu echo w bajtach     .\n\
-    -w czas     Opóźnienie oczekiwanej odpowiedzi, w milisekundach.\n\n\0"
+    IDS_USAGE "\n\
+Sposób użycia: ping [-t] [-a] [-n ilość] [-l bajtów] [-f] [-i TTL] [-v TOS]\n\
+                    [-w czas] [-4] [-6] host-docelowy\n\
+\n\
+Options:\n\
+    -t        Ping the specified host until stopped.\n\
+              To see statistics and continue - type Control-Break;\n\
+              To stop - type Control-C.\n\
+    -a        Resolve addresses to hostnames.\n\
+    -n ilość  Ilość prób pingowania.\n\
+    -l bajtów Rozmiar pakietu echo w bajtach.\n\
+    -f        Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL    Time To Live.\n\
+    -v TOS    Type Of Service (IPv4-only. This setting has been deprecated\n\
+              and has no effect on the type of service field in the IP\n\
+              Header).\n\
+    -w czas   Opóźnienie oczekiwanej odpowiedzi, w milisekundach.\n\
+    -4        Force using IPv4.\n\
+    -6        Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nPingowanie %1 [%2] przy użyciu %3!d! bajtów danych:\n\n\0"
-    IDS_PING_STATISTICS "\nStatystyka rezultatu badania hosta %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Pakiety: Wysłane = %1!d!, Odebrane = %2!d!, Utracone = %3!d! (%4!d!%% strat),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Całkowity, przybliżony czas podróży pakietu w millisekundach:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maksimum = %2, Uśredniony = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Brak dostępnych zasobów.\n\0"
-    IDS_UNKNOWN_HOST "Nieznany host %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "Błąd w setsockopt (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Błąd podczas tworzenia gniazda (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Błąd podczas inicjalizacji winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Brak nazwy hosta bądź adresu IP.\n\0"
-    IDS_BAD_PARAMETER "Nieprawidłowy parametr %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Nieprawidłowy format opcji %1.\n\0"
-    IDS_BAD_OPTION "Nieprawidłowa opcja %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Nieprawidłowa wartość dla opcji -l, wymagana liczba naturalna od 0 do %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Nieprawidłowa wartość dla opcji -n, wymagana liczba naturalna od 1 do %1!u!.\n\0"
-    IDS_REPLY_FROM "Odpowiedź z %1: bajtów=%2!d! czas%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Host docelowy nieosiągalny.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Błąd podczas transmisji danych (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Błąd podczas odbioru danych (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Brak odpowiedzi.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Brak dostępnych zasobów.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Nieprawidłowa opcja %1.\n"
+    IDS_BAD_PARAMETER "Nieprawidłowy parametr %1.\n"
+    IDS_BAD_VALUE "Nieprawidłowa wartość dla opcji %1, wymagana liczba naturalna od %2!d! do %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPingowanie %1 %0"
+    IDS_PINGING_HOSTNAME "\nPingowanie %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "z %1!s! %0"
+    IDS_PING_SIZE "przy użyciu %1!d! bajtów danych:\n\n"
+    IDS_REPLY_FROM "Odpowiedź z %1: %0"
+    IDS_REPLY_BYTES "bajtów=%1!d! %0"
+    IDS_REPLY_TIME_MS "czas=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "czas<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Brak odpowiedzi.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Statystyka rezultatu badania hosta %1!s!:\n\
+    Pakiety: Wysłane = %2!d!, Odebrane = %3!d!, Utracone %4!d! (%5!u!%% strat),\n"
+
+    IDS_APPROXIMATE_RTT "Całkowity, przybliżony czas podróży pakietu w millisekundach:\n\
+    Minimum = %1!u!ms, Maksimum = %2!u!ms, Uśredniony = %3!u!ms\n"
 END
index 4d0df28..5adb4e9 100644 (file)
@@ -1,45 +1,64 @@
-/* 
- * FILE:       base/applications/network/ping/lang/ro-RO.rc
- *             ReactOS Project (http://www.reactos.org)
- * TRANSLATOR: Fulea Ștefan (PM on ReactOS Forum at fulea.stefan)
- * CHANGE LOG: 2011-08-21  initial translation
- *             2011-10-26  diacritics correction, other minor changes
+/*
+ * FILE:        base/applications/network/ping/lang/ro-RO.rc
+ * PURPOSE:     Romanian translations for ReactOS Ping Command
+ * TRANSLATORS: Fulea Ștefan
  */
 
 LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nUtilizare: ping [-t] [-n număr] [-l dimensiune] [-w expirare] gazdă-destinație\n\n\
+    IDS_USAGE "\n\
+Utilizare: ping [-t] [-a] [-n număr] [-l dimensiune] [-f] [-i TTL] [-v TOS]\n\
+                [-w expirare] [-4] [-6] gazdă-destinație\n\
+\n\
 Opțiuni:\n\
-    -t             Transmite necontenit pachete către gazda specificată.\n\
-                   Pentru a opri transmisia - tastați Control-C.\n\
-    -n număr       Numărul de ecouri cerute ca răspuns.\n\
-    -l dimensiune  Transmite dimensiunea memoriei tampon.\n\
-    -w expirare    Limita temporală de așteptare a unui răspuns,\n\
-                   exprimată în milisecunde.\n\n\0"
+    -t            Ping the specified host until stopped.\n\
+                  To see statistics and continue - type Control-Break;\n\
+                  To stop - type Control-C.\n\
+    -a            Resolve addresses to hostnames.\n\
+    -n număr      Numărul de ecouri cerute ca răspuns.\n\
+    -l dimensiune Transmite dimensiunea memoriei tampon.\n\
+    -f            Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL        Time To Live.\n\
+    -v TOS        Type Of Service (IPv4-only. This setting has been deprecated\n\
+                  and has no effect on the type of service field in the IP\n\
+                  Header).\n\
+    -w expirare   Limita temporală de așteptare a unui răspuns, exprimată în milisecunde.\n\
+    -4            Force using IPv4.\n\
+    -6            Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nTransmitere către %1 [%2] cu %3!d! octeți de date:\n\n\0"
-    IDS_PING_STATISTICS "\nstatistici de transmisie pentru %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    pachete: transmise = %1!d!, recepționate = %2!d!, pierdute = %3!d! (%4!d!%% pierderi),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "timpul aproximativ de tur-retur, in milisecunde:\n\0"
-    IDS_MIN_MAX_AVERAGE "    minim = %1, maxim = %2, mediu = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Nu există suficiente resurse disponibile.\n\0"
-    IDS_UNKNOWN_HOST "%1 este o gazdă necunoscută.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt a eșuat (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Nu se poate crea socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Nu se poate iniția winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Este necesară specificarea numelui sau a adresei IP a gazdei destinație.\n\0"
-    IDS_BAD_PARAMETER "Parametru eronat: %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Opțiune cu format eronat: %1.\n\0"
-    IDS_BAD_OPTION "%1 este o opțiune eronată.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Valoare eronată pentru opțiunea -l, domeniul valid este 0 - %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Valoare eronată pentru opțiunea -n, domeniul valid este 1 - %1!u!.\n\0"
-    IDS_REPLY_FROM "Răspuns de la %1: octeți=%2!d! timp%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Gazda destinație este inaccesibilă.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Nu s-a reușit transmiterea datelor (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Nu s-a reușit recepția datelor (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Cererea a expirat.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Nu există suficiente resurse disponibile.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "%1 este o opțiune eronată.\n"
+    IDS_BAD_PARAMETER "Parametru eronat: %1.\n"
+    IDS_BAD_VALUE "Valoare eronată pentru opțiunea %1, domeniul valid este %2!d! - %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nTransmitere către %1 %0"
+    IDS_PINGING_HOSTNAME "\nTransmitere către %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "cu %1!d! octeți de date:\n\n"
+    IDS_REPLY_FROM "Răspuns de %1: %0"
+    IDS_REPLY_BYTES "octeți=%1!d! %0"
+    IDS_REPLY_TIME_MS "timp=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "timp<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Cererea a expirat.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+statistici de transmisie pentru %1!s!:\n\
+    pachete: transmise = %2!d!, recepționate = %3!d!, pierdute %4!d! (%5!u!%% pierderi),\n"
+
+    IDS_APPROXIMATE_RTT "timpul aproximativ de tur-retur, in milisecunde:\n\
+    minim = %1!u!ms, maxim = %2!u!ms, mediu = %3!u!ms\n"
 END
index 213a61f..5c5c553 100644 (file)
@@ -1,36 +1,64 @@
+/*
+ * FILE:        base/applications/network/ping/lang/ru-RU.rc
+ * PURPOSE:     Russian translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
+
 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nИспользование:\n    ping [-t] [-n <число>] [-l <размер>] [-w <тайм-аут>] конечный_узел\n\n\
+    IDS_USAGE "\n\
+Использование: ping [-t] [-a] [-n <число>] [-l <размер>] [-f] [-i TTL] [-v TOS]\n\
+                    [-w <тайм-аут>] [-4] [-6] конечный_узел\n\
+\n\
 Параметры:\n\
-    -t               Проверка связи с указанным узлом до прекращения.\n\
-                     Для прекращения нажмите CTRL+C.\n\
-    -n <число>       Число отправляемых запросов эхо-запросов.\n\
-    -l <размер>      Размер буфера отправки.\n\
-    -w <тайм-аут>    Тайм-аут для каждого ответа (в миллисекундах)\n\n\0"
+    -t            Ping the specified host until stopped.\n\
+                  To see statistics and continue - type Control-Break;\n\
+                  To stop - type Control-C.\n\
+    -a            Resolve addresses to hostnames.\n\
+    -n <число>    Число отправляемых запросов эхо-запросов.\n\
+    -l <размер>   Размер буфера отправки.\n\
+    -f            Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL        Time To Live.\n\
+    -v TOS        Type Of Service (IPv4-only. This setting has been deprecated\n\
+                  and has no effect on the type of service field in the IP\n\
+                  Header).\n\
+    -w <тайм-аут> Тайм-аут для каждого ответа (в миллисекундах).\n\
+    -4            Force using IPv4.\n\
+    -6            Force using IPv6.\n\
+\n"
+
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Невозможно выделить требуемую память.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Неверная опция %1.\n"
+    IDS_BAD_PARAMETER "Неверный параметр %1.\n"
+    IDS_BAD_VALUE "Недопустимое значение параметра %1, допустимый диапазон с %2!d! по %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nОбмен пакетами с %1 %0"
+    IDS_PINGING_HOSTNAME "\nОбмен пакетами с %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "по %1!d! байта данных:\n\n"
+    IDS_REPLY_FROM "Ответ от %1: %0"
+    IDS_REPLY_BYTES "число байт=%1!d! %0"
+    IDS_REPLY_TIME_MS "время=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "время<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Превышен интервал ожидания для запроса.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Статистика Ping для %1!s!:\n\
+    Пакетов: отправлено = %2!d!, получено = %3!d!, потеряно %4!d! (%5!u!%% потерь),\n"
 
-    IDS_PING_WITH_BYTES "\nОбмен пакетами с %1 [%2] по %3!d! байта данных:\n\n\0"
-    IDS_PING_STATISTICS "\nСтатистика Ping для %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Пакетов: отправлено = %1!d!, получено = %2!d!, потеряно = %3!d! (%4!d!%% потерь),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Приблизительное время приема-передачи в мс:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Минимальное = %1, Максимальное = %2, Среднее = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Невозможно выделить требуемую память.\n\0"
-    IDS_UNKNOWN_HOST "Неизвестный узел %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "Ошибка setsockopt (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Не удалось создать сокет (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Не удается инициализировать интерфейс ReactOS Sockets.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Необходимо указать адрес IP.\n\0"
-    IDS_BAD_PARAMETER "Неверный параметр %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Неверный формат опции %1.\n\0"
-    IDS_BAD_OPTION "Неверная опция %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Недопустимое значение параметра -l, допустимый диапазон с 0 по %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Недопустимое значение параметра -n, допустимый диапазон с 1 по %1!u!.\n\0"
-    IDS_REPLY_FROM "Ответ от %1: число байт=%2!d! время%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Заданный узел недоступен.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Невозможно передать данные (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Невозможно получить данные (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Превышен интервал ожидания для запроса.\n\0"
-    IDS_MS "мсек\0"
-    IDS_1MS "1мсек\0"
+    IDS_APPROXIMATE_RTT "Приблизительное время приема-передачи в мс:\n\
+    Минимальное = %1!u!ms, Максимальное = %2!u!ms, Среднее = %3!u!ms\n"
 END
index f3911c8..52ad245 100644 (file)
@@ -1,40 +1,64 @@
-/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com) 
- * DATE OF TR:  29-11-2013
-*/
+/*
+ * FILE:        base/applications/network/ping/lang/sq-AL.rc
+ * PURPOSE:     Albabian translations for ReactOS Ping Command
+ * TRANSLATORS: Ardit Dani <ardit.dani@gmail.com>
+ */
 
 LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nPërdorimi: ping [-t] [-n count] [-l size] [-w timeout] destination-host\n\n\
+    IDS_USAGE "\n\
+Përdorimi: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+                [-w timeout] [-4] [-6] destination-host\n\
+\n\
 Options:\n\
-    -t             Pingo hostin specifik deri ne ndalim.\n\
-                   Për ndalim - shkruaj Control-C.\n\
-    -n count       Numri i kerkesa echo per tu derguar.\n\
-    -l size        Dergo masen buffer.\n\
-    -w timeout     Timeout në milisekonda per te pritur secilen pergjigje.\n\n\0"
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Numri i kerkesa echo per tu derguar.\n\
+    -l size     Dergo masen buffer.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout në milisekonda per te pritur secilen pergjigje.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nPing ne vazhdim %1 [%2] me %3!d! bytes data:\n\n\0"
-    IDS_PING_STATISTICS "\nStatistikat e Ping për %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Packeta: Dërguar = %1!d!, Marr = %2!d!, Humbur = %3!d! (%4!d!%% loss),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Afersisht koha e matjes në mili-sekonda:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Mesatar = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Nuk mjaftojne burimet ne dispozicion.\n\0"
-    IDS_UNKNOWN_HOST "Host i panjohur %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt deshtoj (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Nuk krijoj dot socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Nuk inicializoj dor winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Emri ose adresa IP'se dhe destinacioni duhet specifikuar.\n\0"
-    IDS_BAD_PARAMETER "Parametra i keq %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Opsion formati i keq %1.\n\0"
-    IDS_BAD_OPTION "Opsion i keq %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Vlere e keqe per opsion -l, varh i vlefshem nga 0 në %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Vlere e keqe per opsion -n, varh i vlefshem nga 1 në %1!u!.\n\0"
-    IDS_REPLY_FROM "Pergjigju nga %1: bytes=%2!d! time%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Destinacioni i hostit i  pakapshem.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Nuk transmetoj dot data (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Nuk merr dot data (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Kerkese kohe mbaroj.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Nuk mjaftojne burimet ne dispozicion.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Opsion i keq %1.\n"
+    IDS_BAD_PARAMETER "Parametra i keq %1.\n"
+    IDS_BAD_VALUE "Vlere e keqe per opsion %1, varh i vlefshem nga %2!d! në %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPing ne vazhdim %1 %0"
+    IDS_PINGING_HOSTNAME "\nPing ne vazhdim %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "me %1!d! bytes data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Kerkese kohe mbaroj.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Statistikat e Ping për %1!s!:\n\
+    Packeta: Dërguar = %2!d!, Marr = %3!d!, Humbur %4!d! (%5!u!%% loss),\n"
+
+    IDS_APPROXIMATE_RTT "Afersisht koha e matjes në mili-sekonda:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Mesatar = %3!u!ms\n"
 END
index c92043e..5b24145 100644 (file)
@@ -1,43 +1,64 @@
 /*
- * PROJECT:    ReactOS PING
- * FILE:       base/applications/network/ping/lang/sv-SE.rc
- * PURPOSE:    Swedish resource file
- * TRANSLATOR: Jaix Bly
+ * FILE:        base/applications/network/ping/lang/sv-SE.rc
+ * PURPOSE:     Swedish translations for ReactOS Ping Command
+ * TRANSLATORS: Jaix Bly
  */
 
 LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nSYNTAX: ping [-t] [-n antal] [-l storlek] [-w timeout] värddator\n\n\
+    IDS_USAGE "\n\
+SYNTAX: ping [-t] [-a] [-n antal] [-l storlek] [-f] [-i TTL] [-v TOS]\n\
+             [-w timeout] [-4] [-6] värddator\n\
+\n\
 Alternativ:\n\
-    -t             Pinga den angivna datorn tills kommandor stoppas.\n\
-                   För att stoppa - tryck Ctrl-C.\n\
-    -n antal       Antal ekobegäranden som ska skickas.\n\
-    -l storlek     Sändniningsbuffertens storlek.\n\
-    -w timeout     Timeout i millisekunder att vänta på varje svar.\n\n\0"
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n antal    Antal ekobegäranden som ska skickas.\n\
+    -l storlek  Sändniningsbuffertens storlek.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout i millisekunder att vänta på varje svar.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nPingar %1 [%2] med %3!d! bytes data:\n\n\0"
-    IDS_PING_STATISTICS "\nPing statistk för %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Packet: Sända = %1!d!, Mottagna = %2!d!, Förlorade = %3!d! (%4!d!%% förlust),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Ungefärliga slingtider i millisekunder:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Minimum = %1, Maximum = %2, Genomsnittlig = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Inte tillräckliga resurser tillgänliga.\n\0"
-    IDS_UNKNOWN_HOST "Okänd Värd %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt misslyckades (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Kunde inte skapa socket (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Kunde inte initialisera winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Namn eller IP adress till värd måste anges.\n\0"
-    IDS_BAD_PARAMETER "Ogiltig parameter %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Ogiltigt format på alternativ %1.\n\0"
-    IDS_BAD_OPTION "Ogiltigt alternativ %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Ogiltigt värde för alternativ -l, giltig intervall är från 0 till %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Ogiltigt värde för alternativ -n, giltig intervall är från 1 till %1!u!.\n\0"
-    IDS_REPLY_FROM "Svar från %1: bytes=%2!d! tid%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Värddatorn går inte att nå.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Kunde inte sända data (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Kunde inte ta emot data (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Förfrågan gjorde timeout.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Inte tillräckliga resurser tillgänliga.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Ogiltigt alternativ %1.\n"
+    IDS_BAD_PARAMETER "Ogiltig parameter %1.\n"
+    IDS_BAD_VALUE "Ogiltigt värde för alternativ %1, giltig intervall är från %2!d! till %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPingar %1 %0"
+    IDS_PINGING_HOSTNAME "\nPingar %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "med %1!d! bytes data:\n\n"
+    IDS_REPLY_FROM "Svar från %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "tid=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "tid<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Förfrågan gjorde timeout.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistk för %1!s!:\n\
+    Packet: Sända = %2!d!, Mottagna = %3!d!, Förlorade %4!d! (%5!u!%% förlust),\n"
+
+    IDS_APPROXIMATE_RTT "Ungefärliga slingtider i millisekunder:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Genomsnittlig = %3!u!ms\n"
 END
index b47daef..90bea31 100644 (file)
@@ -1,38 +1,64 @@
-/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
+/*
+ * FILE:        base/applications/network/ping/lang/tr-TR.rc
+ * PURPOSE:     Turkish translations for ReactOS Ping Command
+ * TRANSLATORS: Erdem Ersoy <erdemersoy@live.com>
+ */
 
 LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nKullanım: ping [-t] [-n sayı] [-l boyut] [-w süre aşımı] varış anabilgisayarı\n\n\
-Seçenekler:\n\
-    -t             Belirtilen anabilgisayara durana kadar ping atar.\n\
-                   Durdurmak için Denetim ve C'ye basınız.\n\
+    IDS_USAGE "\n\
+Kullanım: ping [-t] [-a] [-n sayı] [-l boyut] [-f] [-i TTL] [-v TOS]\n\
+            [-w süre aşımı] [-4] [-6] varış anabilgisayarı\n\
+\n\
+Options:\n\
+    -t             Ping the specified host until stopped.\n\
+                   To see statistics and continue - type Control-Break;\n\
+                   To stop - type Control-C.\n\
+    -a             Resolve addresses to hostnames.\n\
     -n sayı        Gönderilecek yankı istekleri sayısı.\n\
     -l boyut       Arabellek boyutunu gönder.\n\
-    -w süre aşımı  Tüm yanutlar için beklemeye mili sâniye olarak süre aşımı.\n\n\0"
+    -f             Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL         Time To Live.\n\
+    -v TOS         Type Of Service (IPv4-only. This setting has been deprecated\n\
+                   and has no effect on the type of service field in the IP\n\
+                   Header).\n\
+    -w süre aşımı  Tüm yanutlar için beklemeye mili sâniye olarak süre aşımı.\n\
+    -4             Force using IPv4.\n\
+    -6             Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\n%3!d! veri çoklusuyla %1 [%2] varışına ping atılıyor:\n\n\0"
-    IDS_PING_STATISTICS "\n%1 için ping atma sayımlamaları:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Paketler: Gönderilen = %1!d!, Alınan = %2!d!, Yitirilen = %3!d! (%%%4!d! yitik),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Mili sâniye olarak yaklaşık gidiş geliş süreleri:\n\0"
-    IDS_MIN_MAX_AVERAGE "    En Az = %1, En Çok = %2, Ortalama = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Kullanılabilir yeterli boş kaynak yok.\n\0"
-    IDS_UNKNOWN_HOST "Bilinmeyen anabilgisayar: %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt başarısız oldu (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Soket oluşturulamadı (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "winsock DLL'si başlatılamadı.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Varış anabilgisayarının adı ya da IP adresi belirtilmiş olmalıdır.\n\0"
-    IDS_BAD_PARAMETER "Geçersiz değişken: %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Geçersiz seçenek biçimi: %1.\n\0"
-    IDS_BAD_OPTION "Geçersiz seçenek: %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "-l seçeneği için değer geçersiz, geçerli aralık 0'dan %1!d! sayısına dektir.\n\0"
-    IDS_BAD_VALUE_OPTION_N "-n seçeneği için değer geçersiz, geçerli aralık 1'den %1!u! sayısına dektir.\n\0"
-    IDS_REPLY_FROM "%1 varışından yanıt: çoklu=%2!d! süre=%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Varış anabilgisayarı erişilemez.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Veri gönderilemedi (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Veri alınamadı (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "İstek süre aşımına uğradı.\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1 ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Kullanılabilir yeterli boş kaynak yok.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Geçersiz seçenek: %1.\n"
+    IDS_BAD_PARAMETER "Geçersiz değişken: %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "%1 varışından yanıt: %0"
+    IDS_REPLY_BYTES "çoklu=%1!d! %0"
+    IDS_REPLY_TIME_MS "süre=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "süre<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "İstek süre aşımına uğradı.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+%1!s! için ping atma sayımlamaları:\n\
+    Paketler: Gönderilen = %2!d!, Alınan = %3!d!, Yitirilen %4!d! (%%%5!u! yitik),\n"
+
+    IDS_APPROXIMATE_RTT "Mili sâniye olarak yaklaşık gidiş geliş süreleri:\n\
+    En Az = %1!u!ms, En Çok = %2!u!ms, Ortalama = %3!u!ms\n"
 END
index 90b20ef..7426eb0 100644 (file)
@@ -1,44 +1,64 @@
 /*
- * PROJECT:    Ping for ReactOS
- * LICENSE:    GPL - See COPYING in the top level directory
- * FILE:       base/applications/network/ping/lang/uk-UA.rc
- * PURPOSE:    Ukraianian Language File for Ping
- * TRANSLATOR: Sakara Eugene (vzov@yandex.ua)
+ * FILE:        base/applications/network/ping/lang/uk-UA.rc
+ * PURPOSE:     Ukranian translations for ReactOS Ping Command
+ * TRANSLATORS:
  */
 
 LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "\nВикористання: ping [-t] [-n count] [-l size] [-w timeout] хост\n\n\
-Опції:\n\
-    -t             Пінг вказаного вузла поки не буде здійснена ручна зупинка.\n\
-                   Для зупинки натисніть Control-C.\n\
-    -n count       Кількість запитів, які будуть підправлені.\n\
-    -l size        Розмір буфера відправки.\n\
-    -w timeout     Час очікування кожної відповіді в мілісекундах.\n\n\0"
+    IDS_USAGE "\n\
+Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+            [-w timeout] [-4] [-6] target\n\
+\n\
+Options:\n\
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Number of echo requests to send.\n\
+    -l size     Send buffer size.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout in milliseconds to wait for each reply.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\nОбмін пакетами з %1 [%2] по %3!d! байта:\n\n\0"
-    IDS_PING_STATISTICS "\nСтатистика Ping для %1:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    Пакетів: відправлено = %1!d!, отримано = %2!d!, втрачено = %3!d! (%4!d!%% втрат),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "Приблизний час прийому-передачі:\n\0"
-    IDS_MIN_MAX_AVERAGE "    Мінімальний = %1, Максимальний = %2, Середній = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "Недостатньо вільних ресурсів.\n\0"
-    IDS_UNKNOWN_HOST "Невідомий хост %1.\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt невдалий (%1!d!).\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "Не вдалося створити сокет (#%1!d!).\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "Не вдалося ініціалізувати winsock dll.\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "Ім'я або IP-адреса хосту повинні бути вказані.\n\0"
-    IDS_BAD_PARAMETER "Поганий параметр %1.\n\0"
-    IDS_BAD_OPTION_FORMAT "Невірний формат опції %1.\n\0"
-    IDS_BAD_OPTION "Погана опція %1.\n\0"
-    IDS_BAD_VALUE_OPTION_L "Неправильне значення для опції -l, допустимий діапазон від 0 до %1!d!.\n\0"
-    IDS_BAD_VALUE_OPTION_N "Неправильне значення для опції -n, допустимий діапазон від 1 до %1!u!.\n\0"
-    IDS_REPLY_FROM "Відповідь від %1: байтів=%2!d! час%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "Хост недоступний.\n\0"
-    IDS_COULD_NOT_TRANSMIT "Не вдалося передати дані (%1!d!).\n\0"
-    IDS_COULD_NOT_RECV "Не вдалося отримати дані (%1!d!).\n\0"
-    IDS_REQUEST_TIMEOUT "Очікування запиту.\n\0"
-    IDS_MS "мс\0"
-    IDS_1MS "1мс\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Not enough resources available.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistics for %1!s!:\n\
+    Packets: Sent = %2!d!, Received = %3!d!, Lost %4!d! (%5!u!%% loss),\n"
+
+    IDS_APPROXIMATE_RTT "Approximate round-trip time in milliseconds:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Average = %3!u!ms\n"
 END
index e7f5ae2..0509364 100644 (file)
@@ -1,38 +1,64 @@
-/* Translated by Song Fuchang (0xfc) <sfc_0@yahoo.com.cn> */
+/*
+ * FILE:        base/applications/network/ping/lang/zh-CN.rc
+ * PURPOSE:     Chinese (Simplified) translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
 
 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "用法:ping [-t] [-n 次数] [-l 大小] [-w 超时] 目标主机\n\n\
-选项:\n\
-    -t             不停呼叫指定的主机直到被终止。\n\
-                   要停止 - 按下 Ctrl-C。\n\
-    -n 次数         发送回响包的次数。\n\
-    -l 大小         发送包的大小。\n\
-    -w 超时         等待每个回复的时间(毫秒)。\n\n\0"
+    IDS_USAGE "\n\
+Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+            [-w timeout] [-4] [-6] target\n\
+\n\
+Options:\n\
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Number of echo requests to send.\n\
+    -l size     Send buffer size.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout in milliseconds to wait for each reply.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\n正在呼叫 %1 [%2] ,数据包大小 %3!d! 字节:\n\n\0"
-    IDS_PING_STATISTICS "\n%1 的呼叫统计:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    数据包:发送个数 = %1!d!,接收个数 = %2!d!,丢失个数 = %3!d! (丢失率 %4!d!%%),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "近似来回所需时间(毫秒):\n\0"
-    IDS_MIN_MAX_AVERAGE "    最小值 = %1, 最大值 = %2, 平均值 = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "空闲资源不足。\n\0"
-    IDS_UNKNOWN_HOST "未知主机 %1。\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt 失败 (%1!d!)。\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "不能创建套接字 (#%1!d!)。\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "不能初始化 winsock dll。\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "目标主机的名称或 IP 地址必须被指定。\n\0"
-    IDS_BAD_PARAMETER "错误参数 %1。\n\0"
-    IDS_BAD_OPTION_FORMAT "错误选项格式 %1。\n\0"
-    IDS_BAD_OPTION "错误选项 %1。\n\0"
-    IDS_BAD_VALUE_OPTION_L "-l 选项的值无效,有效的范围是从 0 到 %1!d!。\n\0"
-    IDS_BAD_VALUE_OPTION_N "-n 选项的值无效,有效的范围是从 1 到 %1!u!。\n\0"
-    IDS_REPLY_FROM "来自 %1 的回复:字节数=%2!d! 时间%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "目标主机不可到达。\n\0"
-    IDS_COULD_NOT_TRANSMIT "无法发送数据 (%1!d!)。\n\0"
-    IDS_COULD_NOT_RECV "无法接收数据 (%1!d!)。\n\0"
-    IDS_REQUEST_TIMEOUT "请求超时。\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Not enough resources available.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistics for %1!s!:\n\
+    Packets: Sent = %2!d!, Received = %3!d!, Lost %4!d! (%5!u!%% loss),\n"
+
+    IDS_APPROXIMATE_RTT "Approximate round-trip time in milliseconds:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Average = %3!u!ms\n"
 END
index 18421ad..2da6927 100644 (file)
@@ -1,38 +1,64 @@
-/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
+/*
+ * FILE:        base/applications/network/ping/lang/zh-TW.rc
+ * PURPOSE:     Chinese (Traditional) translations for ReactOS Ping Command
+ * TRANSLATORS:
+ */
 
 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
 
 STRINGTABLE
 BEGIN
-    IDS_USAGE "用法:ping [-t] [-n 次數] [-l 大小] [-w 超時] 目標主機\n\n\
-選項:\n\
-    -t             不停呼叫指定的主機直到被終止。\n\
-                   要停止 - 按下 Ctrl-C。\n\
-    -n 次數         發送迴響包的次數。\n\
-    -l 大小         發送包的大小。\n\
-    -w 超時         等待每個回覆的時間(毫秒)。\n\n\0"
+    IDS_USAGE "\n\
+Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]\n\
+            [-w timeout] [-4] [-6] target\n\
+\n\
+Options:\n\
+    -t          Ping the specified host until stopped.\n\
+                To see statistics and continue - type Control-Break;\n\
+                To stop - type Control-C.\n\
+    -a          Resolve addresses to hostnames.\n\
+    -n count    Number of echo requests to send.\n\
+    -l size     Send buffer size.\n\
+    -f          Set Don't Fragment flag in packet (IPv4-only).\n\
+    -i TTL      Time To Live.\n\
+    -v TOS      Type Of Service (IPv4-only. This setting has been deprecated\n\
+                and has no effect on the type of service field in the IP\n\
+                Header).\n\
+    -w timeout  Timeout in milliseconds to wait for each reply.\n\
+    -4          Force using IPv4.\n\
+    -6          Force using IPv6.\n\
+\n"
 
-    IDS_PING_WITH_BYTES "\n正在呼叫 %1 [%2] ,資料包大小 %3!d! 位元組:\n\n\0"
-    IDS_PING_STATISTICS "\n%1 的呼叫統計:\n\0"
-    IDS_PACKETS_SENT_RECEIVED_LOST "    資料包:發送個數 = %1!d!,接收個數 = %2!d!,丟失個數 = %3!d! (丟失率 %4!d!%%),\n\0"
-    IDS_APPROXIMATE_ROUND_TRIP "近似來回所需時間(毫秒):\n\0"
-    IDS_MIN_MAX_AVERAGE "    最小值 = %1, 最大值 = %2, 平均值 = %3\n\0"
-    IDS_NOT_ENOUGH_RESOURCES "空閒資源不足。\n\0"
-    IDS_UNKNOWN_HOST "未知主機 %1。\n\0"
-    IDS_SETSOCKOPT_FAILED "setsockopt 失敗 (%1!d!)。\n\0"
-    IDS_COULD_NOT_CREATE_SOCKET "不能創建套接字 (#%1!d!)。\n\0"
-    IDS_COULD_NOT_INIT_WINSOCK "不能初始化 winsock dll。\n\0"
-    IDS_DEST_MUST_BE_SPECIFIED "目標主機的名稱或 IP 地址必須被指定。\n\0"
-    IDS_BAD_PARAMETER "錯誤參數 %1。\n\0"
-    IDS_BAD_OPTION_FORMAT "錯誤選項格式 %1。\n\0"
-    IDS_BAD_OPTION "錯誤選項 %1。\n\0"
-    IDS_BAD_VALUE_OPTION_L "-l 選項的值無效,有效的範圍是從 0 到 %1!d!。\n\0"
-    IDS_BAD_VALUE_OPTION_N "-n 選項的值無效,有效的範圍是從 1 到 %1!u!。\n\0"
-    IDS_REPLY_FROM "來自 %1 的回覆:位元組數=%2!d! 時間%3%4 TTL=%5!d!\n\0"
-    IDS_DEST_UNREACHABLE "目標主機不可到達。\n\0"
-    IDS_COULD_NOT_TRANSMIT "無法發送資料 (%1!d!)。\n\0"
-    IDS_COULD_NOT_RECV "無法接收資料 (%1!d!)。\n\0"
-    IDS_REQUEST_TIMEOUT "請求超時。\n\0"
-    IDS_MS "ms\0"
-    IDS_1MS "1ms\0"
+    IDS_CTRL_BREAK "Control-Break\n"
+    IDS_CTRL_C "Control-C\n"
+    IDS_NO_RESOURCES "Not enough resources available.\n"
+    IDS_MISSING_ADDRESS "IP address must be specified.\n"
+    IDS_MISSING_VALUE "Value must be supplied for option %1.\n"
+    IDS_BAD_OPTION "Bad option %1.\n"
+    IDS_BAD_PARAMETER "Bad parameter %1.\n"
+    IDS_BAD_VALUE "Bad value for option %1, valid range is from %2!d! to %3!u!.\n"
+    IDS_WRONG_FAMILY "The option %1 is only supported for %2.\n"
+    IDS_UNKNOWN_HOST "Ping could not find host %1. Please check the name and try again.\n"
+    IDS_PINGING_ADDRESS "\nPinging %1 %0"
+    IDS_PINGING_HOSTNAME "\nPinging %1 [%2] %0"
+    IDS_SOURCE_ADDRESS "from %1!s! %0"
+    IDS_PING_SIZE "with %1!d! bytes of data:\n\n"
+    IDS_REPLY_FROM "Reply from %1: %0"
+    IDS_REPLY_BYTES "bytes=%1!d! %0"
+    IDS_REPLY_TIME_MS "time=%1!d!ms %0"
+    IDS_REPLY_TIME_0MS "time<1ms %0"
+    IDS_REPLY_TTL "TTL=%1!d!\n"
+    IDS_REPLY_STATUS "Echo reply returned %1.\n"
+    IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
+    IDS_DEST_NET_UNREACHABLE "Destination net unreachable.\n"
+    IDS_REQUEST_TIMED_OUT "Request timed out.\n"
+    IDS_TTL_EXPIRED "TTL expired in transit.\n"
+    IDS_TRANSMIT_FAILED "PING: transmit failed. (Error %1!u!)\n"
+
+    IDS_STATISTICS "\n\
+Ping statistics for %1!s!:\n\
+    Packets: Sent = %2!d!, Received = %3!d!, Lost %4!d! (%5!u!%% loss),\n"
+
+    IDS_APPROXIMATE_RTT "Approximate round-trip time in milliseconds:\n\
+    Minimum = %1!u!ms, Maximum = %2!u!ms, Average = %3!u!ms\n"
 END
index e510b4a..bea3900 100644 (file)
 /*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS ping utility
+ * Copyright (c) 2015 Tim Crawford
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * PROJECT:     ReactOS Ping Command
+ * LICENSE:     MIT
  * FILE:        base/applications/network/ping/ping.c
  * PURPOSE:     Network test utility
- * PROGRAMMERS:
+ * PROGRAMMERS: Tim Crawford <crawfxrd@gmail.com>
  */
 
-#define WIN32_NO_STATUS
-#include <stdarg.h>
-#include <windef.h>
-#include <winbase.h>
-#include <winuser.h>
-#include <winnls.h>
-#include <wincon.h>
-#define _INC_WINDOWS
-#include <ws2tcpip.h>
+#define WIN32_LEAN_AND_MEAN
+
 #include <stdio.h>
 #include <stdlib.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <iphlpapi.h>
+#include <icmpapi.h>
 
 #include "resource.h"
 
 #define NDEBUG
-
-/* General ICMP constants */
-#define ICMP_MINSIZE        8     /* Minimum ICMP packet size */
-#define ICMP_MAXSIZE        65535 /* Maximum ICMP packet size */
-
-/* ICMP message types */
-#define ICMPMSG_ECHOREQUEST 8     /* ICMP ECHO request message */
-#define ICMPMSG_ECHOREPLY   0     /* ICMP ECHO reply message */
-
-#pragma pack(4)
-
-/* IPv4 header structure */
-typedef struct _IPv4_HEADER
-{
-    unsigned char IHL:4;
-    unsigned char Version:4;
-    unsigned char TOS;
-    unsigned short Length;
-    unsigned short Id;
-    unsigned short FragFlags;
-    unsigned char TTL;
-    unsigned char Protocol;
-    unsigned short Checksum;
-    unsigned int SrcAddress;
-    unsigned int DstAddress;
-} IPv4_HEADER, *PIPv4_HEADER;
-
-/* ICMP echo request/reply header structure */
-typedef struct _ICMP_HEADER
-{
-    unsigned char Type;
-    unsigned char Code;
-    unsigned short Checksum;
-    unsigned short Id;
-    unsigned short SeqNum;
-} ICMP_HEADER, *PICMP_HEADER;
-
-typedef struct _ICMP_ECHO_PACKET
+#include <debug.h>
+
+#define SIZEOF_ICMP_ERROR 8
+#define SIZEOF_IO_STATUS_BLOCK 8
+#define DEFAULT_TIMEOUT 1000
+#define MAX_SEND_SIZE 65500
+
+static BOOL ParseCmdLine(int argc, PWSTR argv[]);
+static BOOL ResolveTarget(PCWSTR target);
+static void Usage(void);
+static void Ping(void);
+static void PrintStats(void);
+static BOOL WINAPI ConsoleCtrlHandler(DWORD ControlType);
+static void PrintString(UINT id, ...);
+
+static HANDLE hIcmpFile = INVALID_HANDLE_VALUE;
+static ULONG Timeout = 4000;
+static int Family = AF_UNSPEC;
+static ULONG RequestSize = 32;
+static ULONG PingCount = 4;
+static BOOL PingForever = FALSE;
+static PADDRINFOW Target = NULL;
+static PCWSTR TargetName = NULL;
+static WCHAR Address[46];
+static WCHAR CanonName[NI_MAXHOST];
+static BOOL ResolveAddress = FALSE;
+
+static ULONG RTTMax = 0;
+static ULONG RTTMin = 0;
+static ULONG RTTTotal = 0;
+static ULONG EchosSent = 0;
+static ULONG EchosReceived = 0;
+static ULONG EchosSuccessful = 0;
+
+static IP_OPTION_INFORMATION IpOptions;
+
+int
+wmain(int argc, WCHAR *argv[])
 {
-    ICMP_HEADER Icmp;
-} ICMP_ECHO_PACKET, *PICMP_ECHO_PACKET;
-
-#pragma pack(1)
-
-BOOL                NeverStop;
-BOOL                ResolveAddresses;
-UINT                PingCount;
-UINT                DataSize;   /* ICMP echo request data size */
-BOOL                DontFragment;
-ULONG               TTLValue;
-ULONG               TOSValue;
-ULONG               Timeout;
-WCHAR               TargetName[256];
-SOCKET              IcmpSock;
-SOCKADDR_IN         Target;
-WCHAR               TargetIP[16];
-FD_SET              Fds;
-TIMEVAL             Timeval;
-UINT                CurrentSeqNum;
-UINT                SentCount;
-UINT                LostCount;
-BOOL                MinRTTSet;
-LARGE_INTEGER       MinRTT;     /* Minimum round trip time in microseconds */
-LARGE_INTEGER       MaxRTT;
-LARGE_INTEGER       SumRTT;
-LARGE_INTEGER       AvgRTT;
-LARGE_INTEGER       TicksPerMs; /* Ticks per millisecond */
-LARGE_INTEGER       TicksPerUs; /* Ticks per microsecond */
-LARGE_INTEGER       SentTime;
-BOOL                UsePerformanceCounter;
-HANDLE              hStdOutput;
-
-#ifndef NDEBUG
-/* Display the contents of a buffer */
-static VOID DisplayBuffer(
-    PVOID Buffer,
-    DWORD Size)
-{
-    UINT i;
-    PCHAR p;
+    WSADATA wsaData;
+    ULONG i;
+    DWORD StrLen = 46;
 
-    printf("Buffer (0x%p)  Size (0x%lX).\n", Buffer, Size);
+    IpOptions.Ttl = 128;
 
-    p = (PCHAR)Buffer;
-    for (i = 0; i < Size; i++)
+    if (!ParseCmdLine(argc, argv))
     {
-        if (i % 16 == 0)
-            printf("\n");
-        printf("%02X ", (p[i]) & 0xFF);
+        return 1;
     }
-}
-#endif /* !NDEBUG */
 
-void FormatOutput(UINT uID, ...)
-{
-    va_list valist;
+    if (!SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE))
+    {
+        DPRINT1("Failed to set control handler: %lu\n", GetLastError());
 
-    WCHAR Buf[1024];
-    CHAR AnsiBuf[1024];
-    LPWSTR pBuf = Buf;
-    PCHAR pAnsiBuf = AnsiBuf;
-    WCHAR Format[1024];
-    DWORD written;
-    UINT DataLength;
-    int AnsiLength;
+        return 1;
+    }
 
-    if (!LoadString(GetModuleHandle(NULL), uID,
-                    Format, sizeof(Format) / sizeof(WCHAR)))
+    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
     {
-        return;
+        DPRINT1("WSAStartup failed\n");
+
+        return 1;
     }
 
-    va_start(valist, uID);
+    if (!ResolveTarget(TargetName))
+    {
+        WSACleanup();
 
-    DataLength = FormatMessage(FORMAT_MESSAGE_FROM_STRING, Format, 0, 0, Buf,\
-                  sizeof(Buf) / sizeof(WCHAR), &valist);
+        return 1;
+    }
 
-    if(!DataLength)
+    if (WSAAddressToStringW(Target->ai_addr, (DWORD)Target->ai_addrlen, NULL, Address, &StrLen) != 0)
     {
-        if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-        {
-            va_end(valist);
-            return;
-        }
+        DPRINT1("WSAAddressToStringW failed: %d\n", WSAGetLastError());
+        FreeAddrInfoW(Target);
+        WSACleanup();
 
-        DataLength = FormatMessage(FORMAT_MESSAGE_FROM_STRING |\
-                                    FORMAT_MESSAGE_ALLOCATE_BUFFER,\
-                                    Format, 0, 0, (LPWSTR)&pBuf, 0, &valist);
+        return 1;
     }
 
-    if(!DataLength)
+    if (Family == AF_INET6)
     {
-        va_end(valist);
-        return;
+        hIcmpFile = Icmp6CreateFile();
+    }
+    else
+    {
+        hIcmpFile = IcmpCreateFile();
+    }
+
+
+    if (hIcmpFile == INVALID_HANDLE_VALUE)
+    {
+        DPRINT1("IcmpCreateFile failed: %lu\n", GetLastError());
+        FreeAddrInfoW(Target);
+        WSACleanup();
+
+        return 1;
     }
 
-    if(GetFileType(hStdOutput) == FILE_TYPE_CHAR)
+    if (*CanonName)
     {
-        /* Is a console or a printer */
-        WriteConsole(hStdOutput, pBuf, DataLength, &written, NULL);
+        PrintString(IDS_PINGING_HOSTNAME, CanonName, Address);
     }
     else
     {
-        /* Is a pipe, socket, file or other */
-        AnsiLength = WideCharToMultiByte(CP_ACP, 0, pBuf, DataLength,\
-                                         NULL, 0, NULL, NULL);
+        PrintString(IDS_PINGING_ADDRESS, Address);
+    }
 
-        if(AnsiLength >= sizeof(AnsiBuf))
-            pAnsiBuf = (PCHAR)HeapAlloc(GetProcessHeap(), 0, AnsiLength);
+    PrintString(IDS_PING_SIZE, RequestSize);
 
-        AnsiLength = WideCharToMultiByte(CP_OEMCP, 0, pBuf, DataLength,\
-                                         pAnsiBuf, AnsiLength, " ", NULL);
+    Ping();
+    i = 1;
 
-        WriteFile(hStdOutput, pAnsiBuf, AnsiLength, &written, NULL);
+    while (i < PingCount)
+    {
+        Sleep(1000);
+        Ping();
 
-        if(pAnsiBuf != AnsiBuf)
-            HeapFree(NULL, 0, pAnsiBuf);
+        if (!PingForever)
+            i++;
     }
 
-    if(pBuf != Buf)
-        LocalFree(pBuf);
-}
+    PrintStats();
 
-/* Display usage information on screen */
-static VOID Usage(VOID)
-{
-    FormatOutput(IDS_USAGE);
+    IcmpCloseHandle(hIcmpFile);
+    FreeAddrInfoW(Target);
+    WSACleanup();
+
+    return 0;
 }
 
-/* Reset configuration to default values */
-static VOID Reset(VOID)
+static
+void
+PrintString(UINT id, ...)
 {
-    LARGE_INTEGER PerformanceCounterFrequency;
-
-    NeverStop             = FALSE;
-    ResolveAddresses      = FALSE;
-    PingCount             = 4;
-    DataSize              = 32;
-    DontFragment          = FALSE;
-    TTLValue              = 128;
-    TOSValue              = 0;
-    Timeout               = 1000;
-    UsePerformanceCounter = QueryPerformanceFrequency(&PerformanceCounterFrequency);
-
-    if (UsePerformanceCounter)
+    WCHAR Format[1024];
+    WCHAR Msg[1024];
+    DWORD Len;
+    va_list args;
+
+    if (!LoadStringW(GetModuleHandleW(NULL), id, Format, _countof(Format)))
     {
-        /* Performance counters may return incorrect results on some multiprocessor
-           platforms so we restrict execution on the first processor. This may fail
-           on Windows NT so we fall back to GetCurrentTick() for timing */
-        if (SetThreadAffinityMask (GetCurrentThread(), 1) == 0)
-            UsePerformanceCounter = FALSE;
-
-        /* Convert frequency to ticks per millisecond */
-        TicksPerMs.QuadPart = PerformanceCounterFrequency.QuadPart / 1000;
-        /* And to ticks per microsecond */
-        TicksPerUs.QuadPart = PerformanceCounterFrequency.QuadPart / 1000000;
+        DPRINT1("LoadStringW failed: %lu\n", GetLastError());
+
+        return;
     }
-    if (!UsePerformanceCounter)
+
+    va_start(args, id);
+
+    Len = FormatMessageW(
+        FORMAT_MESSAGE_FROM_STRING,
+        Format, 0, 0,
+        Msg, 1024, &args);
+
+    if (Len == 0)
     {
-        /* 1 tick per millisecond for GetCurrentTick() */
-        TicksPerMs.QuadPart = 1;
-        /* GetCurrentTick() cannot handle microseconds */
-        TicksPerUs.QuadPart = 1;
+        DPRINT1("FormatMessageW failed: %lu\n", GetLastError());
+
+        va_end(args);
+        return;
     }
+
+    wprintf(L"%s", Msg);
+
+    va_end(args);
 }
 
-/* Parse command line parameters */
-static BOOL ParseCmdline(int argc, LPWSTR argv[])
+static
+void
+Usage(void)
 {
-    INT i;
-    BOOL FoundTarget = FALSE, InvalidOption = FALSE;
+    PrintString(IDS_USAGE);
+}
+
+static
+BOOL
+ParseCmdLine(int argc, PWSTR argv[])
+{
+    int i;
 
     if (argc < 2)
     {
         Usage();
+
         return FALSE;
     }
 
@@ -245,525 +233,480 @@ static BOOL ParseCmdline(int argc, LPWSTR argv[])
         {
             switch (argv[i][1])
             {
-                case L't': NeverStop = TRUE; break;
-                case L'a': ResolveAddresses = TRUE; break;
-                case L'n':
-                    if (i + 1 < argc)
+            case L't':
+                PingForever = TRUE;
+                break;
+
+            case L'a':
+                ResolveAddress = TRUE;
+                break;
+
+            case L'n':
+                if (i + 1 < argc)
+                {
+                    PingForever = FALSE;
+                    PingCount = wcstoul(argv[++i], NULL, 0);
+
+                    if (PingCount == 0)
                     {
-                        PingCount = wcstoul(argv[++i], NULL, 0);
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 1, UINT_MAX);
 
-                        if (PingCount == 0)
-                        {
-                            FormatOutput(IDS_BAD_VALUE_OPTION_N, UINT_MAX);
-                            return FALSE;
-                        }
+                        return FALSE;
                     }
-                    else
-                        InvalidOption = TRUE;
-                    break;
-                case L'l':
-                    if (i + 1 < argc)
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
+                    return FALSE;
+                }
+
+                break;
+
+            case L'l':
+                if (i + 1 < argc)
+                {
+                    RequestSize = wcstoul(argv[++i], NULL, 0);
+
+                    if (RequestSize > MAX_SEND_SIZE)
                     {
-                        DataSize = wcstoul(argv[++i], NULL, 0);
-
-                        if (DataSize > ICMP_MAXSIZE - sizeof(ICMP_ECHO_PACKET) - sizeof(IPv4_HEADER))
-                        {
-                            FormatOutput(IDS_BAD_VALUE_OPTION_L, ICMP_MAXSIZE - \
-                                         (int)sizeof(ICMP_ECHO_PACKET) - \
-                                         (int)sizeof(IPv4_HEADER));
-                            return FALSE;
-                        }
-                    } else
-                        InvalidOption = TRUE;
-                    break;
-                case L'f': DontFragment = TRUE; break;
-                case L'i':
-                    if (i + 1 < argc)
-                        TTLValue = wcstoul(argv[++i], NULL, 0);
-                    else
-                        InvalidOption = TRUE;
-                    break;
-                case L'v':
-                    if (i + 1 < argc)
-                        TOSValue = wcstoul(argv[++i], NULL, 0);
-                    else
-                        InvalidOption = TRUE;
-                    break;
-                case L'w':
-                    if (i + 1 < argc)
-                        Timeout = wcstoul(argv[++i], NULL, 0);
-                    else
-                        InvalidOption = TRUE;
-                    break;
-                case '?':
-                    Usage();
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 0, MAX_SEND_SIZE);
+
+                        return FALSE;
+                    }
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
                     return FALSE;
-                default:
-                    FormatOutput(IDS_BAD_OPTION, argv[i]);
+                }
+
+                break;
+
+            case L'f':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
+
                     return FALSE;
-            }
-            if (InvalidOption)
-            {
-                FormatOutput(IDS_BAD_OPTION_FORMAT, argv[i]);
-                return FALSE;
-            }
-        }
-        else
-        {
-            if (FoundTarget)
-            {
-                FormatOutput(IDS_BAD_PARAMETER, argv[i]);
-                return FALSE;
-            }
-            else
-            {
-                wcscpy(TargetName, argv[i]);
-                FoundTarget = TRUE;
-            }
-        }
-    }
+                }
 
-    if (!FoundTarget)
-    {
-        FormatOutput(IDS_DEST_MUST_BE_SPECIFIED);
-        return FALSE;
-    }
+                Family = AF_INET;
+                IpOptions.Flags |= IP_FLAG_DF;
+                break;
 
-    return TRUE;
-}
+            case L'i':
+                if (i + 1 < argc)
+                {
+                    ULONG Ttl = wcstoul(argv[++i], NULL, 0);
 
-/* Calculate checksum of data */
-static WORD Checksum(PUSHORT data, UINT size)
-{
-    ULONG sum = 0;
+                    if ((Ttl == 0) || (Ttl > UCHAR_MAX))
+                    {
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 1, UCHAR_MAX);
 
-    while (size > 1)
-    {
-        sum  += *data++;
-        size -= sizeof(USHORT);
-    }
+                        return FALSE;
+                    }
 
-    if (size)
-        sum += *(UCHAR*)data;
+                    IpOptions.Ttl = (UCHAR)Ttl;
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
 
-    sum = (sum >> 16) + (sum & 0xFFFF);
-    sum += (sum >> 16);
+                    return FALSE;
+                }
 
-    return (USHORT)(~sum);
-}
+                break;
 
-static BOOL WINAPI StopLoop(DWORD dwCtrlType)
-{
-    NeverStop = FALSE;
-    PingCount = 0;
+            case L'v':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
 
-    return TRUE;
-}
+                    return FALSE;
+                }
 
-/* Prepare to ping target */
-static BOOL Setup(VOID)
-{
-    WORD     wVersionRequested;
-    WSADATA  WsaData;
-    INT      Status;
-    ULONG    Addr;
-    PHOSTENT phe;
-    CHAR     aTargetName[256];
+                Family = AF_INET;
 
-    wVersionRequested = MAKEWORD(2, 2);
+                if (i + 1 < argc)
+                {
+                    /* This option has been deprecated. Don't do anything. */
+                    i++;
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
 
-    Status = WSAStartup(wVersionRequested, &WsaData);
-    if (Status != 0)
-    {
-        FormatOutput(IDS_COULD_NOT_INIT_WINSOCK);
-        return FALSE;
-    }
+                    return FALSE;
+                }
 
-    IcmpSock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, 0);
-    if (IcmpSock == INVALID_SOCKET)
-    {
-        FormatOutput(IDS_COULD_NOT_CREATE_SOCKET, WSAGetLastError());
-        return FALSE;
-    }
+                break;
 
-    if (setsockopt(IcmpSock,
-                   IPPROTO_IP,
-                   IP_DONTFRAGMENT,
-                   (const char *)&DontFragment,
-                   sizeof(DontFragment)) == SOCKET_ERROR)
-    {
-        FormatOutput(IDS_SETSOCKOPT_FAILED, WSAGetLastError());
-        return FALSE;
-    }
+            case L'w':
+                if (i + 1 < argc)
+                {
+                    Timeout = wcstoul(argv[++i], NULL, 0);
 
-    if (setsockopt(IcmpSock,
-                   IPPROTO_IP,
-                   IP_TTL,
-                   (const char *)&TTLValue,
-                   sizeof(TTLValue)) == SOCKET_ERROR)
-    {
-        FormatOutput(IDS_SETSOCKOPT_FAILED, WSAGetLastError());
-        return FALSE;
-    }
+                    if (Timeout < DEFAULT_TIMEOUT)
+                    {
+                        Timeout = DEFAULT_TIMEOUT;
+                    }
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
 
+                    return FALSE;
+                }
 
-    if(!WideCharToMultiByte(CP_ACP, 0, TargetName, -1, aTargetName,\
-                            sizeof(aTargetName), NULL, NULL))
-    {
-        FormatOutput(IDS_UNKNOWN_HOST, TargetName);
-        return FALSE;
-    }
+                break;
 
-    ZeroMemory(&Target, sizeof(Target));
-    phe = NULL;
-    Addr = inet_addr(aTargetName);
-    if (Addr == INADDR_NONE)
-    {
-        phe = gethostbyname(aTargetName);
-        if (phe == NULL)
-        {
-            FormatOutput(IDS_UNKNOWN_HOST, TargetName);
-            return FALSE;
-        }
+            case L'R':
+                if (Family == AF_INET)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv6");
 
-        CopyMemory(&Target.sin_addr, phe->h_addr, phe->h_length);
-        Target.sin_family = phe->h_addrtype;
-    }
-    else
-    {
-        Target.sin_addr.s_addr = Addr;
-        Target.sin_family = AF_INET;
-    }
+                    return FALSE;
+                }
 
+                Family = AF_INET6;
 
-    swprintf(TargetIP, L"%d.%d.%d.%d", Target.sin_addr.S_un.S_un_b.s_b1,\
-                                       Target.sin_addr.S_un.S_un_b.s_b2,\
-                                       Target.sin_addr.S_un.S_un_b.s_b3,\
-                                       Target.sin_addr.S_un.S_un_b.s_b4);
-    CurrentSeqNum = 1;
-    SentCount = 0;
-    LostCount = 0;
-    MinRTT.QuadPart = 0;
-    MaxRTT.QuadPart = 0;
-    SumRTT.QuadPart = 0;
-    MinRTTSet       = FALSE;
+                /* This option has been deprecated. Don't do anything. */
+                break;
 
-    SetConsoleCtrlHandler(StopLoop, TRUE);
+            case L'4':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
 
-    return TRUE;
-}
+                    return FALSE;
+                }
 
-/* Close socket */
-static VOID Cleanup(VOID)
-{
-    if (IcmpSock != INVALID_SOCKET)
-        closesocket(IcmpSock);
+                Family = AF_INET;
+                break;
 
-    WSACleanup();
-}
+            case L'6':
+                if (Family == AF_INET)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv6");
 
-static VOID QueryTime(PLARGE_INTEGER Time)
-{
-    if (UsePerformanceCounter)
-    {
-        if (QueryPerformanceCounter(Time) == 0)
+                    return FALSE;
+                }
+
+                Family = AF_INET6;
+                break;
+
+            case L'?':
+                Usage();
+
+                return FALSE;
+
+            default:
+                PrintString(IDS_BAD_OPTION, argv[i]);
+                Usage();
+
+                return FALSE;
+            }
+        }
+        else
         {
-            /* This should not happen, but we fall
-               back to GetCurrentTick() if it does */
-            Time->u.LowPart  = (ULONG)GetTickCount();
-            Time->u.HighPart = 0;
+            if (TargetName != NULL)
+            {
+                PrintString(IDS_BAD_PARAMETER, argv[i]);
 
-            /* 1 tick per millisecond for GetCurrentTick() */
-            TicksPerMs.QuadPart = 1;
-            /* GetCurrentTick() cannot handle microseconds */
-            TicksPerUs.QuadPart = 1;
+                return FALSE;
+            }
 
-            UsePerformanceCounter = FALSE;
+            TargetName = argv[i];
         }
     }
-    else
+
+    if (TargetName == NULL)
     {
-        Time->u.LowPart  = (ULONG)GetTickCount();
-        Time->u.HighPart = 0;
+        PrintString(IDS_MISSING_ADDRESS);
+
+        return FALSE;
     }
+
+    return TRUE;
 }
 
-static VOID TimeToMsString(LPWSTR String, ULONG Length, LARGE_INTEGER Time)
+static
+BOOL
+ResolveTarget(PCWSTR target)
 {
-    WCHAR         Convstr[40];
-    LARGE_INTEGER LargeTime;
-    LPWSTR ms;
+    ADDRINFOW hints;
+    int Status;
 
-    LargeTime.QuadPart = Time.QuadPart / TicksPerMs.QuadPart;
+    ZeroMemory(&hints, sizeof(hints));
+    hints.ai_family = Family;
+    hints.ai_flags = AI_NUMERICHOST;
 
-    _i64tow(LargeTime.QuadPart, Convstr, 10);
-    wcscpy(String, Convstr);
-    ms = String + wcslen(String);
-    LoadString(GetModuleHandle(NULL), IDS_MS, ms, Length - (ms - String));
-}
-
-/* Locate the ICMP data and print it. Returns TRUE if the packet was good,
-   FALSE if not */
-static BOOL DecodeResponse(PCHAR buffer, UINT size, PSOCKADDR_IN from)
-{
-    PIPv4_HEADER      IpHeader;
-    PICMP_ECHO_PACKET Icmp;
-    UINT              IphLength;
-    WCHAR             Time[100];
-    LARGE_INTEGER     RelativeTime;
-    LARGE_INTEGER     LargeTime;
-    WCHAR             Sign[2];
-    WCHAR wfromIP[16];
+    Status = GetAddrInfoW(target, NULL, &hints, &Target);
+    if (Status != 0)
+    {
+        hints.ai_flags = AI_CANONNAME;
 
-    IpHeader = (PIPv4_HEADER)buffer;
+        Status = GetAddrInfoW(target, NULL, &hints, &Target);
+        if (Status != 0)
+        {
+            PrintString(IDS_UNKNOWN_HOST, target);
 
-    IphLength = IpHeader->IHL * 4;
+            return FALSE;
+        }
 
-    if (size  < IphLength + ICMP_MINSIZE)
-    {
-#ifndef NDEBUG
-        printf("Bad size (0x%X < 0x%X)\n", size, IphLength + ICMP_MINSIZE);
-#endif /* !NDEBUG */
-        return FALSE;
+        wcsncpy(CanonName, Target->ai_canonname, wcslen(Target->ai_canonname));
     }
+    else if (ResolveAddress)
+    {
+        Status = GetNameInfoW(
+            Target->ai_addr, Target->ai_addrlen,
+            CanonName, _countof(CanonName),
+            NULL, 0,
+            NI_NAMEREQD);
 
-    Icmp = (PICMP_ECHO_PACKET)(buffer + IphLength);
+        if (Status != 0)
+        {
+            DPRINT1("GetNameInfoW failed: %d\n", Status);
 
-    if (Icmp->Icmp.Type != ICMPMSG_ECHOREPLY)
-    {
-#ifndef NDEBUG
-        printf("Bad ICMP type (0x%X should be 0x%X)\n", Icmp->Icmp.Type, ICMPMSG_ECHOREPLY);
-#endif /* !NDEBUG */
-        return FALSE;
+            return FALSE;
+        }
     }
 
-    if (Icmp->Icmp.Id != (USHORT)GetCurrentProcessId())
-    {
-#ifndef NDEBUG
-        printf("Bad ICMP id (0x%X should be 0x%X)\n", Icmp->Icmp.Id, (USHORT)GetCurrentProcessId());
-#endif /* !NDEBUG */
-        return FALSE;
-    }
+    Family = Target->ai_family;
 
-    if (from->sin_addr.s_addr != Target.sin_addr.s_addr)
+    return TRUE;
+}
+
+static
+void
+Ping(void)
+{
+    PVOID ReplyBuffer = NULL;
+    PVOID SendBuffer = NULL;
+    DWORD ReplySize = 0;
+    DWORD Status;
+
+    SendBuffer = malloc(RequestSize);
+    if (SendBuffer == NULL)
     {
-#ifndef NDEBUG
-        printf("Bad source address (%s should be %s)\n", inet_ntoa(from->sin_addr), inet_ntoa(Target.sin_addr));
-#endif /* !NDEBUG */
-        return FALSE;
-    }
+        PrintString(IDS_NO_RESOURCES);
 
-    QueryTime(&LargeTime);
+        exit(1);
+    }
 
-    RelativeTime.QuadPart = (LargeTime.QuadPart - SentTime.QuadPart);
+    ZeroMemory(SendBuffer, RequestSize);
 
-    if ((RelativeTime.QuadPart / TicksPerMs.QuadPart) < 1)
+    if (Family == AF_INET6)
     {
-        wcscpy(Sign, L"<");
-        LoadString(GetModuleHandle(NULL), IDS_1MS, Time, sizeof(Time) / sizeof(WCHAR));
+        ReplySize += sizeof(ICMPV6_ECHO_REPLY);
     }
     else
     {
-        wcscpy(Sign, L"=");
-        TimeToMsString(Time, sizeof(Time) / sizeof(WCHAR), RelativeTime);
+        ReplySize += sizeof(ICMP_ECHO_REPLY);
     }
 
+    ReplySize += RequestSize + SIZEOF_ICMP_ERROR + SIZEOF_IO_STATUS_BLOCK;
 
-    swprintf(wfromIP, L"%d.%d.%d.%d", from->sin_addr.S_un.S_un_b.s_b1,\
-                                      from->sin_addr.S_un.S_un_b.s_b2,\
-                                      from->sin_addr.S_un.S_un_b.s_b3,\
-                                      from->sin_addr.S_un.S_un_b.s_b4);
-    FormatOutput(IDS_REPLY_FROM, wfromIP,\
-                 size - IphLength - (int)sizeof(ICMP_ECHO_PACKET),\
-                 Sign, Time, IpHeader->TTL);
-
-    if (RelativeTime.QuadPart < MinRTT.QuadPart || !MinRTTSet)
+    ReplyBuffer = malloc(ReplySize);
+    if (ReplyBuffer == NULL)
     {
-        MinRTT.QuadPart = RelativeTime.QuadPart;
-        MinRTTSet = TRUE;
+        PrintString(IDS_NO_RESOURCES);
+        free(SendBuffer);
+
+        exit(1);
     }
-    if (RelativeTime.QuadPart > MaxRTT.QuadPart)
-        MaxRTT.QuadPart = RelativeTime.QuadPart;
 
-    SumRTT.QuadPart += RelativeTime.QuadPart;
+    ZeroMemory(ReplyBuffer, ReplySize);
 
-    return TRUE;
-}
+    EchosSent++;
 
-/* Send and receive one ping */
-static BOOL Ping(VOID)
-{
-    INT                 Status;
-    SOCKADDR            From;
-    INT                 Length;
-    PVOID               Buffer;
-    UINT                Size;
-    PICMP_ECHO_PACKET   Packet;
-
-    /* Account for extra space for IP header when packet is received */
-    Size   = DataSize + 128;
-    Buffer = GlobalAlloc(0, Size);
-    if (!Buffer)
+    if (Family == AF_INET6)
     {
-        FormatOutput(IDS_NOT_ENOUGH_RESOURCES);
-        return FALSE;
-    }
-
-    ZeroMemory(Buffer, Size);
-    Packet = (PICMP_ECHO_PACKET)Buffer;
+        struct sockaddr_in6 Source;
 
-    /* Assemble ICMP echo request packet */
-    Packet->Icmp.Type     = ICMPMSG_ECHOREQUEST;
-    Packet->Icmp.Code     = 0;
-    Packet->Icmp.Id       = (USHORT)GetCurrentProcessId();
-    Packet->Icmp.SeqNum   = htons((USHORT)CurrentSeqNum);
-    Packet->Icmp.Checksum = 0;
+        ZeroMemory(&Source, sizeof(Source));
+        Source.sin6_family = AF_INET6;
 
-    /* Calculate checksum for ICMP header and data area */
-    Packet->Icmp.Checksum = Checksum((PUSHORT)&Packet->Icmp, sizeof(ICMP_ECHO_PACKET) + DataSize);
-
-    CurrentSeqNum++;
+        Status = Icmp6SendEcho2(
+            hIcmpFile, NULL, NULL, NULL,
+            &Source,
+            (struct sockaddr_in6 *)Target->ai_addr,
+            SendBuffer, (USHORT)RequestSize, &IpOptions,
+            ReplyBuffer, ReplySize, Timeout);
+    }
+    else
+    {
+        Status = IcmpSendEcho2(
+            hIcmpFile, NULL, NULL, NULL,
+            ((PSOCKADDR_IN)Target->ai_addr)->sin_addr.s_addr,
+            SendBuffer, (USHORT)RequestSize, &IpOptions,
+            ReplyBuffer, ReplySize, Timeout);
+    }
 
-    /* Send ICMP echo request */
+    free(SendBuffer);
 
-    FD_ZERO(&Fds);
-    FD_SET(IcmpSock, &Fds);
-    Timeval.tv_sec  = Timeout / 1000;
-    Timeval.tv_usec = Timeout % 1000;
-    Status = select(0, NULL, &Fds, NULL, &Timeval);
-    if ((Status != SOCKET_ERROR) && (Status != 0))
+    if (Status == 0)
     {
+        Status = GetLastError();
+        switch (Status)
+        {
+        case IP_DEST_HOST_UNREACHABLE:
+            PrintString(IDS_DEST_HOST_UNREACHABLE);
+            break;
 
-#ifndef NDEBUG
-        printf("Sending packet\n");
-        DisplayBuffer(Buffer, sizeof(ICMP_ECHO_PACKET) + DataSize);
-        printf("\n");
-#endif /* !NDEBUG */
+        case IP_DEST_NET_UNREACHABLE:
+            PrintString(IDS_DEST_NET_UNREACHABLE);
+            break;
 
-        Status = sendto(IcmpSock, Buffer, sizeof(ICMP_ECHO_PACKET) + DataSize,
-            0, (SOCKADDR*)&Target, sizeof(Target));
-        QueryTime(&SentTime);
-        SentCount++;
+        case IP_REQ_TIMED_OUT:
+            PrintString(IDS_REQUEST_TIMED_OUT);
+            break;
+
+        default:
+            PrintString(IDS_TRANSMIT_FAILED, Status);
+            break;
+        }
     }
-    if (Status == SOCKET_ERROR)
+    else
     {
-        if (WSAGetLastError() == WSAEHOSTUNREACH)
-            FormatOutput(IDS_DEST_UNREACHABLE);
-        else
-            FormatOutput(IDS_COULD_NOT_TRANSMIT, WSAGetLastError());
-        GlobalFree(Buffer);
-        LostCount++;
-        return FALSE;
-    }
+        EchosReceived++;
 
-    /* Expect to receive ICMP echo reply */
-    FD_ZERO(&Fds);
-    FD_SET(IcmpSock, &Fds);
-    Timeval.tv_sec  = Timeout / 1000;
-    Timeval.tv_usec = Timeout % 1000;
+        PrintString(IDS_REPLY_FROM, Address);
 
-    do {
-        Status = select(0, &Fds, NULL, NULL, &Timeval);
-        if ((Status != SOCKET_ERROR) && (Status != 0))
+        if (Family == AF_INET6)
         {
-            Length = sizeof(From);
-            Status = recvfrom(IcmpSock, Buffer, Size, 0, &From, &Length);
-
-#ifndef NDEBUG
-            printf("Received packet\n");
-            DisplayBuffer(Buffer, Status);
-            printf("\n");
-#endif /* !NDEBUG */
+            PICMPV6_ECHO_REPLY pEchoReply;
+
+            pEchoReply = (PICMPV6_ECHO_REPLY)ReplyBuffer;
+
+            switch (pEchoReply->Status)
+            {
+            case IP_SUCCESS:
+                EchosSuccessful++;
+
+                if (pEchoReply->RoundTripTime == 0)
+                {
+                    PrintString(IDS_REPLY_TIME_0MS);
+                }
+                else
+                {
+                    PrintString(IDS_REPLY_TIME_MS, pEchoReply->RoundTripTime);
+                }
+
+                if (pEchoReply->RoundTripTime < RTTMin || RTTMin == 0)
+                {
+                    RTTMin = pEchoReply->RoundTripTime;
+                }
+
+                if (pEchoReply->RoundTripTime > RTTMax || RTTMax == 0)
+                {
+                    RTTMax = pEchoReply->RoundTripTime;
+                }
+
+                RTTTotal += pEchoReply->RoundTripTime;
+                break;
+
+            case IP_TTL_EXPIRED_TRANSIT:
+                PrintString(IDS_TTL_EXPIRED);
+                break;
+
+            default:
+                PrintString(IDS_REPLY_STATUS, pEchoReply->Status);
+                break;
+            }
         }
         else
-            LostCount++;
-        if (Status == SOCKET_ERROR)
         {
-            if (WSAGetLastError() != WSAETIMEDOUT)
+            PICMP_ECHO_REPLY pEchoReply;
+
+            pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
+
+            switch (pEchoReply->Status)
             {
-                FormatOutput(IDS_COULD_NOT_RECV, WSAGetLastError());
-                GlobalFree(Buffer);
-                return FALSE;
+            case IP_SUCCESS:
+                EchosSuccessful++;
+
+                PrintString(IDS_REPLY_BYTES, pEchoReply->DataSize);
+
+                if (pEchoReply->RoundTripTime == 0)
+                {
+                    PrintString(IDS_REPLY_TIME_0MS);
+                }
+                else
+                {
+                    PrintString(IDS_REPLY_TIME_MS, pEchoReply->RoundTripTime);
+                }
+
+                PrintString(IDS_REPLY_TTL, pEchoReply->Options.Ttl);
+
+                if (pEchoReply->RoundTripTime < RTTMin || RTTMin == 0)
+                {
+                    RTTMin = pEchoReply->RoundTripTime;
+                }
+
+                if (pEchoReply->RoundTripTime > RTTMax || RTTMax == 0)
+                {
+                    RTTMax = pEchoReply->RoundTripTime;
+                }
+
+                RTTTotal += pEchoReply->RoundTripTime;
+                break;
+
+            case IP_TTL_EXPIRED_TRANSIT:
+                PrintString(IDS_TTL_EXPIRED);
+                break;
+
+            default:
+                PrintString(IDS_REPLY_STATUS, pEchoReply->Status);
+                break;
             }
-            Status = 0;
         }
+    }
 
-        if (Status == 0)
-        {
-            FormatOutput(IDS_REQUEST_TIMEOUT);
-            GlobalFree(Buffer);
-            return TRUE;
-        }
-
-    } while (!DecodeResponse(Buffer, Status, (PSOCKADDR_IN)&From));
-
-    GlobalFree(Buffer);
-    return TRUE;
+    free(ReplyBuffer);
 }
 
-
-/* Program entry point */
-int wmain(int argc, LPWSTR argv[])
+static
+void
+PrintStats(void)
 {
-    UINT Count;
-    WCHAR MinTime[20];
-    WCHAR MaxTime[20];
-    WCHAR AvgTime[20];
-
-    hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
+    ULONG EchosLost = EchosSent - EchosReceived;
+    ULONG PercentLost = (ULONG)((EchosLost / (double)EchosSent) * 100.0);
 
-    Reset();
+    PrintString(IDS_STATISTICS, Address, EchosSent, EchosReceived, EchosLost, PercentLost);
 
-    if ((ParseCmdline(argc, argv)) && (Setup()))
+    if (EchosSuccessful > 0)
     {
+        ULONG RTTAverage = RTTTotal / EchosSuccessful;
 
-        FormatOutput(IDS_PING_WITH_BYTES, TargetName, TargetIP, DataSize);
-
-        Count = 0;
-        while ((NeverStop) || (Count < PingCount))
-        {
-            Ping();
-            Count++;
-            if((NeverStop) || (Count < PingCount))
-                Sleep(Timeout);
-        };
-
-        Cleanup();
-
-        /* Calculate avarage round trip time */
-        if ((SentCount - LostCount) > 0)
-            AvgRTT.QuadPart = SumRTT.QuadPart / (SentCount - LostCount);
-        else
-            AvgRTT.QuadPart = 0;
-
-        /* Calculate loss percent */
-        Count = SentCount ? (LostCount * 100) / SentCount : 0;
-
-        if (!MinRTTSet)
-            MinRTT = MaxRTT;
+        PrintString(IDS_APPROXIMATE_RTT, RTTMin, RTTMax, RTTAverage);
+    }
+}
 
-        TimeToMsString(MinTime, sizeof(MinTime) / sizeof(WCHAR), MinRTT);
-        TimeToMsString(MaxTime, sizeof(MaxTime) / sizeof(WCHAR), MaxRTT);
-        TimeToMsString(AvgTime, sizeof(AvgTime) / sizeof(WCHAR), AvgRTT);
+static
+BOOL
+WINAPI
+ConsoleCtrlHandler(DWORD ControlType)
+{
+    switch (ControlType)
+    {
+    case CTRL_C_EVENT:
+        PrintStats();
+        PrintString(IDS_CTRL_C);
+        return FALSE;
 
-        /* Print statistics */
-        FormatOutput(IDS_PING_STATISTICS, TargetIP);
-        FormatOutput(IDS_PACKETS_SENT_RECEIVED_LOST,\
-                     SentCount, SentCount - LostCount, LostCount, Count);
+    case CTRL_BREAK_EVENT:
+        PrintStats();
+        PrintString(IDS_CTRL_BREAK);
+        return TRUE;
 
+    case CTRL_CLOSE_EVENT:
+        PrintStats();
+        return FALSE;
 
-        /* Print approximate times or NO approximate times if 100% loss */
-        if ((SentCount - LostCount) > 0)
-        {
-            FormatOutput(IDS_APPROXIMATE_ROUND_TRIP);
-            FormatOutput(IDS_MIN_MAX_AVERAGE, MinTime, MaxTime, AvgTime);
-        }
-    }
-    else
-    {
-        return 1;
+    default:
+        return FALSE;
     }
-    return 0;
 }
-
-/* EOF */
index 70d12d7..5123dd8 100644 (file)
@@ -2,10 +2,9 @@
 
 #include "resource.h"
 
-#define REACTOS_STR_FILE_DESCRIPTION   "ReactOS TCP/IPv4 Win32 Ping"
-#define REACTOS_STR_INTERNAL_NAME      "ping"
-#define REACTOS_STR_ORIGINAL_FILENAME  "ping.exe"
-#define REACTOS_STR_ORIGINAL_COPYRIGHT "Casper S. Hornstrup (chorns@users.sourceforge.net)"
+#define REACTOS_STR_FILE_DESCRIPTION  "TCP/IP Ping Command"
+#define REACTOS_STR_INTERNAL_NAME     "ping.exe"
+#define REACTOS_STR_ORIGINAL_FILENAME "ping.exe"
 #include <reactos/version.rc>
 
 /* UTF-8 */
@@ -58,4 +57,4 @@
 #endif
 #ifdef LANGUAGE_ZH_TW
     #include "lang/zh-TW.rc"
-#endif
\ No newline at end of file
+#endif
index 1da2f21..8990c24 100644 (file)
@@ -1,26 +1,30 @@
 #pragma once
 
-#define IDS_USAGE                      0
-#define IDS_PING_WITH_BYTES            1
-#define IDS_PING_STATISTICS            2
-#define IDS_PACKETS_SENT_RECEIVED_LOST 3
-#define IDS_APPROXIMATE_ROUND_TRIP     4
-#define IDS_MIN_MAX_AVERAGE            5
-#define IDS_NOT_ENOUGH_RESOURCES       6
-#define IDS_UNKNOWN_HOST               7
-#define IDS_SETSOCKOPT_FAILED          8
-#define IDS_COULD_NOT_CREATE_SOCKET    9
-#define IDS_COULD_NOT_INIT_WINSOCK     10
-#define IDS_DEST_MUST_BE_SPECIFIED     11
-#define IDS_BAD_PARAMETER              12
-#define IDS_BAD_OPTION_FORMAT          13
-#define IDS_BAD_OPTION                 14
-#define IDS_BAD_VALUE_OPTION_L         15
-#define IDS_REPLY_FROM                 16
-#define IDS_DEST_UNREACHABLE           17
-#define IDS_COULD_NOT_TRANSMIT         18
-#define IDS_COULD_NOT_RECV             19
-#define IDS_REQUEST_TIMEOUT            20
-#define IDS_MS                         21
-#define IDS_1MS                        22
-#define IDS_BAD_VALUE_OPTION_N         23
+#define IDS_USAGE                 100
+#define IDS_CTRL_BREAK            101
+#define IDS_CTRL_C                102
+#define IDS_NO_RESOURCES          103
+#define IDS_MISSING_ADDRESS       104
+#define IDS_MISSING_VALUE         105
+#define IDS_BAD_OPTION            106
+#define IDS_BAD_PARAMETER         107
+#define IDS_BAD_VALUE             108
+#define IDS_WRONG_FAMILY          109
+#define IDS_UNKNOWN_HOST          110
+#define IDS_PINGING_ADDRESS       111
+#define IDS_PINGING_HOSTNAME      112
+#define IDS_SOURCE_ADDRESS        113
+#define IDS_PING_SIZE             114
+#define IDS_REPLY_FROM            115
+#define IDS_REPLY_BYTES           116
+#define IDS_REPLY_TIME_MS         117
+#define IDS_REPLY_TIME_0MS        118
+#define IDS_REPLY_TTL             119
+#define IDS_REPLY_STATUS          120
+#define IDS_DEST_HOST_UNREACHABLE 121
+#define IDS_DEST_NET_UNREACHABLE  122
+#define IDS_REQUEST_TIMED_OUT     123
+#define IDS_TTL_EXPIRED           124
+#define IDS_TRANSMIT_FAILED       125
+#define IDS_STATISTICS            126
+#define IDS_APPROXIMATE_RTT       127