Index: base/applications/network/wlanconf/CMakeLists.txt =================================================================== --- base/applications/network/wlanconf/CMakeLists.txt (revision 57528) +++ base/applications/network/wlanconf/CMakeLists.txt (working copy) @@ -4,5 +4,5 @@ ${REACTOS_SOURCE_DIR}/include/reactos/drivers/ndisuio) add_executable(wlanconf wlanconf.c wlanconf.rc) set_module_type(wlanconf win32cui) -add_importlibs(wlanconf msvcrt iphlpapi kernel32) +add_importlibs(wlanconf msvcrt user32 iphlpapi kernel32) add_cd_file(TARGET wlanconf DESTINATION reactos/system32 FOR all) Index: base/applications/network/wlanconf/lang/en_us.rc =================================================================== --- base/applications/network/wlanconf/lang/en_us.rc (revision 0) +++ base/applications/network/wlanconf/lang/en_us.rc (working copy) @@ -0,0 +1,40 @@ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE DISCARDABLE +BEGIN +IDS_USAGE, "\nConfigure a WLAN adapter.\n\n\ +WLANCONF [-c SSID [-w WEP] [-a]] [-d] [-s]\n\n\ +\t-c SSID\t\tConnects to a supplied SSID,\n\ +\t-w WEP\t\tSpecifies a WEP key to use.\n\ +\t-a\t\tSpecifies the target network is ad-hoc\n\ +\t-d\t\tDisconnects from the current AP.\n\ +\t-s\t\tScans and displays a list of access points\n\ +\t\t\tin range.\n\n\ +Passing no parameters will print information about the current WLAN connection\n" +/* === */ +IDS_NO_NETWORK, "No networks found in range\n" +IDS_NO_WLAN_ADAPTER, "Unable to find a WLAN adapter on the system\n" +IDS_SUCCESS, "The operation completed successfully.\n" +IDS_WLAN_DISCONNECT, "\nWLAN disconnected\n" +/* === */ +IDS_MSG_WEP_ENABLED, "WEP enabled: %s\n" +IDS_MSG_NETWORK_MODE, "Network mode: %s\n" +IDS_MSG_CURRENT_WIRELESS, "\nCurrent wireless configuration information:\n\n" +IDS_MSG_ENCRYPTED, "Encrypted: %s\n" +IDS_MSG_NETWORK_TYPE, "Network Type: %s\n" +IDS_MSG_RSSI, "RSSI: %i dBm\n" +IDS_MSG_SUPPORT_RATE, "Supported Rates (Mbps): " +IDS_MSG_TRANSMISSION_POWER, "Transmission power: %d mW\n" +IDS_MSG_ATTENNA_COUNT, "Antenna count: %d\n" +IDS_MSG_TRANSMIT_ATTENNA, "Transmit attenna: %d\n" +IDS_MSG_TRANSMIT_ATTENNA_ANY, "Transmit attenna: Any\n" +IDS_MSG_RECEIVE_ATTENNA, "Receive attenna: %d\n" +IDS_MSG_RECEIVE_ATTENNA_ANY, "Receive attenna: Any\n" +IDS_MSG_FRAGMENT_THRESHOLD, "Fragmentation threshold: %d bytes\n" +IDS_MSG_RTS_THRESHOLD, "RTS threshold: %d bytes\n" +/* === */ +IDS_YES, "Yes" +IDS_NO, "No" +IDS_NET_ADHOC, "Adhoc" +IDS_NET_INFRASTRUCTURE, "Infrastructure" +END Index: base/applications/network/wlanconf/resource.h =================================================================== --- base/applications/network/wlanconf/resource.h (revision 0) +++ base/applications/network/wlanconf/resource.h (working copy) @@ -0,0 +1,24 @@ +#define IDS_USAGE 0 +#define IDS_NO_NETWORK 1 +#define IDS_NO_WLAN_ADAPTER 2 +#define IDS_SUCCESS 3 +#define IDS_WLAN_DISCONNECT 4 +#define IDS_MSG_WEP_ENABLED 5 +#define IDS_MSG_NETWORK_MODE 6 +#define IDS_MSG_CURRENT_WIRELESS 7 +#define IDS_MSG_ENCRYPTED 8 +#define IDS_MSG_NETWORK_TYPE 9 +#define IDS_MSG_RSSI 10 +#define IDS_MSG_SUPPORT_RATE 11 +#define IDS_MSG_TRANSMISSION_POWER 12 +#define IDS_MSG_ATTENNA_COUNT 13 +#define IDS_MSG_TRANSMIT_ATTENNA 14 +#define IDS_MSG_TRANSMIT_ATTENNA_ANY 15 +#define IDS_MSG_RECEIVE_ATTENNA 16 +#define IDS_MSG_RECEIVE_ATTENNA_ANY 17 +#define IDS_MSG_FRAGMENT_THRESHOLD 18 +#define IDS_MSG_RTS_THRESHOLD 19 +#define IDS_YES 20 +#define IDS_NO 21 +#define IDS_NET_ADHOC 22 +#define IDS_NET_INFRASTRUCTURE 23 \ No newline at end of file Index: base/applications/network/wlanconf/wlanconf.c =================================================================== --- base/applications/network/wlanconf/wlanconf.c (revision 57528) +++ base/applications/network/wlanconf/wlanconf.c (working copy) @@ -14,6 +14,10 @@ #include #include +#include "resource.h" + +#define MAX_BUFFER_SIZE 5024 + BOOL bScan = FALSE; BOOL bConnect = FALSE; @@ -23,6 +27,28 @@ BOOL bDisconnect = FALSE; +/* This takes strings from a resource stringtable and outputs it to +the command prompt. */ +VOID PrintResourceString(INT resID, ...) +{ + TCHAR tmpBuffer[MAX_BUFFER_SIZE]; + va_list arg_ptr; + + va_start(arg_ptr, resID); + LoadString(GetModuleHandle(NULL), resID, tmpBuffer, MAX_BUFFER_SIZE); + _vtprintf(tmpBuffer, arg_ptr); + va_end(arg_ptr); +} + +TCHAR GetResourceString(INT resID) +{ + TCHAR tmpBuffer[MAX_BUFFER_SIZE]; + + LoadString(GetModuleHandle(NULL), resID, tmpBuffer, MAX_BUFFER_SIZE); + + return *tmpBuffer; +} + DWORD DoFormatMessage(DWORD ErrorCode) { LPVOID lpMsgBuf; @@ -83,7 +109,7 @@ CloseHandle(hDriver); return INVALID_HANDLE_VALUE; } - + return hDriver; } @@ -256,7 +282,7 @@ if (!bSuccess) return FALSE; - _tprintf(_T("The operation completed successfully.\n")); + PrintResourceString(IDS_SUCCESS); return TRUE; } @@ -360,13 +386,13 @@ NULL); if (SsidInfo->SsidLength == 0 || !bSuccess) { - _tprintf(_T("\nWLAN disconnected\n")); + PrintResourceString(IDS_WLAN_DISCONNECT); HeapFree(GetProcessHeap(), 0, QueryOid); return TRUE; } else { - _tprintf(_T("\nCurrent wireless configuration information:\n\n")); + PrintResourceString(IDS_MSG_CURRENT_WIRELESS); } _tprintf(_T("SSID: %s\n"), SsidBuffer); @@ -405,7 +431,7 @@ return FALSE; } - _tprintf(_T("Network mode: %s\n"), (*(PUINT)QueryOid->Data == Ndis802_11IBSS) ? "Adhoc" : "Infrastructure"); + PrintResourceString(IDS_MSG_NETWORK_MODE, ((*(PUINT)QueryOid->Data == Ndis802_11IBSS) ? "Adhoc" : "Infrastructure")); QueryOid->Oid = OID_802_11_WEP_STATUS; @@ -423,9 +449,9 @@ return FALSE; } - _tprintf(_T("WEP enabled: %s\n"), (*(PUINT)QueryOid->Data == Ndis802_11WEPEnabled) ? "Yes" : "No"); + PrintResourceString(IDS_MSG_WEP_ENABLED, ((*(PUINT)QueryOid->Data == Ndis802_11WEPEnabled) ? "Yes" : "No")); - _tprintf("\n"); + _tprintf(_T("\n")); QueryOid->Oid = OID_802_11_RSSI; bSuccess = DeviceIoControl(hAdapter, @@ -455,7 +481,8 @@ if (bSuccess) { /* This OID is optional */ - _tprintf(_T("Transmission power: %d mW\n"), *(PUINT)QueryOid->Data); + + PrintResourceString(IDS_MSG_TRANSMISSION_POWER, *(PUINT)QueryOid->Data); } _tprintf(_T("\n")); @@ -473,7 +500,7 @@ if (bSuccess) { /* This OID is optional */ - _tprintf(_T("Antenna count: %d\n"), *(PUINT)QueryOid->Data); + PrintResourceString(IDS_MSG_ATTENNA_COUNT, *(PUINT)QueryOid->Data); } QueryOid->Oid = OID_802_11_TX_ANTENNA_SELECTED; @@ -491,9 +518,9 @@ UINT TransmitAntenna = *(PUINT)QueryOid->Data; if (TransmitAntenna != 0xFFFFFFFF) - _tprintf(_T("Transmit antenna: %d\n"), TransmitAntenna); + PrintResourceString(IDS_MSG_TRANSMIT_ATTENNA, TransmitAntenna); else - _tprintf(_T("Transmit antenna: Any\n")); + PrintResourceString(IDS_MSG_TRANSMIT_ATTENNA_ANY); } QueryOid->Oid = OID_802_11_RX_ANTENNA_SELECTED; @@ -511,9 +538,9 @@ UINT ReceiveAntenna = *(PUINT)QueryOid->Data; if (ReceiveAntenna != 0xFFFFFFFF) - _tprintf(_T("Receive antenna: %d\n"), ReceiveAntenna); + PrintResourceString(IDS_MSG_RECEIVE_ATTENNA, ReceiveAntenna); else - _tprintf(_T("Receive antenna: Any\n")); + PrintResourceString(IDS_MSG_RECEIVE_ATTENNA_ANY); } _tprintf(_T("\n")); @@ -531,7 +558,7 @@ if (bSuccess) { /* This OID is optional */ - _tprintf(_T("Fragmentation threshold: %d bytes\n"), *(PUINT)QueryOid->Data); + PrintResourceString(IDS_MSG_FRAGMENT_THRESHOLD, *(PUINT)QueryOid->Data); } QueryOid->Oid = OID_802_11_RTS_THRESHOLD; @@ -547,7 +574,7 @@ if (bSuccess) { /* This OID is optional */ - _tprintf(_T("RTS threshold: %d bytes\n"), *(PUINT)QueryOid->Data); + PrintResourceString(IDS_MSG_RTS_THRESHOLD, *(PUINT)QueryOid->Data); } HeapFree(GetProcessHeap(), 0, QueryOid); @@ -720,7 +747,7 @@ if (!bSuccess) return FALSE; - _tprintf(_T("The operation completed successfully.\n")); + PrintResourceString(IDS_SUCCESS); return TRUE; } @@ -774,7 +801,7 @@ if (BssidList->NumberOfItems == 0) { - _tprintf(_T("No networks found in range\n")); + PrintResourceString(IDS_NO_NETWORK); } else { @@ -807,13 +834,10 @@ } _tprintf(_T("\n")); - _tprintf(_T("Encrypted: %s\n" - "Network Type: %s\n" - "RSSI: %i dBm\n" - "Supported Rates (Mbps): "), - BssidInfo->Privacy == 0 ? "No" : "Yes", - NetworkType == Ndis802_11IBSS ? "Adhoc" : "Infrastructure", - (int)Rssi); + PrintResourceString(IDS_MSG_ENCRYPTED, (BssidInfo->Privacy == 0 ? GetResourceString(IDS_NO) : GetResourceString(IDS_YES))); + PrintResourceString(IDS_MSG_NETWORK_TYPE, (NetworkType == Ndis802_11IBSS ? GetResourceString(IDS_NET_ADHOC) : GetResourceString(IDS_NET_INFRASTRUCTURE))); + PrintResourceString(IDS_MSG_RSSI, (int)Rssi); + PrintResourceString(IDS_MSG_SUPPORT_RATE); for (j = 0; j < NDIS_802_11_LENGTH_RATES; j++) { @@ -850,18 +874,11 @@ VOID Usage() { - _tprintf(_T("\nConfigures a WLAN adapter.\n\n" - "WLANCONF [-c SSID [-w WEP] [-a]] [-d] [-s]\n\n" - " -c SSID Connects to a supplied SSID.\n" - " -w WEP Specifies a WEP key to use.\n" - " -a Specifies the target network is ad-hoc\n" - " -d Disconnects from the current AP.\n" - " -s Scans and displays a list of access points in range.\n\n" - " Passing no parameters will print information about the current WLAN connection\n")); + PrintResourceString(IDS_USAGE); } -BOOL ParseCmdline(int argc, char* argv[]) +BOOL ParseCmdline(int argc, TCHAR* argv[]) { INT i; @@ -884,7 +901,7 @@ return FALSE; } bConnect = TRUE; - sSsid = argv[++i]; + sSsid = (char*)argv[++i]; break; case 'w': if (i == argc - 1) @@ -892,7 +909,7 @@ Usage(); return FALSE; } - sWepKey = argv[++i]; + sWepKey = (char*)argv[++i]; break; case 'a': bAdhoc = TRUE; @@ -913,7 +930,7 @@ return TRUE; } -int main(int argc, char* argv[]) +int _tmain(int argc, TCHAR *argv[]) { HANDLE hAdapter; IP_ADAPTER_INDEX_MAP IpInfo; @@ -923,7 +940,7 @@ if (!OpenWlanAdapter(&hAdapter, &IpInfo)) { - _tprintf(_T("Unable to find a WLAN adapter on the system\n")); + PrintResourceString(IDS_NO_WLAN_ADAPTER); return -1; } Index: base/applications/network/wlanconf/wlanconf.rc =================================================================== --- base/applications/network/wlanconf/wlanconf.rc (revision 57528) +++ base/applications/network/wlanconf/wlanconf.rc (working copy) @@ -1,3 +1,9 @@ +#include "resource.h" + +#include + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + #define REACTOS_STR_FILE_DESCRIPTION "ReactOS WLAN Configuration Tool\0" #define REACTOS_STR_INTERNAL_NAME "wlanconf\0" #define REACTOS_STR_ORIGINAL_FILENAME "wlanconf.exe\0" @@ -4,4 +10,8 @@ #define REACTOS_STR_ORIGINAL_COPYRIGHT "Cameron Gutman (cameron.gutman@reactos.org)\0" #include - +// UTF-8 +#pragma code_page(65001) +#ifdef LANGUAGE_EN_US + #include "lang/en_us.rc" +#endif