windows-nt/Source/XPSP1/NT/net/rras/cm/cmmon/utility.cpp
2020-09-26 16:20:57 +08:00

84 lines
2 KiB
C++

//+----------------------------------------------------------------------------
//
// File: utility.cpp
//
// Module: CMMON32.EXE
//
// Synopsis: Utility functions for cmmon32.exe.
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: quintinb Created Header 08/16/99
//
//+----------------------------------------------------------------------------
#include "cmmaster.h"
#include "cm_misc.h"
#include <stdio.h>
#include "resource.h"
#include <stdlib.h>
//+----------------------------------------------------------------------------
//
// Function: FmtNum
//
// Synopsis: Formats a number according to current locale
//
// Arguments: DWORD dwNum - Number to be formatted
// LPTSTR pszNum - Buffer to receive formatted output
// DWORD dwNumSize - Size of buffer
//
// Returns: Nothing
//
// History: nickball Created Header 3/30/98
//
//+----------------------------------------------------------------------------
void FmtNum(DWORD dwNum, LPSTR pszNum, DWORD dwNumSize)
{
static BOOL bLocaleInit = FALSE;
static UINT nDecimalDigits;
DWORD dwNumLen;
CHAR szRawNum[MAX_PATH];
if (!bLocaleInit)
{
int iRes;
bLocaleInit = TRUE;
iRes = GetLocaleInfoA(LOCALE_USER_DEFAULT,
LOCALE_IDIGITS,
szRawNum,
(sizeof(szRawNum) / sizeof(CHAR)) - 1);
#ifdef DEBUG
if (!iRes)
{
CMTRACE1(TEXT("FmtNum() GetLocaleInfo() failed, GLE=%u."), GetLastError());
}
#endif
nDecimalDigits = (UINT)CmAtolA(szRawNum);
}
wsprintfA(szRawNum, "%u", dwNum);
GetNumberFormatA(LOCALE_USER_DEFAULT,
0,
szRawNum,
NULL,
pszNum,
(dwNumSize / sizeof(CHAR)) - 1);
dwNumLen = lstrlenA(pszNum);
if (nDecimalDigits && (dwNumLen > nDecimalDigits) && !CmIsDigitA(pszNum+dwNumLen - nDecimalDigits - 1))
{
pszNum[dwNumLen - nDecimalDigits - 1] = 0;
}
else
{
CMTRACE(TEXT("FmtNum() unexpected decimal output."));
bLocaleInit = FALSE;
}
}