[ARP] Replace some hard-coded strings by message resources
authorEric Kohl <eric.kohl@reactos.org>
Sat, 9 May 2020 10:28:40 +0000 (12:28 +0200)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 9 May 2020 10:30:11 +0000 (12:30 +0200)
base/applications/network/arp/CMakeLists.txt
base/applications/network/arp/arp.c
base/applications/network/arp/arp.rc
sdk/include/reactos/mc/CMakeLists.txt
sdk/include/reactos/mc/arp_msg.mc [new file with mode: 0644]

index 7f86c4c..6aba573 100644 (file)
@@ -1,5 +1,6 @@
 
 add_executable(arp arp.c arp.rc)
 set_module_type(arp win32cui)
+add_dependencies(arp arp_msg)
 add_importlibs(arp iphlpapi ws2_32 shlwapi msvcrt kernel32)
 add_cd_file(TARGET arp DESTINATION reactos/system32 FOR all)
index 4c93221..5df10ed 100644 (file)
@@ -60,7 +60,7 @@ VOID Usage(VOID);
  */
 DWORD DoFormatMessage(VOID)
 {
-    LPVOID lpMsgBuf;
+    LPTSTR lpMsgBuf;
     DWORD RetVal;
 
     DWORD ErrorCode = GetLastError();
@@ -79,8 +79,7 @@ DWORD DoFormatMessage(VOID)
 
         if (RetVal != 0)
         {
-            _tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
-
+            _putts(lpMsgBuf);
             LocalFree(lpMsgBuf);
             /* return number of TCHAR's stored in output buffer
              * excluding '\0' - as FormatMessage does*/
@@ -90,6 +89,56 @@ DWORD DoFormatMessage(VOID)
     return 0;
 }
 
+VOID
+PrintMessage(
+    DWORD dwMessage)
+{
+    LPTSTR lpMsgBuf;
+    DWORD RetVal;
+
+    RetVal = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                           FORMAT_MESSAGE_FROM_HMODULE |
+                           FORMAT_MESSAGE_IGNORE_INSERTS,
+                           GetModuleHandleW(NULL),
+                           dwMessage,
+                           LANG_USER_DEFAULT,
+                           (LPTSTR)&lpMsgBuf,
+                           0,
+                           NULL);
+    if (RetVal != 0)
+    {
+        _putts(lpMsgBuf);
+        LocalFree(lpMsgBuf);
+    }
+}
+
+VOID
+PrintMessageV(
+    DWORD dwMessage,
+    ...)
+{
+    LPTSTR lpMsgBuf;
+    va_list args = NULL;
+    DWORD RetVal;
+
+    va_start(args, dwMessage);
+
+    RetVal = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE,
+                           GetModuleHandleW(NULL),
+                           dwMessage,
+                           LANG_USER_DEFAULT,
+                           (LPTSTR)&lpMsgBuf,
+                           0,
+                           &args);
+    va_end(args);
+
+    if (RetVal != 0)
+    {
+        _putts(lpMsgBuf);
+        LocalFree(lpMsgBuf);
+    }
+}
+
 /*
  *
  * Takes an ARP entry and prints the IP address,
@@ -118,14 +167,21 @@ INT PrintEntries(PMIB_IPNETROW pIpAddRow)
     /* print cache type */
     switch (pIpAddRow->dwType)
     {
-        case MIB_IPNET_TYPE_DYNAMIC : _tprintf(_T("dynamic\n"));
-                                      break;
-        case MIB_IPNET_TYPE_STATIC : _tprintf(_T("static\n"));
-                                      break;
-        case MIB_IPNET_TYPE_INVALID : _tprintf(_T("invalid\n"));
-                                      break;
-        case MIB_IPNET_TYPE_OTHER : _tprintf(_T("other\n"));
-                                      break;
+        case MIB_IPNET_TYPE_DYNAMIC:
+            PrintMessage(10007);
+            break;
+
+        case MIB_IPNET_TYPE_STATIC:
+            PrintMessage(10008);
+            break;
+
+        case MIB_IPNET_TYPE_INVALID:
+            PrintMessage(10006);
+            break;
+
+        case MIB_IPNET_TYPE_OTHER:
+            PrintMessage(10005);
+            break;
     }
     return EXIT_SUCCESS;
 }
@@ -173,7 +229,7 @@ INT DisplayArpEntries(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
     /* check there are entries in the table */
     if (pIpNetTable->dwNumEntries == 0)
     {
-        _tprintf(_T("No ARP entires found\n"));
+        PrintMessage(10018);
         goto cleanup;
     }
 
@@ -213,8 +269,7 @@ INT DisplayArpEntries(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
 
 
     /* print header, including interface IP address and index number */
-    _tprintf(_T("\nInterface: %s --- 0x%lx \n"), szIntIpAddr, pIpNetTable->table[0].dwIndex);
-    _tprintf(_T("  Internet Address      Physical Address      Type\n"));
+    PrintMessageV(10003, szIntIpAddr, pIpNetTable->table[0].dwIndex);
 
     /* go through all ARP entries */
     for (i=0; i < pIpNetTable->dwNumEntries; i++)
@@ -269,7 +324,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
     {
         if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
         {
-            _tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
+            PrintMessageV(10001, pszInetAddr);
             return EXIT_FAILURE;
         }
     }
@@ -282,7 +337,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
     /* check MAC address */
     if (strlen(pszEthAddr) != 17)
     {
-        _tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
+        PrintMessageV(10002, pszEthAddr);
         return EXIT_FAILURE;
     }
     for (i=0; i<17; i++)
@@ -292,7 +347,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
 
         if (!isxdigit(pszEthAddr[i]))
         {
-            _tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
+            PrintMessageV(10002, pszEthAddr);
             return EXIT_FAILURE;
         }
     }
@@ -412,7 +467,7 @@ INT Deletehost(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
             bFlushTable = TRUE;
         else if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
         {
-            _tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
+            PrintMessageV(10001, pszInetAddr);
             exit(EXIT_FAILURE);
         }
     }
@@ -508,35 +563,7 @@ cleanup:
  */
 VOID Usage(VOID)
 {
-    _tprintf(_T("\nDisplays and modifies the IP-to-Physical address translation tables used by\n"
-                "address resolution protocol (ARP).\n"
-                "\n"
-                "ARP -s inet_addr eth_addr [if_addr]\n"
-                "ARP -d inet_addr [if_addr]\n"
-                "ARP -a [inet_addr] [-N if_addr]\n"
-                "\n"
-                "  -a            Displays current ARP entries by interrogating the current\n"
-                "                protocol data.  If inet_addr is specified, the IP and Physical\n"
-                "                addresses for only the specified computer are displayed.  If\n"
-                "                more than one network interface uses ARP, entries for each ARP\n"
-                "                table are displayed.\n"
-                "  -g            Same as -a.\n"
-                "  inet_addr     Specifies an internet address.\n"
-                "  -N if_addr    Displays the ARP entries for the network interface specified\n"
-                "                by if_addr.\n"
-                "  -d            Deletes the host specified by inet_addr. inet_addr may be\n"
-                "                wildcarded with * to delete all hosts.\n"
-                "  -s            Adds the host and associates the Internet address inet_addr\n"
-                "                with the Physical address eth_addr.  The Physical address is\n"
-                "                given as 6 hexadecimal bytes separated by hyphens. The entry\n"
-                "                is permanent.\n"
-                "  eth_addr      Specifies a physical address.\n"
-                "  if_addr       If present, this specifies the Internet address of the\n"
-                "                interface whose address translation table should be modified.\n"
-                "                If not present, the first applicable interface will be used.\n"
-                "Example:\n"
-                "  > arp -s 157.55.85.212   00-aa-00-62-c6-09  .... Adds a static entry.\n"
-                "  > arp -a                                    .... Displays the arp table.\n\n"));
+    PrintMessage(10000);
 }
 
 /*
index f206cd7..0076cca 100644 (file)
@@ -3,3 +3,4 @@
 #define REACTOS_STR_ORIGINAL_FILENAME  "arp.exe"
 #define REACTOS_STR_ORIGINAL_COPYRIGHT "Ged Murphy (gedmurphy@gmail.com)"
 #include <reactos/version.rc>
+#include <arp_msg.rc>
index 46753f3..9899bb8 100644 (file)
@@ -3,6 +3,7 @@ list(APPEND ANSI_SOURCE
      bugcodes.mc)
 
 list(APPEND UNICODE_SOURCE
+     arp_msg.mc
      errcodes.mc
      net_msg.mc
      neteventmsg.mc
diff --git a/sdk/include/reactos/mc/arp_msg.mc b/sdk/include/reactos/mc/arp_msg.mc
new file mode 100644 (file)
index 0000000..15aa409
--- /dev/null
@@ -0,0 +1,123 @@
+MessageIdTypedef=DWORD
+
+SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
+               Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
+               Warning=0x2:STATUS_SEVERITY_WARNING
+               Error=0x3:STATUS_SEVERITY_ERROR
+              )
+
+FacilityNames=(System=0x0:FACILITY_SYSTEM
+              )
+
+LanguageNames=(English=0x409:MSG00409
+              )
+
+MessageId=10000
+SymbolicName=MSG_ARP_SYNTAX
+Severity=Success
+Facility=System
+Language=English
+Displays and modifies the IP-to-Physical address translation tables used by
+address resolution protocol (ARP).
+
+ARP -s inet_addr eth_addr [if_addr]
+ARP -d inet_addr [if_addr]
+ARP -a [inet_addr] [-N if_addr]
+
+  -a            Displays current ARP entries by interrogating the current
+                protocol data.  If inet_addr is specified, the IP and Physical
+                addresses for only the specified computer are displayed.  If
+                more than one network interface uses ARP, entries for each ARP
+                table are displayed.
+  -g            Same as -a.
+  inet_addr     Specifies an internet address.
+  -N if_addr    Displays the ARP entries for the network interface specified
+                by if_addr.
+  -d            Deletes the host specified by inet_addr. inet_addr may be
+                wildcarded with * to delete all hosts.
+  -s            Adds the host and associates the Internet address inet_addr
+                with the Physical address eth_addr.  The Physical address is
+                given as 6 hexadecimal bytes separated by hyphens. The entry
+                is permanent.
+  eth_addr      Specifies a physical address.
+  if_addr       If present, this specifies the Internet address of the
+                interface whose address translation table should be modified.
+                If not present, the first applicable interface will be used.
+Example:
+  > arp -s 157.55.85.212   00-aa-00-62-c6-09  .... Adds a static entry.
+  > arp -a                                    .... Displays the arp table.
+.
+
+MessageId=10001
+SymbolicName=MSG_ARP_BAD_IP_ADDRESS
+Severity=Success
+Facility=System
+Language=English
+ARP: bad IP address: %1
+.
+
+MessageId=10002
+SymbolicName=MSG_ARP_BAD_ARGUMENT
+Severity=Success
+Facility=System
+Language=English
+ARP: bad argument: %1
+.
+
+MessageId=10003
+SymbolicName=MSG_ARP_INTERFACE
+Severity=Success
+Facility=System
+Language=English
+
+Interface: %1!s! --- 0x%2!lx!
+  Internet Address      Physical Address      Type
+.
+
+MessageId=10005
+SymbolicName=MSG_ARP_OTHER
+Severity=Success
+Facility=System
+Language=English
+other%0
+.
+
+MessageId=10006
+SymbolicName=MSG_ARP_INVALID
+Severity=Success
+Facility=System
+Language=English
+invalid%0
+.
+
+MessageId=10007
+SymbolicName=MSG_ARP_DYNAMIC
+Severity=Success
+Facility=System
+Language=English
+dynamic%0
+.
+
+MessageId=10008
+SymbolicName=MSG_ARP_STATIC
+Severity=Success
+Facility=System
+Language=English
+static%0
+.
+
+MessageId=10013
+SymbolicName=MSG_ARP_ENTRY_FORMAT
+Severity=Success
+Facility=System
+Language=English
+  %1!-20s!  %2!-20s!  %3!-10s!
+.
+
+MessageId=10018
+SymbolicName=MSG_ARP_NO_ENTRIES
+Severity=Success
+Facility=System
+Language=English
+No ARP entires found
+.