2010-10-25 15:21 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/src/rtl/hbstrfmt.c
    + added support for 'x' and 'X' specifiers in hb_strFormat() function
This commit is contained in:
Przemyslaw Czerpak
2010-10-25 13:21:18 +00:00
parent 421ee95b4f
commit b762a398eb
2 changed files with 39 additions and 2 deletions

View File

@@ -16,6 +16,10 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-10-25 15:21 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/hbstrfmt.c
+ added support for 'x' and 'X' specifiers in hb_strFormat() function
2010-10-25 13:31 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbqt/qtgui/hbqt_registersignals.cpp
* contrib/hbqt/qtcore/hbqt_registersignals.cpp

View File

@@ -72,6 +72,32 @@ static void bufadd( BUFFERTYPE * pBuf, const char * pAdd, HB_SIZE nLen )
pBuf->pData[ pBuf->nLen ] = '\0';
}
static void hb_itemHexStr( PHB_ITEM pItem, char * pStr, HB_BOOL fUpper )
{
HB_MAXUINT nValue, nTmp;
int iLen;
nValue = nTmp = hb_itemGetNInt( pItem );
iLen = 0;
do
{
++iLen;
nTmp >>= 4;
}
while( nTmp );
pStr[ iLen ] = '\0';
do
{
int iDigit = ( int ) ( nValue & 0x0F );
pStr[ --iLen ] = ( char ) ( iDigit + ( iDigit < 10 ? '0' :
( fUpper ? 'A' : 'a' ) - 10 ) );
nValue >>= 4;
}
while( iLen );
}
PHB_ITEM hb_strFormat( PHB_ITEM pItemReturn, PHB_ITEM pItemFormat, int iCount, PHB_ITEM * pItemArray )
{
BUFFERTYPE buffer;
@@ -170,7 +196,8 @@ PHB_ITEM hb_strFormat( PHB_ITEM pItemReturn, PHB_ITEM pItemFormat, int iCount, P
}
/* Parse specifier */
if( *pFmt == 'c' || *pFmt == 'd' || *pFmt == 'f' || *pFmt == 's' )
if( *pFmt == 'c' || *pFmt == 'd' || *pFmt == 'x' || *pFmt == 'X' ||
*pFmt == 'f' || *pFmt == 's' )
{
if( iParamNo == -1 )
iParamNo = ++iParam;
@@ -211,6 +238,8 @@ PHB_ITEM hb_strFormat( PHB_ITEM pItemReturn, PHB_ITEM pItemFormat, int iCount, P
}
case 'd':
case 'x':
case 'X':
{
char * pStr = NULL;
const char * pStr2;
@@ -221,7 +250,11 @@ PHB_ITEM hb_strFormat( PHB_ITEM pItemReturn, PHB_ITEM pItemFormat, int iCount, P
{
iSize = sizeof( HB_MAXINT ) * 3 + 1;
pStr2 = pStr = ( char * ) hb_xgrab( iSize + 1 );
hb_itemStrBuf( pStr, pItem, iSize, 0 );
if( *pFmt == 'd' )
hb_itemStrBuf( pStr, pItem, iSize, 0 );
else
hb_itemHexStr( pItem, pStr, *pFmt == 'X' );
while( *pStr2 == ' ' )
pStr2++;
iSize = ( int ) strlen( pStr2 );