2008-06-12 11:02 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/rtl/gtwvt/gtwvt.c
% Minor optimization in new screen marking code.
* contrib/hbmisc/strfmt.c
* Cleanup, optimization, some internal limits removed.
* contrib/hbmisc/spd.c
* Former _SPD() function renamed to SQL_SPRINTF()
This commit is contained in:
@@ -8,6 +8,16 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-06-12 11:02 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* source/rtl/gtwvt/gtwvt.c
|
||||
% Minor optimization in new screen marking code.
|
||||
|
||||
* contrib/hbmisc/strfmt.c
|
||||
* Cleanup, optimization, some internal limits removed.
|
||||
|
||||
* contrib/hbmisc/spd.c
|
||||
* Former _SPD() function renamed to SQL_SPRINTF()
|
||||
|
||||
2008-06-12 00:40 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com
|
||||
* harbour/source/rtl/gtwvt/gtwvt.c
|
||||
! Completely removed flickering under Mark and Copy operation
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* _SPD() function
|
||||
* SQL_SPRINTF() function
|
||||
*
|
||||
* Copyright 2008 Xavi <jarabal/at/gmail.com>
|
||||
*
|
||||
@@ -127,7 +127,7 @@ static ULONG SCItm( char *cBuffer, ULONG ulMaxBuf, char *cParFrm, int iCOut, int
|
||||
/*******************************************************************************
|
||||
* ANSI C sprintf() for ANSI SQL with DATE, DATETIME, LOGICAL, NIL, NUMERIC
|
||||
* ------------------------------------------------------------------------
|
||||
* cRes := _SPD( cFrm, ... )
|
||||
* cRes := SQL_SPRINTF( cFrm, ... )
|
||||
* cFrm : %s for DATE = YYYY-MM-DD, DATETIME = YYYY-MM-DD HH:MM:SS
|
||||
* %t for DATE = 'YYYY-MM-DD', DATETIME = 'YYYY-MM-DD HH:MM:SS'
|
||||
* %t for STRING = 'String''s ANSI SQL'
|
||||
@@ -137,11 +137,11 @@ static ULONG SCItm( char *cBuffer, ULONG ulMaxBuf, char *cParFrm, int iCOut, int
|
||||
*
|
||||
* NOTE .-
|
||||
* Remove C ESC sequences and converts them to Clipper chars in cRes.
|
||||
* OutStd( _SPD( 'Hello\nworld!' ) ) => like printf( "Hello\nworld!" );
|
||||
* OutStd( SQL_SPRINTF( 'Hello\nworld!' ) ) => like printf( "Hello\nworld!" );
|
||||
* Accepts conversion inside if variable is passed by reference.
|
||||
* Local xDate := Date(); _SPD('%s', @xDate) => xDate == '2008-05-19'
|
||||
* Local xDate := Date(); SQL_SPRINTF('%s', @xDate) => xDate == '2008-05-19'
|
||||
* Support index & indirect arguments C99.
|
||||
* cRes := _SPD( "Phi = %2$0*3$.*1$f \n", 10, (1 + 5**0.5) / 2, 13 )
|
||||
* cRes := SQL_SPRINTF( "Phi = %2$0*3$.*1$f \n", 10, (1 + 5**0.5) / 2, 13 )
|
||||
*******************************************************************************/
|
||||
|
||||
#define DK_INCRES 1024
|
||||
@@ -150,10 +150,10 @@ static ULONG SCItm( char *cBuffer, ULONG ulMaxBuf, char *cParFrm, int iCOut, int
|
||||
#define DK_FRMTIM "HH:MM:SS"
|
||||
|
||||
#if defined( __XHARBOUR__ ) && ! defined( HB_ERR_FUNCNAME )
|
||||
#define HB_ERR_FUNCNAME "C_SPRINTF"
|
||||
#define HB_ERR_FUNCNAME "SQL_SPRINTF"
|
||||
#endif
|
||||
|
||||
HB_FUNC( C_SPRINTF )
|
||||
HB_FUNC( SQL_SPRINTF )
|
||||
{
|
||||
ULONG ulItmFrm;
|
||||
char *cRes, *cItmFrm;
|
||||
|
||||
@@ -53,110 +53,71 @@
|
||||
#include "hbapi.h"
|
||||
|
||||
#define HB_STRFORMAT_PARNUM_MAX_ 9
|
||||
#define POS_TO_PAR( pos ) ( pos + 2 )
|
||||
|
||||
HB_FUNC( STRFORMAT )
|
||||
{
|
||||
char* pszMask = hb_parc(1);
|
||||
ULONG nMaskLen = hb_parclen(1);
|
||||
ULONG nMaskPos;
|
||||
ULONG nParNum = hb_pcount();
|
||||
ULONG nLenTable [HB_STRFORMAT_PARNUM_MAX_];
|
||||
char* pszVarTable [HB_STRFORMAT_PARNUM_MAX_];
|
||||
|
||||
ULONG nRetValLen;
|
||||
char* pszRetVal;
|
||||
char* pszRetValSave;
|
||||
|
||||
ULONG tmp;
|
||||
|
||||
if (nParNum < 1)
|
||||
if( nParNum >= 1 )
|
||||
{
|
||||
hb_retc("");
|
||||
return;
|
||||
}
|
||||
char * pszMask = hb_parc( 1 );
|
||||
ULONG nMaskLen = hb_parclen( 1 );
|
||||
ULONG nMaskPos;
|
||||
|
||||
ULONG nRetValLen;
|
||||
char * pszRetVal;
|
||||
char * pszRetValSave;
|
||||
|
||||
nParNum--;
|
||||
nParNum--;
|
||||
|
||||
if (nParNum > HB_STRFORMAT_PARNUM_MAX_) nParNum = HB_STRFORMAT_PARNUM_MAX_;
|
||||
|
||||
for (tmp = 0; tmp < nParNum; tmp++)
|
||||
{
|
||||
nLenTable[tmp] = hb_parclen(tmp + 2);
|
||||
pszVarTable[tmp] = hb_parc(tmp + 2);
|
||||
}
|
||||
|
||||
nMaskPos = 0;
|
||||
|
||||
nRetValLen = 0;
|
||||
while (nMaskPos < nMaskLen)
|
||||
{
|
||||
if (pszMask[nMaskPos] == '%')
|
||||
if( nParNum > HB_STRFORMAT_PARNUM_MAX_ )
|
||||
nParNum = HB_STRFORMAT_PARNUM_MAX_;
|
||||
|
||||
nRetValLen = 0;
|
||||
for( nMaskPos = 0; nMaskPos < nMaskLen; nMaskPos++ )
|
||||
{
|
||||
nMaskPos++;
|
||||
|
||||
if (pszMask[nMaskPos] == '\0')
|
||||
if( pszMask[ nMaskPos ] == '%' )
|
||||
{
|
||||
break;
|
||||
nMaskPos++;
|
||||
|
||||
if( pszMask[ nMaskPos ] == '\0' )
|
||||
break;
|
||||
else if( pszMask[ nMaskPos ] == '%' )
|
||||
nRetValLen++;
|
||||
else if( pszMask[ nMaskPos ] >= '1' && pszMask[ nMaskPos ] <= ( int )( nParNum + '0' ) )
|
||||
nRetValLen += hb_parclen( POS_TO_PAR( pszMask[ nMaskPos ] - '1' ) );
|
||||
}
|
||||
else if (pszMask[nMaskPos] == '%')
|
||||
{
|
||||
else
|
||||
nRetValLen++;
|
||||
}
|
||||
else if (pszMask[nMaskPos] >= '1' && pszMask[nMaskPos] <= (int)(nParNum + '0'))
|
||||
}
|
||||
|
||||
pszRetVal = pszRetValSave = ( char * ) hb_xgrab( nRetValLen + 1 );
|
||||
for( nMaskPos = 0; nMaskPos < nMaskLen; nMaskPos++ )
|
||||
{
|
||||
if( pszMask[ nMaskPos ] == '%' )
|
||||
{
|
||||
nRetValLen += nLenTable[pszMask[nMaskPos] - '1'];
|
||||
nMaskPos++;
|
||||
|
||||
if( pszMask[ nMaskPos ] == '\0' )
|
||||
break;
|
||||
else if( pszMask[ nMaskPos ] == '%' )
|
||||
*pszRetVal++ = pszMask[ nMaskPos ];
|
||||
else if( pszMask[ nMaskPos ] >= '1' && pszMask[ nMaskPos ] <= ( int ) ( nParNum + '0' ) )
|
||||
{
|
||||
ULONG nPos = pszMask[ nMaskPos ] - '1';
|
||||
ULONG nLen = hb_parclen( POS_TO_PAR( nPos ) );
|
||||
|
||||
memcpy( pszRetVal, hb_parc( POS_TO_PAR( nPos ) ), nLen );
|
||||
pszRetVal += nLen;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ; do nothing */
|
||||
}
|
||||
*pszRetVal++ = pszMask[ nMaskPos ];
|
||||
}
|
||||
else
|
||||
{
|
||||
nRetValLen++;
|
||||
}
|
||||
|
||||
nMaskPos++;
|
||||
|
||||
hb_retclen_buffer( pszRetValSave, nRetValLen );
|
||||
}
|
||||
|
||||
nMaskPos = 0;
|
||||
|
||||
pszRetVal = pszRetValSave = (char *) hb_xgrab(nRetValLen + 1);
|
||||
while (nMaskPos < nMaskLen)
|
||||
{
|
||||
if (pszMask[nMaskPos] == '%')
|
||||
{
|
||||
nMaskPos++;
|
||||
|
||||
if (pszMask[nMaskPos] == '\0')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (pszMask[nMaskPos] == '%')
|
||||
{
|
||||
*pszRetVal++ = pszMask[nMaskPos];
|
||||
}
|
||||
else if (pszMask[nMaskPos] >= '1' && pszMask[nMaskPos] <= (int)(nParNum + '0'))
|
||||
{
|
||||
ULONG nPos = pszMask[nMaskPos] - '1';
|
||||
|
||||
memcpy(pszRetVal, pszVarTable[nPos], nLenTable[nPos]);
|
||||
pszRetVal += nLenTable[nPos];
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ; do nothing */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*pszRetVal++ = pszMask[nMaskPos];
|
||||
}
|
||||
|
||||
nMaskPos++;
|
||||
}
|
||||
|
||||
hb_retclen(pszRetValSave, nRetValLen);
|
||||
|
||||
hb_xfree(pszRetValSave);
|
||||
else
|
||||
hb_retc_null();
|
||||
}
|
||||
|
||||
@@ -871,7 +871,7 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
|
||||
pWVT->markEndColRow = colrow;
|
||||
|
||||
a0 = hb_gt_wvt_GetXYFromColRow( pWVT, ( USHORT ) pWVT->markStaColRow.x, ( USHORT ) pWVT->markStaColRow.y );
|
||||
a1 = hb_gt_wvt_GetXYFromColRow( pWVT, ( USHORT ) pWVT->markEndColRow.x+1, ( USHORT ) pWVT->markEndColRow.y+1 );
|
||||
a1 = hb_gt_wvt_GetXYFromColRow( pWVT, ( USHORT ) pWVT->markEndColRow.x + 1, ( USHORT ) pWVT->markEndColRow.y + 1 );
|
||||
|
||||
rect.left = a0.x;
|
||||
rect.top = a0.y;
|
||||
@@ -883,28 +883,26 @@ static void hb_gt_wvt_MouseEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam, L
|
||||
rect.right != s_rectOld.right ||
|
||||
rect.bottom != s_rectOld.bottom )
|
||||
{
|
||||
HDC hdc = GetDC( pWVT->hWnd );
|
||||
HRGN rgn1,rgn2,rgn3;
|
||||
int hr;
|
||||
|
||||
/* Concept forwarded by Andy Wos - thanks. */
|
||||
rgn1 = CreateRectRgn( s_rectOld.left, s_rectOld.top, s_rectOld.right, s_rectOld.bottom );
|
||||
rgn2 = CreateRectRgn( rect.left, rect.top, rect.right, rect.bottom );
|
||||
rgn3 = CreateRectRgn( 0,0,0,0 );
|
||||
HRGN rgn1 = CreateRectRgn( s_rectOld.left, s_rectOld.top, s_rectOld.right, s_rectOld.bottom );
|
||||
HRGN rgn2 = CreateRectRgn( rect.left, rect.top, rect.right, rect.bottom );
|
||||
HRGN rgn3 = CreateRectRgn( 0, 0, 0, 0 );
|
||||
|
||||
hr = CombineRgn( rgn3, rgn1, rgn2, RGN_XOR );
|
||||
if( hr != 0 )
|
||||
if( CombineRgn( rgn3, rgn1, rgn2, RGN_XOR ) != 0 )
|
||||
{
|
||||
HDC hdc = GetDC( pWVT->hWnd );
|
||||
InvertRgn( hdc, rgn3 );
|
||||
ReleaseDC( pWVT->hWnd, hdc );
|
||||
}
|
||||
|
||||
DeleteObject( rgn1 );
|
||||
DeleteObject( rgn2 );
|
||||
DeleteObject( rgn3 );
|
||||
|
||||
s_rectOld.left = rect.left;
|
||||
s_rectOld.top = rect.top;
|
||||
s_rectOld.right = rect.right;
|
||||
s_rectOld.bottom = rect.bottom;
|
||||
|
||||
DeleteObject( rgn1 );
|
||||
DeleteObject( rgn2 );
|
||||
DeleteObject( rgn3 );
|
||||
ReleaseDC( pWVT->hWnd, hdc );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user