ChangeLogTag:19991121-17:50 GMT+1 Bruno Cantero <bruno@issnet.net>
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
19991121-17:50 GMT+1 Bruno Cantero <bruno@issnet.net>
|
||||
* include/rddapi.h
|
||||
source/rdd/dbcmd.c
|
||||
source/rdd/dbf1.c
|
||||
+ Additional feature: __dbPack( [<bBlock>], [<nEvery>] )
|
||||
executes <bBlock> every <nEvery> records.
|
||||
|
||||
19991121-17:33 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* source/compiler/expropt.c
|
||||
! $ optimization fixed for strings containing Chr(0), now 4 more RTL_TESTs
|
||||
|
||||
@@ -232,6 +232,8 @@ typedef struct
|
||||
BYTE bDay;
|
||||
BOOL fRecordChanged; /* Record changed */
|
||||
ULONG ulRecCount; /* Total records */
|
||||
PHB_ITEM itmEval; /* EVAL expression for __dbPack() */
|
||||
ULONG ulEvery; /* Every records for eval itmEval */
|
||||
} DBEXTENDINFO;
|
||||
|
||||
typedef DBEXTENDINFO * LPDBEXTENDINFO;
|
||||
|
||||
@@ -1996,7 +1996,16 @@ HARBOUR HB___DBSETLOCATE( void )
|
||||
HARBOUR HB___DBPACK( void )
|
||||
{
|
||||
if( pCurrArea )
|
||||
{
|
||||
/* Additional feature: __dbPack( [<bBlock>, [<nEvery>] )
|
||||
Code Block to execute for every record. */
|
||||
( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->itmEval = hb_param( 1, IT_BLOCK );
|
||||
( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->ulEvery = hb_parnl( 2 );
|
||||
if( !( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->ulEvery )
|
||||
( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->ulEvery = 1;
|
||||
SELF_PACK( ( AREAP ) pCurrArea->pArea );
|
||||
( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->itmEval = NULL;
|
||||
}
|
||||
else
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "__DBPACK" );
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "errorapi.h"
|
||||
#include "dates.h"
|
||||
#include "langapi.h"
|
||||
#include "ctoharb.h"
|
||||
|
||||
typedef struct _DBFHEADER
|
||||
{
|
||||
@@ -996,6 +997,7 @@ static ERRCODE dbfGetValueFile( AREAP pArea, USHORT uiIndex, void * pFile )
|
||||
LPFIELD pField;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("dbfGetValueFile(%p, %hu, %p)", pArea, uiIndex, pFile));
|
||||
HB_SYMBOL_UNUSED( pFile );
|
||||
|
||||
if( uiIndex > pArea->uiFieldCount )
|
||||
return FAILURE;
|
||||
@@ -1018,6 +1020,7 @@ static ERRCODE dbfGetValueFile( AREAP pArea, USHORT uiIndex, void * pFile )
|
||||
* ( szText + pField->uiLen ) = szEndChar;
|
||||
}
|
||||
( ( LPDBFMEMO ) pField->memo )->fChanged = FALSE;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1375,7 +1378,7 @@ static ERRCODE dbfOpenMemFile( AREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
|
||||
static ERRCODE dbfPack( AREAP pArea )
|
||||
{
|
||||
ULONG ulRecCount, ulRecIn, ulRecOut;
|
||||
ULONG ulRecCount, ulRecIn, ulRecOut, ulEvery;
|
||||
BOOL bDeleted;
|
||||
PHB_ITEM pError;
|
||||
BYTE * pBuffer, pEOF[ 1 ];
|
||||
@@ -1400,11 +1403,25 @@ static ERRCODE dbfPack( AREAP pArea )
|
||||
|
||||
ulRecOut = 0;
|
||||
ulRecIn = 1;
|
||||
ulEvery = 0;
|
||||
while ( ulRecIn <= ulRecCount )
|
||||
{
|
||||
SELF_GOTO( pArea, ulRecIn );
|
||||
SELF_DELETED( pArea, &bDeleted );
|
||||
|
||||
/* Execute the Code Block */
|
||||
if( pArea->lpExtendInfo->itmEval )
|
||||
{
|
||||
ulEvery++;
|
||||
if( ulEvery >= pArea->lpExtendInfo->ulEvery )
|
||||
{
|
||||
ulEvery = 0;
|
||||
hb_vmPushSymbol( &hb_symEval );
|
||||
hb_vmPush( pArea->lpExtendInfo->itmEval );
|
||||
hb_vmDo( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
if( !bDeleted )
|
||||
{
|
||||
ulRecOut++;
|
||||
@@ -1418,6 +1435,15 @@ static ERRCODE dbfPack( AREAP pArea )
|
||||
}
|
||||
ulRecIn++;
|
||||
}
|
||||
|
||||
/* Execute the Code Block for pending record */
|
||||
if( pArea->lpExtendInfo->itmEval && ulEvery > 0 )
|
||||
{
|
||||
hb_vmPushSymbol( &hb_symEval );
|
||||
hb_vmPush( pArea->lpExtendInfo->itmEval );
|
||||
hb_vmDo( 0 );
|
||||
}
|
||||
|
||||
hb_dbfUpdateHeader( pArea, ulRecOut );
|
||||
|
||||
/* Write EOF */
|
||||
|
||||
Reference in New Issue
Block a user