You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
4.3 KiB
211 lines
4.3 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
nls.c
|
|
|
|
Abstract:
|
|
|
|
This module contains functions needed for the internationalisation
|
|
of the TCP/IP utilities.
|
|
|
|
Author:
|
|
|
|
Ronald Meijer (ronaldm) Nov 8, 1992
|
|
|
|
Revision History:
|
|
|
|
Who When What
|
|
-------- -------- ----------------------------------------------
|
|
ronaldm 11-8-92 created
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
|
|
#include <io.h>
|
|
#include <stdio.h>
|
|
#include <windef.h>
|
|
#include <winbase.h>
|
|
#include <winuser.h>
|
|
|
|
#include <nls.h>
|
|
|
|
// see comment in nls.h
|
|
//
|
|
HMODULE NlsMsgSourcemModuleHandle = NULL;
|
|
|
|
/*** NlsPutMsg - Print a message to a handle
|
|
*
|
|
* Purpose:
|
|
* PutMsg takes the given message number from the
|
|
* message table resource, and displays it on the requested
|
|
* handle with the given parameters (optional)
|
|
*
|
|
* UINT PutMsg(UINT Handle, UINT MsgNum, ... )
|
|
*
|
|
* Args:
|
|
* Handle - the handle to print to
|
|
* MsgNum - the number of the message to print
|
|
* Arg1 [Arg2...] - additonal arguments for the message as necessary
|
|
*
|
|
* Returns:
|
|
* The number of characters printed.
|
|
*
|
|
*/
|
|
|
|
UINT
|
|
NlsPutMsg (
|
|
IN UINT Handle,
|
|
IN UINT MsgNumber,
|
|
IN ...)
|
|
{
|
|
UINT msglen;
|
|
VOID * vp;
|
|
va_list arglist;
|
|
DWORD StrLen;
|
|
|
|
va_start(arglist, MsgNumber);
|
|
if (!(msglen = FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE,
|
|
NlsMsgSourcemModuleHandle,
|
|
MsgNumber,
|
|
0L, // Default country ID.
|
|
(LPTSTR)&vp,
|
|
0,
|
|
&arglist)))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// Convert vp to oem
|
|
StrLen=strlen(vp);
|
|
CharToOemBuff((LPCTSTR)vp,(LPSTR)vp,StrLen);
|
|
|
|
msglen = _write(Handle, vp, StrLen);
|
|
LocalFree(vp);
|
|
|
|
return msglen;
|
|
}
|
|
|
|
/*** NlsPerror - NLS compliant version of perror()
|
|
*
|
|
* Purpose:
|
|
* NlsPerror takes a messagetable resource ID code, and an error
|
|
* value (This function replaces perror()), loads the string
|
|
* from the resource, and passes it with the error code to s_perror()
|
|
*
|
|
* void NlsPerror(UINT usMsgNum, int nError)
|
|
*
|
|
* Args:
|
|
*
|
|
* usMsgNum The message ID
|
|
* nError Typically returned from GetLastError()
|
|
*
|
|
* Returns:
|
|
* Nothing.
|
|
*
|
|
*/
|
|
extern void s_perror(
|
|
char *yourmsg, // your message to be displayed
|
|
int lerrno // errno to be converted
|
|
);
|
|
VOID
|
|
NlsPerror (
|
|
IN UINT usMsgNum,
|
|
IN INT nError)
|
|
{
|
|
VOID * vp;
|
|
UINT msglen;
|
|
|
|
if (!(msglen = FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE,
|
|
NlsMsgSourcemModuleHandle,
|
|
usMsgNum,
|
|
0L, // Default country ID.
|
|
(LPTSTR)&vp,
|
|
0,
|
|
NULL)))
|
|
{
|
|
return;
|
|
}
|
|
|
|
s_perror(vp, nError);
|
|
LocalFree(vp);
|
|
}
|
|
|
|
UINT
|
|
NlsSPrintf (
|
|
IN UINT usMsgNum,
|
|
OUT char* pszBuffer,
|
|
IN DWORD cbSize,
|
|
IN ...)
|
|
/*++
|
|
Prints the given message into the buffer supplied.
|
|
|
|
Arguments:
|
|
usMsgNum message number for resource string.
|
|
pszBuffer buffer into which we need to print the string
|
|
cbSize size of buffer
|
|
... optional arguments
|
|
|
|
Returns:
|
|
Size of the message printed.
|
|
|
|
History:
|
|
MuraliK 10-19-94
|
|
--*/
|
|
{
|
|
UINT msglen;
|
|
|
|
va_list arglist;
|
|
|
|
va_start(arglist, cbSize);
|
|
|
|
msglen = FormatMessage(
|
|
FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_MAX_WIDTH_MASK,
|
|
NlsMsgSourcemModuleHandle,
|
|
usMsgNum,
|
|
0L,
|
|
(LPTSTR) pszBuffer,
|
|
cbSize,
|
|
&arglist);
|
|
|
|
va_end(arglist);
|
|
return msglen;
|
|
}
|
|
|
|
/*** ConvertArgvToOem
|
|
*
|
|
* Purpose:
|
|
* Convert all the command line arguments from Ansi to Oem.
|
|
*
|
|
* Args:
|
|
*
|
|
* argc Argument count
|
|
* argv[] Array of command-line arguments
|
|
*
|
|
* Returns:
|
|
* Nothing.
|
|
*
|
|
*
|
|
*/
|
|
|
|
VOID
|
|
ConvertArgvToOem(
|
|
int argc,
|
|
char* argv[]
|
|
)
|
|
{
|
|
#if 0
|
|
Bug 84807. Removed workaround of needing to convert args to Oem by placing
|
|
conversion immediately before dumping.
|
|
|
|
int i;
|
|
|
|
for (i=1; i<argc; ++i)
|
|
CharToOemA(argv[i], argv[i]);
|
|
#endif
|
|
}
|