Leaked source code of windows server 2003
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

/*++
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
}