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.
83 lines
2.0 KiB
83 lines
2.0 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// 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;
|
|
}
|
|
}
|
|
|