Windows NT 4.0 source code leak
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

// 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);
}
/////////////////////////////////////////////////////////////////////////////