mirror of https://github.com/lianthony/NT4.0
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.
110 lines
2.6 KiB
110 lines
2.6 KiB
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1995 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and related
|
|
// electronic documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
#include "stdafx.h"
|
|
|
|
#ifdef AFX_CORE3_SEG
|
|
#pragma code_seg(AFX_CORE3_SEG)
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Help and other support
|
|
|
|
// Strings in format ".....%1 .... %2 ...." etc.
|
|
|
|
void AFXAPI AfxFormatStrings(CString& rString, UINT nIDS,
|
|
LPCTSTR const* rglpsz, int nString)
|
|
{
|
|
TCHAR szFormat[256];
|
|
if (!AfxLoadString(nIDS, szFormat) != 0)
|
|
{
|
|
TRACE1("Error: failed to load AfxFormatString string 0x%04x.\n", nIDS);
|
|
ASSERT(FALSE);
|
|
return;
|
|
}
|
|
AfxFormatStrings(rString, szFormat, rglpsz, nString);
|
|
}
|
|
|
|
void AFXAPI AfxFormatStrings(CString& rString, LPCTSTR lpszFormat,
|
|
LPCTSTR const* rglpsz, int nString)
|
|
{
|
|
// determine length of destination string
|
|
int nTotalLen = 0;
|
|
LPCTSTR pchSrc = lpszFormat;
|
|
while (*pchSrc != '\0')
|
|
{
|
|
if (pchSrc[0] == '%' && (pchSrc[1] >= '1' && pchSrc[1] <= '9'))
|
|
{
|
|
int i = pchSrc[1] - '1';
|
|
pchSrc += 2;
|
|
if (i >= nString)
|
|
++nTotalLen;
|
|
else if (rglpsz[i] != NULL)
|
|
nTotalLen += lstrlen(rglpsz[i]);
|
|
}
|
|
else
|
|
{
|
|
if (_istlead(*pchSrc))
|
|
++nTotalLen, ++pchSrc;
|
|
++pchSrc;
|
|
++nTotalLen;
|
|
}
|
|
}
|
|
|
|
pchSrc = lpszFormat;
|
|
LPTSTR pchDest = rString.GetBuffer(nTotalLen);
|
|
while (*pchSrc != '\0')
|
|
{
|
|
if (pchSrc[0] == '%' && (pchSrc[1] >= '1' && pchSrc[1] <= '9'))
|
|
{
|
|
int i = pchSrc[1] - '1';
|
|
pchSrc += 2;
|
|
if (i >= nString)
|
|
{
|
|
TRACE1("Error: illegal string index requested %d.\n", i);
|
|
*pchDest++ = '?';
|
|
}
|
|
else if (rglpsz[i] != NULL)
|
|
{
|
|
lstrcpy(pchDest, rglpsz[i]);
|
|
pchDest += lstrlen(pchDest);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_istlead(*pchSrc))
|
|
*pchDest++ = *pchSrc++; // copy first of 2 bytes
|
|
*pchDest++ = *pchSrc++;
|
|
}
|
|
}
|
|
rString.ReleaseBuffer((int)((LPCTSTR)pchDest - (LPCTSTR)rString));
|
|
// ReleaseBuffer will assert if we went too far
|
|
}
|
|
|
|
void AFXAPI AfxFormatString1(CString& rString, UINT nIDS, LPCTSTR lpsz1)
|
|
{
|
|
AfxFormatStrings(rString, nIDS, &lpsz1, 1);
|
|
}
|
|
|
|
void AFXAPI AfxFormatString2(CString& rString, UINT nIDS, LPCTSTR lpsz1,
|
|
LPCTSTR lpsz2)
|
|
{
|
|
LPCTSTR rglpsz[2];
|
|
rglpsz[0] = lpsz1;
|
|
rglpsz[1] = lpsz2;
|
|
AfxFormatStrings(rString, nIDS, rglpsz, 2);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|