[SYSTEMINFO]
authorRafal Harabien <rafalh@reactos.org>
Tue, 5 Apr 2011 21:20:42 +0000 (21:20 +0000)
committerRafal Harabien <rafalh@reactos.org>
Tue, 5 Apr 2011 21:20:42 +0000 (21:20 +0000)
Add Italian translation (patch by Vincenzo Cotugno <vins8920 at hotmail dot com>)
Decrease buffer size
Don't print NULL domain/workgroup
Add network adapters detection

svn path=/trunk/; revision=51260

13 files changed:
rosapps/applications/sysutils/systeminfo/lang/de-DE.rc
rosapps/applications/sysutils/systeminfo/lang/en-US.rc
rosapps/applications/sysutils/systeminfo/lang/es-ES.rc
rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc
rosapps/applications/sysutils/systeminfo/lang/it-IT.rc [new file with mode: 0644]
rosapps/applications/sysutils/systeminfo/lang/no-NO.rc
rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc
rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc
rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc
rosapps/applications/sysutils/systeminfo/resource.h
rosapps/applications/sysutils/systeminfo/rsrc.rc
rosapps/applications/sysutils/systeminfo/systeminfo.c
rosapps/applications/sysutils/systeminfo/systeminfo.rbuild

index f7a0e47..e6fdc4a 100644 (file)
@@ -64,5 +64,11 @@ IDS_PAGEFILE_LOC,            "Auslagerungsdateipfad(e): %s"
 IDS_DOMAIN,                  "Domain"
 IDS_NETWORK_CARDS,           "Netzwerkkarte(n)"
 IDS_NETWORK_CARDS_FORMAT,    "%u Installiert."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index 05bdb9d..2b9bed9 100644 (file)
@@ -62,5 +62,11 @@ IDS_PAGEFILE_LOC,            "Page File Location(s)"
 IDS_DOMAIN,                  "Domain"
 IDS_NETWORK_CARDS,           "Network Card(s)"
 IDS_NETWORK_CARDS_FORMAT,    "%u Installed."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index b57be05..644e5da 100644 (file)
@@ -67,5 +67,11 @@ IDS_PAGEFILE_LOC,            "Ruta(s) Archivo Paginaci
 IDS_DOMAIN,                  "Dominio"
 IDS_NETWORK_CARDS,           "Tarjeta(s) de Red"
 IDS_NETWORK_CARDS_FORMAT,    "%u No Instalada."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index 88eb9c0..1565ccb 100644 (file)
@@ -62,5 +62,11 @@ IDS_PAGEFILE_LOC,            "Emplacement(s) des fichiers d'
 IDS_DOMAIN,                  "Domaine"\r
 IDS_NETWORK_CARDS,           "Carte(s) réseau"\r
 IDS_NETWORK_CARDS_FORMAT,    "%u installée(s)."\r
+IDS_CONNECTION_NAME,         "Connection Name"\r
+IDS_STATUS,                  "Status"\r
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"\r
+IDS_DHCP_ENABLED,            "DHCP Enabled"\r
+IDS_NO,                      "No"\r
+IDS_IP_ADDRESSES,            "IP address(es)"\r
 \r
 END\r
diff --git a/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc b/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc
new file mode 100644 (file)
index 0000000..e02c236
--- /dev/null
@@ -0,0 +1,72 @@
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "SYSTEMINFO [/S sistema [/U nomeutente [/P [password]]]] [/FO formato] [/NH]\n\n\
+Descrizione:\n\
+  Questà utilità permettere ad un amministratore di\n\
+  visualizzare alcune informazioni basilari sulla configurazione del pc.\n\n\
+Lista Parametri:\n\
+  /S      sistema           Specifica il sistema remoto a cui connettersi.\n\n\
+  /U      [dominio\\]utente Specifica il contesto utente in cui eseguire\n\
+                            il comando.\n\n\
+  /P      [password]        Specifica la password per il dato\n\
+                            contesto utente. Se omesso, viene richiesto.\n\n\
+  /FO     formato           Specifica il formato con cui l'output\n\
+                            viene mostrato.\n\
+                            Valori Validi: ""TABLE"", ""LIST"", ""CSV"".\n\n\
+  /NH                       Specifica che la ""Etichetta Colonna"" non\n\
+                            deve essere mostrata nell'output.\n\
+                            Valido solo per i formati ""TABLE"" e ""CSV"" .\n\n\
+  /?                        Mostra questo aiuto.\n\n\
+Esempi:\n\
+  SYSTEMINFO\n\
+  SYSTEMINFO /?\n\
+  SYSTEMINFO /S sistema\n\
+  SYSTEMINFO /S sistema /U utente\n\
+  SYSTEMINFO /S sistema /U dominio\\utente /P password /FO TABLE\n\
+  SYSTEMINFO /S sistema /FO LIST\n\
+  SYSTEMINFO /S sistema /FO CSV /NH\n"
+
+IDS_HOST_NAME,               "Nome Host"
+IDS_OS_NAME,                 "Nome SO"
+IDS_OS_VERSION,              "Versione SO"
+IDS_BUILD,                   "Build"
+IDS_OS_BUILD_TYPE,           "Tipo SO"
+IDS_REG_OWNER,               "Proprietario Registrato"
+IDS_REG_ORG,                 "Organizzazione Registrata"
+IDS_PRODUCT_ID,              "ID Prodotto"
+IDS_INST_DATE,               "Data Installazione"
+IDS_UP_TIME,                 "Tempo di Avvio Sistema"
+IDS_UP_TIME_FORMAT           "%u Giorno, %u Ore, %u Minuti, %u Secondi"
+IDS_SYS_MANUFACTURER,        "Produttore PC"
+IDS_SYS_MODEL,               "Modello Sistema"
+IDS_SYS_TYPE,                "Tipo Sistema"
+IDS_PROCESSORS,              "Processore"
+IDS_PROCESSORS_FORMAT,       "%u Processore(i) Installato."
+IDS_BIOS_DATE,               "Data BIOS"
+IDS_BIOS_VERSION,            "Versione BIOS"
+IDS_ROS_DIR,                 "Directory ReactOS"
+IDS_SYS_DIR,                 "Directory di Sistema"
+IDS_BOOT_DEV,                "Periferica di Avvio"
+IDS_SYS_LOCALE,              "Impostazioni Locali Sistema"
+IDS_INPUT_LOCALE,            "Impostazioni Locali Input"
+IDS_TIME_ZONE,               "Fuso Orario"
+IDS_TOTAL_PHYS_MEM,          "Memoria Fisica Totale"
+IDS_AVAIL_PHISICAL_MEM,      "Memoria Fisica Disponibile"
+IDS_VIRT_MEM_MAX,            "Memoria Virtuale: Dimensione Massima"
+IDS_VIRT_MEM_AVAIL,          "Memoria Virtuale: Disponibile"
+IDS_VIRT_MEM_INUSE,          "Memoria Virtuale: In Uso"
+IDS_PAGEFILE_LOC,            "Posizioni File di Paging"
+IDS_DOMAIN,                  "Dominio"
+IDS_NETWORK_CARDS,           "Schede di Rete"
+IDS_NETWORK_CARDS_FORMAT,    "%u Installate."
+IDS_CONNECTION_NAME,         "Nome Connessione"
+IDS_STATUS,                  "Stato"
+IDS_MEDIA_DISCONNECTED,      "Disconnesso"
+IDS_DHCP_ENABLED,            "DHCP Abilitato"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "Indirizzo(i) IP"
+
+END
index af655d3..b117059 100644 (file)
@@ -62,5 +62,11 @@ IDS_PAGEFILE_LOC,            "Sidevekslingsfil lokalsjon(er)"
 IDS_DOMAIN,                  "Domene"
 IDS_NETWORK_CARDS,           "Nettverkskort(er)"
 IDS_NETWORK_CARDS_FORMAT,    "%u installert."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index c18a609..a170664 100644 (file)
@@ -69,5 +69,11 @@ IDS_PAGEFILE_LOC,            "Lokalizacja pliku wymiany"
 IDS_DOMAIN,                  "Domena"
 IDS_NETWORK_CARDS,           "Karty sieciowe"
 IDS_NETWORK_CARDS_FORMAT,    "Zainstalowane karty NIC: %u."
+IDS_CONNECTION_NAME,         "Nazwa po³¹czenia"
+IDS_STATUS,                  "Stan"
+IDS_MEDIA_DISCONNECTED,      "No\9cnik od³¹czony"
+IDS_DHCP_ENABLED,            "DHCP w³¹czone"
+IDS_NO,                      "Nie"
+IDS_IP_ADDRESSES,            "Adresy IP"
 
 END
index 7da4455..4d4e89c 100644 (file)
@@ -66,5 +66,11 @@ IDS_PAGEFILE_LOC,            "Umiestnenie(a) str
 IDS_DOMAIN,                  "Dom\82na"
 IDS_NETWORK_CARDS,           "Sie\9cov  karta(y)"
 IDS_NETWORK_CARDS_FORMAT,    "%u nainçtalovan."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index 08e575c..6d2645b 100644 (file)
@@ -70,5 +70,11 @@ IDS_PAGEFILE_LOC,           "
 IDS_DOMAIN,                 "Äîìåí"
 IDS_NETWORK_CARDS,          "Ìåðåæíà êàðòà(è)"
 IDS_NETWORK_CARDS_FORMAT,   "%u Installed."
+IDS_CONNECTION_NAME,         "Connection Name"
+IDS_STATUS,                  "Status"
+IDS_MEDIA_DISCONNECTED,      "Media disconnected"
+IDS_DHCP_ENABLED,            "DHCP Enabled"
+IDS_NO,                      "No"
+IDS_IP_ADDRESSES,            "IP address(es)"
 
 END
index c69f6f5..2a8f556 100644 (file)
@@ -1,35 +1,41 @@
-#define IDS_USAGE               1000
+#define IDS_USAGE                1000
 
-#define IDS_HOST_NAME           100
-#define IDS_OS_NAME             101
-#define IDS_OS_VERSION          102
-#define IDS_BUILD               103
-#define IDS_OS_BUILD_TYPE       104
-#define IDS_REG_OWNER           105
-#define IDS_REG_ORG             106
-#define IDS_PRODUCT_ID          107
-#define IDS_INST_DATE           108
-#define IDS_UP_TIME             109
-#define IDS_UP_TIME_FORMAT      110
-#define IDS_SYS_MANUFACTURER    111
-#define IDS_SYS_MODEL           112
-#define IDS_SYS_TYPE            113
-#define IDS_PROCESSORS          114
-#define IDS_PROCESSORS_FORMAT   115
-#define IDS_BIOS_DATE           116
-#define IDS_BIOS_VERSION        117
-#define IDS_ROS_DIR             118
-#define IDS_SYS_DIR             119
-#define IDS_BOOT_DEV            120
-#define IDS_SYS_LOCALE          121
-#define IDS_INPUT_LOCALE        122
-#define IDS_TOTAL_PHYS_MEM      123
-#define IDS_AVAIL_PHISICAL_MEM  124
-#define IDS_VIRT_MEM_MAX        125
-#define IDS_VIRT_MEM_AVAIL      126
-#define IDS_VIRT_MEM_INUSE      127
-#define IDS_PAGEFILE_LOC        128
-#define IDS_TIME_ZONE           129
-#define IDS_DOMAIN              130
-#define IDS_NETWORK_CARDS       131
+#define IDS_HOST_NAME            100
+#define IDS_OS_NAME              101
+#define IDS_OS_VERSION           102
+#define IDS_BUILD                103
+#define IDS_OS_BUILD_TYPE        104
+#define IDS_REG_OWNER            105
+#define IDS_REG_ORG              106
+#define IDS_PRODUCT_ID           107
+#define IDS_INST_DATE            108
+#define IDS_UP_TIME              109
+#define IDS_UP_TIME_FORMAT       110
+#define IDS_SYS_MANUFACTURER     111
+#define IDS_SYS_MODEL            112
+#define IDS_SYS_TYPE             113
+#define IDS_PROCESSORS           114
+#define IDS_PROCESSORS_FORMAT    115
+#define IDS_BIOS_DATE            116
+#define IDS_BIOS_VERSION         117
+#define IDS_ROS_DIR              118
+#define IDS_SYS_DIR              119
+#define IDS_BOOT_DEV             120
+#define IDS_SYS_LOCALE           121
+#define IDS_INPUT_LOCALE         122
+#define IDS_TOTAL_PHYS_MEM       123
+#define IDS_AVAIL_PHISICAL_MEM   124
+#define IDS_VIRT_MEM_MAX         125
+#define IDS_VIRT_MEM_AVAIL       126
+#define IDS_VIRT_MEM_INUSE       127
+#define IDS_PAGEFILE_LOC         128
+#define IDS_TIME_ZONE            129
+#define IDS_DOMAIN               130
+#define IDS_NETWORK_CARDS        131
 #define IDS_NETWORK_CARDS_FORMAT 132
+#define IDS_CONNECTION_NAME      133
+#define IDS_STATUS               134
+#define IDS_MEDIA_DISCONNECTED   135
+#define IDS_DHCP_ENABLED         136
+#define IDS_NO                   137
+#define IDS_IP_ADDRESSES         138
index d122160..42c65fa 100644 (file)
@@ -5,7 +5,9 @@
 #include "lang/en-US.rc"
 #include "lang/es-ES.rc"
 #include "lang/fr-FR.rc"
+#include "lang/it-IT.rc"
+#include "lang/no-NO.rc"
 #include "lang/pl-PL.rc"
 #include "lang/sk-SK.rc"
 #include "lang/uk-UA.rc"
-#include "lang/no-NO.rc"
+
index d9ebe2a..12818ec 100644 (file)
 #include <locale.h>
 #include <lm.h>
 #include <shlwapi.h>
+#include <iphlpapi.h>
+#include <winsock2.h>
 
 #include "resource.h"
 
-#define BUFFER_SIZE 32767
+#define BUFFER_SIZE 1024
 
-/* Load from resource and convert to OEM */
-static
-BOOL
-GetOemStrings(UINT rcID, LPWSTR OutMsg)
-{
-    if (LoadStringW(GetModuleHandle(NULL), rcID, OutMsg, BUFFER_SIZE))
-        return TRUE;
-
-    return FALSE;
-}
-
-/* Load data from registry */
+/* Load string from registry */
 static
 unsigned
 RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD cchBuf)
 {
-    DWORD dwBytes = cchBuf*sizeof(WCHAR), dwType;
+    DWORD dwBytes = cchBuf*sizeof(WCHAR), dwType = 0;
     unsigned cChars;
 
-    /* If SubKy is specified open it */
+    /* If SubKey is specified open it */
     if (lpSubKey && RegOpenKeyExW(hKey,
                                   lpSubKey,
                                   0,
@@ -60,6 +51,7 @@ RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD c
         return 0;
     }
 
+    /* Query registry value and check its type */
     if (RegQueryValueExW(hKey,
                          lpValueName,
                          NULL,
@@ -70,6 +62,11 @@ RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD c
         wprintf(L"Warning! Cannot query %s. Last error: %lu, type: %lu.\n", lpValueName, GetLastError(), dwType);
         dwBytes = 0;
     }
+    else
+    {
+        wcscpy(lpBuf, L"N/A");
+        dwBytes = 6;
+    }
 
     /* Close key if we opened it */
     if (lpSubKey)
@@ -87,6 +84,7 @@ RegGetSZ(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPWSTR lpBuf, DWORD c
     return cChars;
 }
 
+/* Load DWORD from registry */
 static
 BOOL
 RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
@@ -94,7 +92,7 @@ RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
     DWORD dwBytes = sizeof(*lpData), dwType;
     BOOL bRet = TRUE;
 
-    /* If SubKy is specified open it */
+    /* If SubKey is specified open it */
     if (lpSubKey && RegOpenKeyExW(hKey,
                                  lpSubKey,
                                  0,
@@ -105,6 +103,7 @@ RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
         return FALSE;
     }
 
+    /* Query registry value and check its type */
     if (RegQueryValueExW(hKey,
                          lpValueName,
                          NULL,
@@ -124,6 +123,7 @@ RegGetDWORD(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpValueName, LPDWORD lpData)
     return bRet;
 }
 
+/* Format bytes */
 static
 VOID
 FormatBytes(LPWSTR lpBuf, unsigned cBytes)
@@ -147,6 +147,7 @@ FormatBytes(LPWSTR lpBuf, unsigned cBytes)
     wcscpy(lpBuf + i, L" MB");
 }
 
+/* Format date and time */
 static
 VOID
 FormatDateTime(time_t Time, LPWSTR lpBuf)
@@ -181,30 +182,35 @@ static
 VOID
 Usage(VOID)
 {
-    WCHAR Buf[BUFFER_SIZE];
-
-    if(GetOemStrings(IDS_USAGE, Buf))
+    WCHAR Buf[4096];
+    if (LoadStringW(GetModuleHandle(NULL), IDS_USAGE, Buf, 4096))
         wprintf(L"%s", Buf);
 }
 
 static
 VOID
-PrintRow(UINT nTitleID, unsigned cxOffset, LPWSTR lpFormat, ...)
+PrintRow(UINT nTitleID, BOOL bIndent, LPWSTR lpFormat, ...)
 {
     WCHAR Buf[BUFFER_SIZE];
     va_list Args;
     unsigned c;
-    
+
     if (nTitleID)
     {
-        c = LoadStringW(GetModuleHandle(NULL), nTitleID, Buf, BUFFER_SIZE);
+        c = LoadStringW(GetModuleHandle(NULL), nTitleID, Buf, BUFFER_SIZE - 2);
         if (!c)
             return;
-        
-        wcscpy(Buf + c, L":");
+
+        wcscpy(Buf + c, L": ");
     } else
         Buf[0] = L'\0';
-    wprintf(L"%-32s ", Buf);
+
+    if (!bIndent)
+        wprintf(L"%-32s", Buf);
+    else if (Buf[0])
+        wprintf(L"%38s%-16s", L"", Buf);
+    else
+        wprintf(L"%38s", L"");
 
     va_start(Args, lpFormat);
     vwprintf(lpFormat, Args);
@@ -217,10 +223,10 @@ PrintRow(UINT nTitleID, unsigned cxOffset, LPWSTR lpFormat, ...)
 VOID
 AllSysInfo(VOID)
 {
-    DWORD dwCharCount = BUFFER_SIZE, dwTimestamp;
+    DWORD dwCharCount = BUFFER_SIZE, dwTimestamp, dwResult;
     OSVERSIONINFOW VersionInfo;
     SYSTEM_INFO SysInfo;
-    WCHAR Buf[BUFFER_SIZE], Tmp[BUFFER_SIZE], Msg[BUFFER_SIZE], szSystemDir[MAX_PATH];
+    WCHAR Buf[BUFFER_SIZE], Tmp[BUFFER_SIZE], szSystemDir[MAX_PATH];
     const WCHAR *lpcszSysType;
     LPWSTR lpBuffer;
     NETSETUP_JOIN_STATUS NetJoinStatus;
@@ -228,6 +234,8 @@ AllSysInfo(VOID)
     unsigned int cSeconds, i, j;
     TIME_ZONE_INFORMATION TimeZoneInfo;
     HKEY hKey;
+    PIP_ADAPTER_ADDRESSES pAdapters;
+    ULONG cbAdapters;
 
     if (!GetSystemDirectoryW(szSystemDir, sizeof(szSystemDir)/sizeof(szSystemDir[0])))
     {
@@ -242,7 +250,7 @@ AllSysInfo(VOID)
     if (!GetComputerNameW(Buf, &dwCharCount))
         wprintf(L"Error! GetComputerName failed.\n");
     else
-        PrintRow(IDS_HOST_NAME, 0, L"%s", Buf);
+        PrintRow(IDS_HOST_NAME, FALSE, L"%s", Buf);
 
     // open CurrentVersion key
     if(RegOpenKeyExW(HKEY_LOCAL_MACHINE,
@@ -257,7 +265,7 @@ AllSysInfo(VOID)
 
     //getting OS Name
     RegGetSZ(hKey, NULL, L"ProductName", Buf, BUFFER_SIZE);
-    PrintRow(IDS_OS_NAME, 0, L"%s", Buf);
+    PrintRow(IDS_OS_NAME, FALSE, L"%s", Buf);
 
     //getting OS Version
     ZeroMemory(&VersionInfo, sizeof(VersionInfo));
@@ -267,14 +275,14 @@ AllSysInfo(VOID)
     if (!LoadStringW(GetModuleHandle(NULL), IDS_BUILD, Tmp, BUFFER_SIZE))
         Tmp[0] = L'\0';
     PrintRow(IDS_OS_VERSION,
-             0,
-             L"%u.%u.%u %s %s %u",
-             (unsigned)VersionInfo.dwMajorVersion,
-             (unsigned)VersionInfo.dwMinorVersion,
-             (unsigned)VersionInfo.dwBuildNumber,
+             FALSE,
+             L"%lu.%lu.%lu %s %s %lu",
+             VersionInfo.dwMajorVersion,
+             VersionInfo.dwMinorVersion,
+             VersionInfo.dwBuildNumber,
              VersionInfo.szCSDVersion,
              Tmp,
-             (unsigned)VersionInfo.dwBuildNumber);
+             VersionInfo.dwBuildNumber);
 
     //getting OS Manufacturer
 
@@ -282,24 +290,24 @@ AllSysInfo(VOID)
 
     //getting OS Build Type
     RegGetSZ(hKey, NULL, L"CurrentType", Buf, BUFFER_SIZE);
-    PrintRow(IDS_OS_BUILD_TYPE, 0, L"%s", Buf);
+    PrintRow(IDS_OS_BUILD_TYPE, FALSE, L"%s", Buf);
 
     //getting Registered Owner
     RegGetSZ(hKey, NULL, L"RegisteredOwner", Buf, BUFFER_SIZE);
-    PrintRow(IDS_REG_OWNER, 0, L"%s", Buf);
+    PrintRow(IDS_REG_OWNER, FALSE, L"%s", Buf);
 
     //getting Registered Organization
     RegGetSZ(hKey, NULL, L"RegisteredOrganization", Buf, BUFFER_SIZE);
-    PrintRow(IDS_REG_ORG, 0, L"%s", Buf);
+    PrintRow(IDS_REG_ORG, FALSE, L"%s", Buf);
 
     //getting Product ID
     RegGetSZ(hKey, NULL, L"ProductId", Buf, BUFFER_SIZE);
-    PrintRow(IDS_PRODUCT_ID, 0, L"%s", Buf);
+    PrintRow(IDS_PRODUCT_ID, FALSE, L"%s", Buf);
 
     //getting Install Date
     RegGetDWORD(hKey, NULL, L"InstallDate", &dwTimestamp);
     FormatDateTime((time_t)dwTimestamp, Buf);
-    PrintRow(IDS_INST_DATE, 0, L"%s", Buf);
+    PrintRow(IDS_INST_DATE, FALSE, L"%s", Buf);
 
     // close Current Version key now
     RegCloseKey(hKey);
@@ -309,7 +317,7 @@ AllSysInfo(VOID)
     if (!LoadStringW(GetModuleHandle(NULL), IDS_UP_TIME_FORMAT, Tmp, BUFFER_SIZE))
         Tmp[0] = L'\0';
     swprintf(Buf, Tmp, cSeconds / (60*60*24), (cSeconds / (60*60)) % 24, (cSeconds / 60) % 60, cSeconds % 60);
-    PrintRow(IDS_UP_TIME, 0, L"%s", Buf);
+    PrintRow(IDS_UP_TIME, FALSE, L"%s", Buf);
 
     //getting System Manufacturer; HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation\Manufacturer for Win >= 6.0
     swprintf(Tmp, L"%s\\oeminfo.ini", szSystemDir);
@@ -319,7 +327,7 @@ AllSysInfo(VOID)
                              Buf,
                              sizeof(Buf)/sizeof(Buf[0]),
                              Tmp);
-    PrintRow(IDS_SYS_MANUFACTURER, 0, L"%s", Buf);
+    PrintRow(IDS_SYS_MANUFACTURER, FALSE, L"%s", Buf);
 
     //getting System Model; HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation\Model for Win >= 6.0
     GetPrivateProfileStringW(L"General",
@@ -328,7 +336,7 @@ AllSysInfo(VOID)
                              Buf,
                              sizeof(Buf)/sizeof(Buf[0]),
                              Tmp);
-    PrintRow(IDS_SYS_MODEL, 0, L"%s", Buf);
+    PrintRow(IDS_SYS_MODEL, FALSE, L"%s", Buf);
 
     //getting System type
     switch (SysInfo.wProcessorArchitecture)
@@ -346,13 +354,13 @@ AllSysInfo(VOID)
             lpcszSysType = L"Unknown";
             break;
     }
-    PrintRow(IDS_SYS_TYPE, 0, L"%s", lpcszSysType);
+    PrintRow(IDS_SYS_TYPE, FALSE, L"%s", lpcszSysType);
 
     //getting Processor(s)
     if (!LoadStringW(GetModuleHandle(NULL), IDS_PROCESSORS_FORMAT, Tmp, BUFFER_SIZE))
         Tmp[0] = L'\0';
     swprintf(Buf, Tmp, (unsigned)SysInfo.dwNumberOfProcessors);
-    PrintRow(IDS_PROCESSORS, 0, L"%s", Buf);
+    PrintRow(IDS_PROCESSORS, FALSE, L"%s", Buf);
     for(i = 0; i < (unsigned int)SysInfo.dwNumberOfProcessors; i++)
     {
         swprintf(Tmp, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\%u", i);
@@ -363,7 +371,7 @@ AllSysInfo(VOID)
             Buf[j++] = L' ';
         RegGetSZ(HKEY_LOCAL_MACHINE, Tmp, L"VendorIdentifier", Buf + j, BUFFER_SIZE - j);
         
-        PrintRow(0, 0, L"%s", Buf);
+        PrintRow(0, FALSE, L"%s", Buf);
     }
 
     //getting BIOS Version
@@ -372,7 +380,7 @@ AllSysInfo(VOID)
              L"SystemBiosVersion",
              Buf,
              BUFFER_SIZE);
-    PrintRow(IDS_BIOS_VERSION, 0, L"%s", Buf);
+    PrintRow(IDS_BIOS_VERSION, FALSE, L"%s", Buf);
 
     //gettings BIOS date
     RegGetSZ(HKEY_LOCAL_MACHINE,
@@ -380,13 +388,13 @@ AllSysInfo(VOID)
              L"SystemBiosDate",
              Buf,
              BUFFER_SIZE);
-    PrintRow(IDS_BIOS_DATE, 0, L"%s", Buf);
+    PrintRow(IDS_BIOS_DATE, FALSE, L"%s", Buf);
 
     //getting ReactOS Directory
     if (!GetWindowsDirectoryW(Buf, BUFFER_SIZE))
         wprintf(L"Error! GetWindowsDirectory failed.");
     else
-        PrintRow(IDS_ROS_DIR, 0, L"%s", Buf);
+        PrintRow(IDS_ROS_DIR, FALSE, L"%s", Buf);
 
     //getting System Directory
     PrintRow(IDS_SYS_DIR, 0, L"%s", szSystemDir);
@@ -397,7 +405,7 @@ AllSysInfo(VOID)
              L"SystemPartition",
              Buf,
              BUFFER_SIZE);
-    PrintRow(IDS_BOOT_DEV, 0, L"%s", Buf);
+    PrintRow(IDS_BOOT_DEV, FALSE, L"%s", Buf);
 
     //getting System Locale
     if (GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, LOCALE_ILANGUAGE, Tmp, BUFFER_SIZE))
@@ -412,7 +420,7 @@ AllSysInfo(VOID)
             if (lpBuffer)
                 SHLoadIndirectString(lpBuffer+1, lpBuffer+1, BUFFER_SIZE - (lpBuffer-Buf) - 1, NULL);
 
-            PrintRow(IDS_SYS_LOCALE, 0, L"%s", Buf);
+            PrintRow(IDS_SYS_LOCALE, FALSE, L"%s", Buf);
         }
 
     //getting Input Locale
@@ -432,7 +440,7 @@ AllSysInfo(VOID)
             if (lpBuffer)
                 SHLoadIndirectString(lpBuffer+1, lpBuffer+1, BUFFER_SIZE - (lpBuffer-Buf) - 1, NULL);
 
-            PrintRow(IDS_INPUT_LOCALE, 0, L"%s", Buf);
+            PrintRow(IDS_INPUT_LOCALE, FALSE, L"%s", Buf);
         }
 
     //getting Time Zone
@@ -448,16 +456,16 @@ AllSysInfo(VOID)
         unsigned i;
 
         /* Find current timezone */
-        dwCharCount = 256; // Windows seems to have a bug - it doesnt accept BUFFER_SIZE here
+        dwCharCount = BUFFER_SIZE;
         for(i = 0; RegEnumKeyExW(hKey, i, Tmp, &dwCharCount, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++i, dwCharCount = 255)
         {
             RegGetSZ(hKey, Tmp, L"Std", Buf, BUFFER_SIZE);
 
-            if(!wcscmp(Buf, TimeZoneInfo.StandardName))
+            if (!wcscmp(Buf, TimeZoneInfo.StandardName))
             {
                 RegGetSZ(hKey, Tmp, L"Display", Buf, BUFFER_SIZE);
 
-                PrintRow(IDS_TIME_ZONE, 0, L"%s", Buf);
+                PrintRow(IDS_TIME_ZONE, FALSE, L"%s", Buf);
 
                 break;
             }
@@ -468,23 +476,23 @@ AllSysInfo(VOID)
     //getting Total Physical Memory
     GlobalMemoryStatus(&MemoryStatus);
     FormatBytes(Buf, MemoryStatus.dwTotalPhys);
-    PrintRow(IDS_TOTAL_PHYS_MEM, 0, L"%s", Buf);
+    PrintRow(IDS_TOTAL_PHYS_MEM, FALSE, L"%s", Buf);
 
     //getting Available Physical Memory
     FormatBytes(Buf, MemoryStatus.dwAvailPhys);
-    PrintRow(IDS_AVAIL_PHISICAL_MEM, 0, L"%s", Buf);
+    PrintRow(IDS_AVAIL_PHISICAL_MEM, FALSE, L"%s", Buf);
 
     //getting Virtual Memory: Max Size
     FormatBytes(Buf, MemoryStatus.dwTotalVirtual);
-    PrintRow(IDS_VIRT_MEM_MAX, 0, L"%s", Buf);
+    PrintRow(IDS_VIRT_MEM_MAX, FALSE, L"%s", Buf);
 
     //getting Virtual Memory: Available
     FormatBytes(Buf, MemoryStatus.dwAvailVirtual);
-    PrintRow(IDS_VIRT_MEM_AVAIL, 0, L"%s", Buf);
+    PrintRow(IDS_VIRT_MEM_AVAIL, FALSE, L"%s", Buf);
 
     //getting Virtual Memory: In Use
     FormatBytes(Buf, MemoryStatus.dwTotalVirtual-MemoryStatus.dwAvailVirtual);
-    PrintRow(IDS_VIRT_MEM_INUSE, 0, L"%s", Buf);
+    PrintRow(IDS_VIRT_MEM_INUSE, FALSE, L"%s", Buf);
 
     //getting Page File Location(s)
     if (RegGetSZ(HKEY_LOCAL_MACHINE,
@@ -504,13 +512,14 @@ AllSysInfo(VOID)
             }
         }
 
-        PrintRow(IDS_PAGEFILE_LOC, 0, L"%s", Buf);
+        PrintRow(IDS_PAGEFILE_LOC, FALSE, L"%s", Buf);
     }
 
     //getting Domain
     if (NetGetJoinInformation (NULL, &lpBuffer, &NetJoinStatus) == NERR_Success)
     {
-        PrintRow(IDS_DOMAIN, 0, L"%s", lpBuffer);
+        if (NetJoinStatus == NetSetupWorkgroupName || NetJoinStatus == NetSetupDomainName)
+            PrintRow(IDS_DOMAIN, FALSE, L"%s", lpBuffer);
 
         NetApiBufferFree(lpBuffer);
     }
@@ -518,22 +527,100 @@ AllSysInfo(VOID)
     //getting Logon Server
 
     //getting NetWork Card(s)
-    if(GetOemStrings(IDS_NETWORK_CARDS, Msg))
+    cbAdapters = 4096;
+    pAdapters = malloc(cbAdapters);
+    while((dwResult = GetAdaptersAddresses(AF_UNSPEC, 0x0002, NULL, pAdapters, &cbAdapters)) == ERROR_BUFFER_OVERFLOW)
     {
+        cbAdapters += 4096;
+        pAdapters = (PIP_ADAPTER_ADDRESSES)realloc(pAdapters, cbAdapters);
+    }
 
+    if (dwResult == ERROR_SUCCESS)
+    {
+        PIP_ADAPTER_ADDRESSES pCurrentAdapter = pAdapters;
+        unsigned cAdapters = 0;
+
+        /* Count adapters */
+        for(i = 0; pCurrentAdapter; ++i)
+        {
+            if (pCurrentAdapter->IfType != 24 && pCurrentAdapter->IfType != 131)
+                ++cAdapters;
+            pCurrentAdapter = pCurrentAdapter->Next;
+        }
+            
+
+        /* Print adapters count */
+        if (!LoadStringW(GetModuleHandle(NULL), IDS_NETWORK_CARDS_FORMAT, Tmp, BUFFER_SIZE))
+            Tmp[0] = L'\0';
+        swprintf(Buf, Tmp, cAdapters);
+        PrintRow(IDS_NETWORK_CARDS, FALSE, L"%s", Buf);
+
+        /* Show information about each adapter */
+        pCurrentAdapter = pAdapters;
+        for(i = 0; pCurrentAdapter; ++i)
+        {
+            if (pCurrentAdapter->IfType != 24 && pCurrentAdapter->IfType != 131)//IF_TYPE_SOFTWARE_LOOPBACK)
+            {
+                PIP_ADAPTER_UNICAST_ADDRESS pAddress;
+
+                PrintRow(0, FALSE, L"[%02u]: %s", i + 1, pCurrentAdapter->Description);
+                PrintRow(IDS_CONNECTION_NAME, TRUE, L"%s", pCurrentAdapter->FriendlyName);
+                if (!(pCurrentAdapter->Flags & 0x0004))
+                {
+                    if (!LoadStringW(GetModuleHandle(NULL), IDS_NO, Buf, BUFFER_SIZE))
+                        Buf[0] = L'\0';
+                    PrintRow(IDS_DHCP_ENABLED, TRUE, Buf);
+                }
+                if (pCurrentAdapter->OperStatus == IfOperStatusDown)
+                {
+                    if (!LoadStringW(GetModuleHandle(NULL), IDS_MEDIA_DISCONNECTED, Buf, BUFFER_SIZE))
+                        Buf[0] = L'\0';
+                    PrintRow(IDS_STATUS, TRUE, Buf);
+                }
+                else
+                {
+                    if (!LoadStringW(GetModuleHandle(NULL), IDS_IP_ADDRESSES, Buf, BUFFER_SIZE))
+                        Buf[0] = L'\0';
+                    PrintRow(0, TRUE, Buf);
+                    pAddress = pCurrentAdapter->FirstUnicastAddress;
+                    for (j = 0; pAddress; ++j)
+                    {
+                        dwCharCount = BUFFER_SIZE;
+                        WSAAddressToStringW(pAddress->Address.lpSockaddr, pAddress->Address.iSockaddrLength, NULL, Buf, &dwCharCount);
+                        PrintRow(0, TRUE, L"[%02u]: %s", j + 1, Buf);
+                        pAddress = pAddress->Next;
+                    }
+                }
+            }
+            pCurrentAdapter = pCurrentAdapter->Next;
+        }
     }
+    free(pAdapters);
 }
 
 /* Main program */
 int
 main(int argc, char *argv[])
 {
+    WSADATA WsaData;
+    int i;
+
     setlocale(LC_ALL, "");
 
-    if (argc > 1 && (!strcmp(argv[1], "/?") || !strcmp(argv[1], "-?")))
+    WSAStartup(MAKEWORD(2, 2), &WsaData);
+
+    for (i = 1; i < argc; ++i)
     {
-        Usage();
-        return 0;
+        if (!strcmp(argv[i], "/?") || !strcmp(argv[i], "-?"))
+        {
+            Usage();
+            return 0;
+        }
+        else
+        {
+            printf("Unsupported argument: %s\n", argv[i]);
+            return -1;
+        }
     }
 
     AllSysInfo();
index fc3ef6d..8a4b0fb 100644 (file)
@@ -4,6 +4,8 @@
        <library>advapi32</library>
        <library>netapi32</library>
        <library>shlwapi</library>
+       <library>iphlpapi</library>
+       <library>ws2_32</library>
        <file>systeminfo.c</file>
        <file>systeminfo.rc</file>
        <file>rsrc.rc</file>