Index: base/applications/network/CMakeLists.txt
===================================================================
--- base/applications/network/CMakeLists.txt	(revision 72757)
+++ base/applications/network/CMakeLists.txt	(working copy)
@@ -9,6 +9,7 @@
 add_subdirectory(netstat)
 add_subdirectory(nslookup)
 add_subdirectory(ping)
+add_subdirectory(ping_new)
 add_subdirectory(route)
 add_subdirectory(telnet)
 add_subdirectory(tracert)
Index: base/applications/network/ping_new/CMakeLists.txt
===================================================================
--- base/applications/network/ping_new/CMakeLists.txt	(nonexistent)
+++ base/applications/network/ping_new/CMakeLists.txt	(working copy)
@@ -0,0 +1,6 @@
+
+add_executable(ping_new ping.c ping.rc)
+set_module_type(ping_new win32cui UNICODE)
+add_importlibs(ping_new ws2_32 iphlpapi user32 msvcrt kernel32 ntdll)
+
+add_cd_file(TARGET ping_new DESTINATION reactos/system32 FOR all)
Index: base/applications/network/ping_new/lang/en-US.rc
===================================================================
--- base/applications/network/ping_new/lang/en-US.rc	(nonexistent)
+++ base/applications/network/ping_new/lang/en-US.rc	(working copy)
@@ -0,0 +1,58 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+    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_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: base/applications/network/ping_new/ping.c
===================================================================
--- base/applications/network/ping_new/ping.c	(nonexistent)
+++ base/applications/network/ping_new/ping.c	(working copy)
@@ -0,0 +1,712 @@
+/*
+ * 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:     Tim Crawford <crawfxrd@gmail.com>
+ */
+
+#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
+#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[])
+{
+    WSADATA wsaData;
+    ULONG i;
+    DWORD StrLen = 46;
+
+    IpOptions.Ttl = 128;
+
+    if (!ParseCmdLine(argc, argv))
+    {
+        return 1;
+    }
+
+    if (!SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE))
+    {
+        DPRINT1("Failed to set control handler: %lu\n", GetLastError());
+
+        return 1;
+    }
+
+    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
+    {
+        DPRINT1("WSAStartup failed\n");
+
+        return 1;
+    }
+
+    if (!ResolveTarget(TargetName))
+    {
+        WSACleanup();
+
+        return 1;
+    }
+
+    if (WSAAddressToStringW(Target->ai_addr, (DWORD)Target->ai_addrlen, NULL, Address, &StrLen) != 0)
+    {
+        DPRINT1("WSAAddressToStringW failed: %d\n", WSAGetLastError());
+        FreeAddrInfoW(Target);
+        WSACleanup();
+
+        return 1;
+    }
+
+    if (Family == AF_INET6)
+    {
+        hIcmpFile = Icmp6CreateFile();
+    }
+    else
+    {
+        hIcmpFile = IcmpCreateFile();
+    }
+
+
+    if (hIcmpFile == INVALID_HANDLE_VALUE)
+    {
+        DPRINT1("IcmpCreateFile failed: %lu\n", GetLastError());
+        FreeAddrInfoW(Target);
+        WSACleanup();
+
+        return 1;
+    }
+
+    if (*CanonName)
+    {
+        PrintString(IDS_PINGING_HOSTNAME, CanonName, Address);
+    }
+    else
+    {
+        PrintString(IDS_PINGING_ADDRESS, Address);
+    }
+
+    PrintString(IDS_PING_SIZE, RequestSize);
+
+    Ping();
+    i = 1;
+
+    while (i < PingCount)
+    {
+        Sleep(1000);
+        Ping();
+
+        if (!PingForever)
+            ++i;
+    }
+
+    PrintStats();
+
+    IcmpCloseHandle(hIcmpFile);
+    FreeAddrInfoW(Target);
+    WSACleanup();
+
+    return 0;
+}
+
+static
+void
+PrintString(UINT id, ...)
+{
+    WCHAR Format[1024];
+    WCHAR Msg[1024];
+    DWORD Len;
+    va_list args;
+
+    if (!LoadStringW(GetModuleHandleW(NULL), id, Format, _countof(Format)))
+    {
+        DPRINT1("LoadStringW failed: %lu\n", GetLastError());
+
+        return;
+    }
+
+    va_start(args, id);
+
+    Len = FormatMessageW(
+        FORMAT_MESSAGE_FROM_STRING,
+        Format, 0, 0,
+        Msg, 1024, &args);
+
+    if (Len == 0)
+    {
+        DPRINT1("FormatMessageW failed: %lu\n", GetLastError());
+
+        va_end(args);
+        return;
+    }
+
+    wprintf(L"%s", Msg);
+
+    va_end(args);
+}
+
+static
+void
+Usage(void)
+{
+    PrintString(IDS_USAGE);
+}
+
+static
+BOOL
+ParseCmdLine(int argc, PWSTR argv[])
+{
+    int i;
+
+    if (argc < 2)
+    {
+        Usage();
+
+        return FALSE;
+    }
+
+    for (i = 1; i < argc; i++)
+    {
+        if (argv[i][0] == L'-' || argv[i][0] == L'/')
+        {
+            switch (argv[i][1])
+            {
+            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)
+                    {
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 1, UINT_MAX);
+
+                        return FALSE;
+                    }
+                }
+                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)
+                    {
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 0, MAX_SEND_SIZE);
+
+                        return FALSE;
+                    }
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
+                    return FALSE;
+                }
+
+                break;
+
+            case L'f':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
+
+                    return FALSE;
+                }
+
+                Family = AF_INET;
+                IpOptions.Flags |= IP_FLAG_DF;
+                break;
+
+            case L'i':
+                if (i + 1 < argc)
+                {
+                    ULONG Ttl = wcstoul(argv[++i], NULL, 0);
+
+                    if ((Ttl == 0) || (Ttl > UCHAR_MAX))
+                    {
+                        PrintString(IDS_BAD_VALUE, argv[i - 1], 1, UCHAR_MAX);
+
+                        return FALSE;
+                    }
+
+                    IpOptions.Ttl = (UCHAR)Ttl;
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
+                    return FALSE;
+                }
+
+                break;
+
+            case L'v':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
+
+                    return FALSE;
+                }
+
+                Family = AF_INET;
+
+                if (i + 1 < argc)
+                {
+                    /* This option has been deprecated. Don't do anything. */
+                    ++i;
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
+                    return FALSE;
+                }
+
+                break;
+
+            case L'w':
+                if (i + 1 < argc)
+                {
+                    Timeout = wcstoul(argv[++i], NULL, 0);
+
+                    if (Timeout < DEFAULT_TIMEOUT)
+                    {
+                        Timeout = DEFAULT_TIMEOUT;
+                    }
+                }
+                else
+                {
+                    PrintString(IDS_MISSING_VALUE, argv[i]);
+
+                    return FALSE;
+                }
+
+                break;
+
+            case L'R':
+                if (Family == AF_INET)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv6");
+
+                    return FALSE;
+                }
+
+                Family = AF_INET6;
+
+                /* This option has been deprecated. Don't do anything. */
+                break;
+
+            case L'4':
+                if (Family == AF_INET6)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv4");
+
+                    return FALSE;
+                }
+
+                Family = AF_INET;
+                break;
+
+            case L'6':
+                if (Family == AF_INET)
+                {
+                    PrintString(IDS_WRONG_FAMILY, argv[i], L"IPv6");
+
+                    return FALSE;
+                }
+
+                Family = AF_INET6;
+                break;
+
+            case L'?':
+                Usage();
+
+                return FALSE;
+
+            default:
+                PrintString(IDS_BAD_OPTION, argv[i]);
+                Usage();
+
+                return FALSE;
+            }
+        }
+        else
+        {
+            if (TargetName != NULL)
+            {
+                PrintString(IDS_BAD_PARAMETER, argv[i]);
+
+                return FALSE;
+            }
+
+            TargetName = argv[i];
+        }
+    }
+
+    if (TargetName == NULL)
+    {
+        PrintString(IDS_MISSING_ADDRESS);
+
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+static
+BOOL
+ResolveTarget(PCWSTR target)
+{
+    ADDRINFOW hints;
+    int Status;
+
+    ZeroMemory(&hints, sizeof(hints));
+    hints.ai_family = Family;
+    hints.ai_flags = AI_NUMERICHOST;
+
+    Status = GetAddrInfoW(target, NULL, &hints, &Target);
+    if (Status != 0)
+    {
+        hints.ai_flags = AI_CANONNAME;
+
+        Status = GetAddrInfoW(target, NULL, &hints, &Target);
+        if (Status != 0)
+        {
+            PrintString(IDS_UNKNOWN_HOST, target);
+
+            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);
+
+        if (Status != 0)
+        {
+            DPRINT1("GetNameInfoW failed: %d\n", Status);
+
+            return FALSE;
+        }
+    }
+
+    Family = Target->ai_family;
+
+    return TRUE;
+}
+
+static
+void
+Ping(void)
+{
+    PVOID ReplyBuffer = NULL;
+    PVOID SendBuffer = NULL;
+    DWORD ReplySize = 0;
+    DWORD Status;
+
+    SendBuffer = malloc(RequestSize);
+    if (SendBuffer == NULL)
+    {
+        PrintString(IDS_NO_RESOURCES);
+
+        exit(1);
+    }
+
+    ZeroMemory(SendBuffer, RequestSize);
+
+    if (Family == AF_INET6)
+    {
+        ReplySize += sizeof(ICMPV6_ECHO_REPLY);
+    }
+    else
+    {
+        ReplySize += sizeof(ICMP_ECHO_REPLY);
+    }
+
+    ReplySize += RequestSize + SIZEOF_ICMP_ERROR + SIZEOF_IO_STATUS_BLOCK;
+
+    ReplyBuffer = malloc(ReplySize);
+    if (ReplyBuffer == NULL)
+    {
+        PrintString(IDS_NO_RESOURCES);
+        free(SendBuffer);
+
+        exit(1);
+    }
+
+    ZeroMemory(ReplyBuffer, ReplySize);
+
+    ++EchosSent;
+
+    if (Family == AF_INET6)
+    {
+        struct sockaddr_in6 Source;
+
+        ZeroMemory(&Source, sizeof(Source));
+        Source.sin6_family = AF_INET6;
+
+        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);
+    }
+
+    free(SendBuffer);
+
+    if (Status == 0)
+    {
+        Status = GetLastError();
+        switch (Status)
+        {
+        case IP_DEST_HOST_UNREACHABLE:
+            PrintString(IDS_DEST_HOST_UNREACHABLE);
+            break;
+
+        case IP_DEST_NET_UNREACHABLE:
+            PrintString(IDS_DEST_NET_UNREACHABLE);
+            break;
+
+        case IP_REQ_TIMED_OUT:
+            PrintString(IDS_REQUEST_TIMED_OUT);
+            break;
+
+        default:
+            PrintString(IDS_TRANSMIT_FAILED, Status);
+            break;
+        }
+    }
+    else
+    {
+        ++EchosReceived;
+
+        PrintString(IDS_REPLY_FROM, Address);
+
+        if (Family == AF_INET6)
+        {
+            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
+        {
+            PICMP_ECHO_REPLY pEchoReply;
+
+            pEchoReply = (PICMP_ECHO_REPLY)ReplyBuffer;
+
+            switch (pEchoReply->Status)
+            {
+            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;
+            }
+        }
+    }
+
+    free(ReplyBuffer);
+}
+
+static
+void
+PrintStats(void)
+{
+    ULONG EchosLost = EchosSent - EchosReceived;
+    ULONG PercentLost = (ULONG)((EchosLost / (double)EchosSent) * 100.0);
+
+    PrintString(IDS_STATISTICS, Address, EchosSent, EchosReceived, EchosLost, PercentLost);
+
+    if (EchosSuccessful > 0)
+    {
+        ULONG RTTAverage = RTTTotal / EchosSuccessful;
+
+        PrintString(IDS_APPROXIMATE_RTT, RTTMin, RTTMax, RTTAverage);
+    }
+}
+
+static
+BOOL
+WINAPI
+ConsoleCtrlHandler(DWORD ControlType)
+{
+    switch (ControlType)
+    {
+    case CTRL_C_EVENT:
+        PrintStats();
+        PrintString(IDS_CTRL_C);
+        return FALSE;
+
+    case CTRL_BREAK_EVENT:
+        PrintStats();
+        PrintString(IDS_CTRL_BREAK);
+        return TRUE;
+
+    case CTRL_CLOSE_EVENT:
+        PrintStats();
+        return FALSE;
+
+    default:
+        return FALSE;
+    }
+}
Index: base/applications/network/ping_new/ping.rc
===================================================================
--- base/applications/network/ping_new/ping.rc	(nonexistent)
+++ base/applications/network/ping_new/ping.rc	(working copy)
@@ -0,0 +1,15 @@
+#include <windef.h>
+
+#include "resource.h"
+
+#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 */
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_EN_US
+    #include "lang/en-US.rc"
+#endif
Index: base/applications/network/ping_new/resource.h
===================================================================
--- base/applications/network/ping_new/resource.h	(nonexistent)
+++ base/applications/network/ping_new/resource.h	(working copy)
@@ -0,0 +1,30 @@
+#pragma once
+
+#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
