2002-05-04 17:47 UTC-0300 Horacio Roldan <harbour_ar@yahoo.com.ar>

* include\hbrddcdx.h
   * source\rdd\dbfcdx\dbfcdx2.h
   * source\rdd\dbfcdx\dbfcdx1.c
     + fixed support for dbSeek(last)
     + added scope support: ordScope, dbOrderInfo(..scope..),
         ordKeyCount, ordKeyNo.
     ! fixed found() flag when last record in order must be
       filtered (eg: deleted), bug reported by Lorenzo Fiorini.
     + added dummy handler for DBOI_CUSTOM.
This commit is contained in:
Horacio Dario Roldan Kasimatis
2002-05-04 20:49:12 +00:00
parent 044146cee7
commit 3e3e5efe10
3 changed files with 325 additions and 100 deletions

View File

@@ -173,6 +173,10 @@ typedef struct _CDXTAG
LPKEYINFO CurKeyInfo; /* current value of key expression */
LPPAGEINFO RootPage;
LPKEYINFO HotKey; /* value of hot key expression */
PHB_ITEM topScope;
LPKEYINFO topScopeKey;
PHB_ITEM bottomScope;
LPKEYINFO bottomScopeKey;
} CDXTAG;
typedef CDXTAG * LPCDXTAG;
@@ -454,13 +458,16 @@ extern ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
extern ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrderInfo );
#define hb_cdxClearFilter NULL
#define hb_cdxClearLocate NULL
#define hb_cdxClearScope NULL
/* #define hb_cdxClearScope NULL */
static ERRCODE hb_cdxClearScope( CDXAREAP pArea );
#define hb_cdxCountScope NULL
#define hb_cdxFilterText NULL
#define hb_cdxScopeInfo NULL
/* #define hb_cdxScopeInfo NULL */
static ERRCODE hb_cdxScopeInfo( CDXAREAP pArea, USHORT nScope, PHB_ITEM pItem );
#define hb_cdxSetFilter NULL
#define hb_cdxSetLocate NULL
#define hb_cdxSetScope NULL
/* #define hb_cdxSetScope NULL */
static ERRCODE hb_cdxSetScope( CDXAREAP pArea, LPDBORDSCOPEINFO sInfo );
#define hb_cdxSkipScope NULL
#define hb_cdxCompile NULL
#define hb_cdxError NULL

View File

@@ -1045,6 +1045,8 @@ static void hb_cdxTagFree( LPCDXTAG pTag )
hb_itemRelease( pTag->pForItem );
}
hb_cdxKeyFree( pTag->CurKeyInfo );
hb_cdxTagClearScope( pTag, 0);
hb_cdxTagClearScope( pTag, 1);
hb_xfree( pTag );
}
@@ -1975,6 +1977,7 @@ static void hb_cdxTagIntNodeBuild( LPCDXTAG pTag, LPCDXDATA pData, LPPAGEINFO pP
static LONG hb_cdxTagKeyFind( LPCDXTAG pTag, LPKEYINFO pKey )
{
int K;
LONG ret = 0;
pTag->CurKeyInfo->Tag = 0;
hb_cdxTagTagOpen( pTag, 0 );
@@ -1985,27 +1988,25 @@ static LONG hb_cdxTagKeyFind( LPCDXTAG pTag, LPKEYINFO pKey )
if( K == 0 )
{
hb_cdxPageRetrieveKey( pTag->RootPage, &pTag->CurKeyInfo );
/*
if( pTag->pForItem == NULL )
return pTag->CurKeyInfo->Tag;
else
/ * TODO: test for expression * /
pTag->TagEOF = TRUE;
*/
return pTag->CurKeyInfo->Tag;
ret = pTag->CurKeyInfo->Tag;
}
else if( K < 0 )
{
hb_cdxPageRetrieveKey( pTag->RootPage, &pTag->CurKeyInfo );
/*
if( pTag->pForItem != NULL )
/ * TODO: test for expression * /
pTag->TagEOF = TRUE;
*/
}
else
pTag->TagEOF = TRUE;
return 0;
if ( pKey->Tag == CDX_MAX_REC_NUM ) {
USHORT dav;
hb_cdxPageRetrieveKey( pTag->RootPage, &pTag->CurKeyInfo );
hb_cdxTagKeyRead( pTag, PREV_RECORD );
if ( pTag->CurKeyInfo->Tag ) {
if ( hb_cdxKeyCompare( pKey, pTag->CurKeyInfo, &dav, FALSE ) == 0 )
ret = pTag->CurKeyInfo->Tag;
}
}
return ret;
}
/* end hb_cdxTagxxx */
@@ -3556,72 +3557,98 @@ static ERRCODE hb_cdxGoEof( CDXAREAP pArea )
return retvalue;
}
/*
static long hb_cdxDBOIKeyCount( CDXAREAP pArea )
static BOOL hb_cdxTopScope( LPCDXTAG pTag, LPKEYINFO pKey )
{
LPKEYINFO pNewKey;
LPCDXTAG pTag;
long lKeyCount = 0;
pTag = hb_cdxGetActiveTag( pArea->lpIndexes );
pNewKey = hb_cdxKeyNew();
pNewKey = hb_cdxKeyCopy( pNewKey, pTag->CurKeyInfo );
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyRead( pTag, TOP_RECORD );
while( !pTag->TagEOF )
{
lKeyCount++;
hb_cdxTagKeyRead( pTag, NEXT_RECORD );
}
hb_cdxTagKeyFind( pTag, pNewKey );
hb_cdxTagTagClose( pTag );
hb_cdxKeyFree( pNewKey );
return lKeyCount;
USHORT EndPos;
if( pTag->topScope )
return ( hb_cdxKeyCompare( pTag->topScopeKey, pKey, &EndPos, FALSE) <= 0);
else
return TRUE;
}
*/
/*
This version of DBOIKeyCount should be fixed when scopes are implemented, the above works.
*/
static BOOL hb_cdxBottomScope( LPCDXTAG pTag, LPKEYINFO pKey )
{
USHORT EndPos;
if( pTag->bottomScope )
return ( hb_cdxKeyCompare( pTag->bottomScopeKey, pKey, &EndPos, FALSE) >= 0);
else
return TRUE;
}
static void hb_cdxTagClearScope( LPCDXTAG pTag, USHORT nScope )
{
PHB_ITEM *pScope;
LPKEYINFO *pScopeKey;
HB_TRACE(HB_TR_DEBUG, ("hb_cdxTagClearScope(%p, %hu)", pArea, nScope));
pScope = (nScope == 0) ? &(pTag->topScope) : &(pTag->bottomScope);
pScopeKey = (nScope == 0) ? &(pTag->topScopeKey) : &(pTag->bottomScopeKey);
if ( *pScope ) {
hb_itemRelease( *pScope );
*pScope = NULL;
}
if ( *pScopeKey ) {
hb_cdxKeyFree( *pScopeKey );
*pScopeKey = NULL;
}
}
static long hb_cdxDBOIKeyCount( CDXAREAP pArea )
{
LPKEYINFO pCurKey;
LPCDXTAG pTag;
LPPAGEINFO pPage1, pPage2;
long lKeyCount;
long lKeyCount = 0;
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
{
hb_cdxIndexLockRead( pTag->pIndex, pTag );
pCurKey = hb_cdxKeyNew();
pCurKey = hb_cdxKeyCopy( pCurKey, pTag->CurKeyInfo );
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyRead( pTag, TOP_RECORD );
pPage1 = pTag->RootPage;
while ( pPage1->Child )
pPage1 = pPage1->Child;
lKeyCount = pPage1->uiKeys;
if ( pPage1->Right != -1 )
if( pTag->topScope || pTag->bottomScope )
{
pPage2 = hb_cdxPageNew( pTag, 0, 0 );
pPage2->Page = pPage1->Right;
while ( pPage2->Page != -1 )
hb_cdxTagTagOpen( pTag, 0 );
if( pTag->topScope )
hb_cdxTagKeyFind( pTag, pTag->topScopeKey );
else
hb_cdxTagKeyRead( pTag, TOP_RECORD );
while( !pTag->TagEOF && hb_cdxBottomScope( pTag, pTag->CurKeyInfo ) )
{
hb_cdxTagPageLoad( pTag, pPage2, 1);
lKeyCount += pPage2->uiKeys;
pPage2->Page = pPage2->Right;
lKeyCount++;
hb_cdxTagKeyRead( pTag, NEXT_RECORD );
}
}
else
{
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyRead( pTag, TOP_RECORD );
pPage1 = pTag->RootPage;
while ( pPage1->Child )
pPage1 = pPage1->Child;
lKeyCount = pPage1->uiKeys;
if ( pPage1->Right != -1 )
{
pPage2 = hb_cdxPageNew( pTag, 0, 0 );
pPage2->Page = pPage1->Right;
while ( pPage2->Page != -1 )
{
hb_cdxTagPageLoad( pTag, pPage2, 1);
lKeyCount += pPage2->uiKeys;
pPage2->Page = pPage2->Right;
}
hb_cdxPageFree( pPage2 );
}
hb_cdxPageFree( pPage2 );
}
hb_cdxTagKeyFind( pTag, pCurKey );
/* hb_cdxTagTagClose( pTag ); */
hb_cdxKeyFree( pCurKey );
hb_cdxIndexUnLockRead( pTag->pIndex, pTag );
}
return lKeyCount;
@@ -3655,9 +3682,6 @@ static long hb_cdxDBOIKeyNo( CDXAREAP pArea )
}
*/
/*
This version of DBOIKeyNo should be fixed when scopes are implemented, the above works.
*/
static long hb_cdxDBOIKeyNo( CDXAREAP pArea )
{
LPKEYINFO pCurKey;
@@ -3672,24 +3696,40 @@ static long hb_cdxDBOIKeyNo( CDXAREAP pArea )
hb_cdxIndexLockRead( pTag->pIndex, pTag );
pCurKey = hb_cdxKeyNew();
pCurKey = hb_cdxKeyCopy( pCurKey, pTag->CurKeyInfo );
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyFind( pTag, pCurKey );
if ( !pTag->TagBOF && !pTag->TagEOF ) {
pPage1 = pTag->RootPage;
while ( pPage1->Child )
pPage1 = pPage1->Child;
lKeyNo = pPage1->CurKey + 1;
if ( pPage1->Left != -1 )
if( pTag->topScope || pTag->bottomScope )
{
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyFind( pTag, pCurKey );
if ( hb_cdxTopScope( pTag, pTag->CurKeyInfo ) && hb_cdxBottomScope( pTag, pTag->CurKeyInfo ) )
{
pPage2 = hb_cdxPageNew( pTag, 0, 0 );
pPage2->Page = pPage1->Left;
while ( pPage2->Page != -1 )
while( !pTag->TagBOF && !pTag->TagEOF && hb_cdxTopScope( pTag, pTag->CurKeyInfo ) )
{
hb_cdxTagPageLoad( pTag, pPage2, 1);
lKeyNo += pPage2->uiKeys;
pPage2->Page = pPage2->Left;
lKeyNo++;
hb_cdxTagKeyRead( pTag, PREV_RECORD );
}
}
}
else
{
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyFind( pTag, pCurKey );
if ( !pTag->TagBOF && !pTag->TagEOF ) {
pPage1 = pTag->RootPage;
while ( pPage1->Child )
pPage1 = pPage1->Child;
lKeyNo = pPage1->CurKey + 1;
if ( pPage1->Left != -1 )
{
pPage2 = hb_cdxPageNew( pTag, 0, 0 );
pPage2->Page = pPage1->Left;
while ( pPage2->Page != -1 )
{
hb_cdxTagPageLoad( pTag, pPage2, 1);
lKeyNo += pPage2->uiKeys;
pPage2->Page = pPage2->Left;
}
hb_cdxPageFree( pPage2 );
}
hb_cdxPageFree( pPage2 );
}
}
hb_cdxTagKeyFind( pTag, pCurKey );
@@ -3755,7 +3795,10 @@ ERRCODE hb_cdxGoBottom( CDXAREAP pArea )
{
hb_cdxIndexLockRead( pTag->pIndex, pTag );
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyRead( pTag, BTTM_RECORD );
if( pTag->bottomScope )
hb_cdxSeek( pArea, 1, pTag->bottomScope, 1 );
else
hb_cdxTagKeyRead( pTag, BTTM_RECORD );
SELF_GOTO( ( AREAP ) pArea, pTag->CurKeyInfo->Tag );
hb_cdxIndexUnLockRead( pTag->pIndex, pTag );
}
@@ -3895,7 +3938,10 @@ ERRCODE hb_cdxGoTop( CDXAREAP pArea )
{
hb_cdxIndexLockRead( pTag->pIndex, pTag );
hb_cdxTagTagOpen( pTag, 0 );
hb_cdxTagKeyRead( pTag, TOP_RECORD );
if( pTag->topScope )
hb_cdxSeek( pArea, 1, pTag->topScope, 0);
else
hb_cdxTagKeyRead( pTag, TOP_RECORD );
SELF_GOTO( ( AREAP ) pArea, pTag->CurKeyInfo->Tag );
hb_cdxIndexUnLockRead( pTag->pIndex, pTag );
}
@@ -3947,6 +3993,17 @@ ERRCODE hb_cdxSeek( CDXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFindLas
hb_cdxIndexLockRead( pTag->pIndex, pTag );
lRecno = hb_cdxTagKeyFind( pTag, pKey2 );
/*
if( bFindLast )
{
USHORT dav;
hb_cdxTagKeyRead( pTag, PREV_RECORD );
if ( pTag->CurKeyInfo->Tag ) {
if ( hb_cdxKeyCompare( pKey2, pTag->CurKeyInfo, &dav, FALSE ) == 0 )
lRecno = pTag->CurKeyInfo->Tag;
}
}
*/
pArea->fEof = pTag->TagEOF;
pArea->fBof = pTag->TagBOF;
/* hb_cdxKeyFree( pKey2 ); */
@@ -3984,19 +4041,25 @@ ERRCODE hb_cdxSeek( CDXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFindLas
USHORT endPos;
int k;
retvalue = SELF_SKIPFILTER( ( AREAP ) pArea, 1 );
k = hb_cdxKeyCompare( pKey2, pTag->CurKeyInfo, &endPos, FALSE );
if ( k == 0)
{
pArea->fFound = TRUE;
if ( pArea->fEof ) {
pArea->fFound = FALSE;
}
else
{
pArea->fFound = FALSE;
if( !bSoftSeek )
k = hb_cdxKeyCompare( pKey2, pTag->CurKeyInfo, &endPos, FALSE );
if ( k == 0)
{
//retvalue = SELF_GOTO( ( AREAP ) pArea, 0 );
SELF_GOBOTTOM( ( AREAP ) pArea );
retvalue = SELF_SKIP( ( AREAP ) pArea, 1 );
pArea->fFound = TRUE;
}
else
{
pArea->fFound = FALSE;
if( !bSoftSeek )
{
//retvalue = SELF_GOTO( ( AREAP ) pArea, 0 );
SELF_GOBOTTOM( ( AREAP ) pArea );
retvalue = SELF_SKIP( ( AREAP ) pArea, 1 );
}
}
}
}
@@ -4027,6 +4090,10 @@ ERRCODE hb_cdxSeek( CDXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFindLas
/*pArea->fEof = pTag->TagEOF = TRUE; */
}
}
if( !hb_cdxTopScope( pTag, pTag->CurKeyInfo ) ||
!hb_cdxBottomScope( pTag, pTag->CurKeyInfo ) )
hb_cdxGoEof( pArea );
hb_cdxIndexUnLockRead( pTag->pIndex, pTag );
return retvalue;
}
@@ -4068,19 +4135,20 @@ ERRCODE hb_cdxSkipRaw( CDXAREAP pArea, LONG lToSkip )
if( !pArea->fEof )
{
while( !pTag->TagEOF && lToSkip-- > 0 )
hb_cdxTagKeyRead( pTag, NEXT_RECORD );
{
hb_cdxTagKeyRead( pTag, NEXT_RECORD );
if ( !pTag->TagEOF ) {
if( !hb_cdxTopScope( pTag, pTag->CurKeyInfo ) )
hb_cdxSeek( pArea, 1, pTag->topScope, 0 );
else if( !hb_cdxBottomScope( pTag, pTag->CurKeyInfo ) )
pTag->TagEOF = TRUE;
}
}
if( !pTag->TagEOF )
SELF_GOTO( ( AREAP ) pArea, pTag->CurKeyInfo->Tag );
else
{
/*BOOL fTop; */ /* TRUE if "top" */
/*BOOL fBottom; */ /* TRUE if "bottom" */
/*
SUPER_GOBOTTOM( ( AREAP ) pArea );
SUPER_SKIPRAW( ( AREAP ) pArea, 1 );
pArea->fEof = pTag->TagEOF = TRUE;
*/
hb_cdxGoEof( pArea );
}
}
@@ -4094,14 +4162,23 @@ ERRCODE hb_cdxSkipRaw( CDXAREAP pArea, LONG lToSkip )
}
pTag->TagBOF = FALSE;
while( !pTag->TagBOF && lToSkip++ < 0 )
{
hb_cdxTagKeyRead( pTag, PREV_RECORD );
if ( !pTag->TagBOF ) {
if( !hb_cdxTopScope( pTag, pTag->CurKeyInfo ) )
{
hb_cdxSeek( pArea, 1, pTag->topScope, 0 );
pTag->TagBOF = TRUE;
}
else if( !hb_cdxBottomScope( pTag, pTag->CurKeyInfo ) )
hb_cdxSeek( pArea, 1, pTag->bottomScope, 1 );
}
}
if( !pTag->TagBOF )
SELF_GOTO( ( AREAP ) pArea, pTag->CurKeyInfo->Tag );
else
{
/*BOOL fTop; */ /* TRUE if "top" */
/*BOOL fBottom; */ /* TRUE if "bottom" */
pTag->TagBOF = FALSE;
SELF_GOTOP( ( AREAP ) pArea );
pArea->fBof = pTag->TagBOF = TRUE;
@@ -5522,7 +5599,46 @@ ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrderInf
hb_cdxKeyGetItem( pTag->CurKeyInfo, pOrderInfo->itmResult, uiAux );
}
break;
/*------------------- */
case DBOI_SCOPETOP :
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
hb_cdxScopeInfo( pArea, 0, pOrderInfo->itmResult );
else
hb_itemClear( pOrderInfo->itmResult );
break;
case DBOI_SCOPEBOTTOM :
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
hb_cdxScopeInfo( pArea, 1, pOrderInfo->itmResult );
else
hb_itemClear( pOrderInfo->itmResult );
break;
case DBOI_SCOPETOPCLEAR :
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
{
hb_cdxScopeInfo( pArea, 0, pOrderInfo->itmResult );
hb_cdxTagClearScope( pTag, 0);
}
else
hb_itemClear( pOrderInfo->itmResult );
break;
case DBOI_SCOPEBOTTOMCLEAR :
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
{
hb_cdxScopeInfo( pArea, 1, pOrderInfo->itmResult );
hb_cdxTagClearScope( pTag, 1);
}
else
hb_itemClear( pOrderInfo->itmResult );
break;
/*------------------- */
case DBOI_CUSTOM :
hb_itemPutL( pOrderInfo->itmResult, 0 );
break;
case DBOI_KEYADD :
hb_itemPutL( pOrderInfo->itmResult, 0 );
break;
@@ -5539,13 +5655,111 @@ ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrderInf
// ( DBENTRYP_V ) hb_cdxClearFilter : NULL
// ( DBENTRYP_V ) hb_cdxClearLocate : NULL
// ( DBENTRYP_V ) hb_cdxClearScope : NULL
static ERRCODE hb_cdxClearScope( CDXAREAP pArea )
{
LPCDXTAG pTag;
PHB_ITEM *pScope;
HB_TRACE(HB_TR_DEBUG, ("hb_cdxClearScope(%p)", pArea));
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
{
hb_cdxTagClearScope( pTag, 0);
hb_cdxTagClearScope( pTag, 1);
}
return SUCCESS;
}
// ( DBENTRYP_VPLP ) hb_cdxCountScope : NULL
// ( DBENTRYP_I ) hb_cdxFilterText : NULL
// ( DBENTRYP_SI ) hb_cdxScopeInfo : NULL
static ERRCODE hb_cdxScopeInfo( CDXAREAP pArea, USHORT nScope, PHB_ITEM pItem )
{
LPCDXTAG pTag;
PHB_ITEM *pScope;
HB_TRACE(HB_TR_DEBUG, ("hb_cdxScopeInfo(%p, %hu, %p)", pArea, nScope, pItem));
pTag = hb_cdxGetActiveTag( pArea );
hb_itemClear( pItem );
if( pTag )
{
pScope = (nScope == 0) ? &(pTag->topScope) : &(pTag->bottomScope);
if ( *pScope ) {
hb_itemCopy( pItem, *pScope );
}
}
return SUCCESS;
}
// ( DBENTRYP_VFI ) hb_cdxSetFilter : NULL
// ( DBENTRYP_VLO ) hb_cdxSetLocate : NULL
// ( DBENTRYP_VOS ) hb_cdxSetScope : NULL
static ERRCODE hb_cdxSetScope( CDXAREAP pArea, LPDBORDSCOPEINFO sInfo )
{
LPCDXTAG pTag;
BOOL ok;
PHB_ITEM *pScope;
LPKEYINFO *pScopeKey;
HB_TRACE(HB_TR_DEBUG, ("hb_cdxSetScope(%p, %p)", pArea, sInfo));
pTag = hb_cdxGetActiveTag( pArea );
if( pTag )
{
pScope = (sInfo->nScope == 0) ? &(pTag->topScope) : &(pTag->bottomScope);
pScopeKey = (sInfo->nScope == 0) ? &(pTag->topScopeKey) : &(pTag->bottomScopeKey);
if( !sInfo->scopeValue )
{
if ( *pScope ) {
hb_itemRelease( *pScope );
*pScope = NULL;
}
if ( *pScopeKey ) {
hb_cdxKeyFree( *pScopeKey );
*pScopeKey = NULL;
}
}
else
{
switch( pTag->uiType )
{
case 'N' :
ok = ( sInfo->scopeValue->type & HB_IT_NUMERIC ); break;
case 'D' :
ok = ( sInfo->scopeValue->type == HB_IT_DATE ); break;
case 'L' :
ok = ( sInfo->scopeValue->type == HB_IT_LOGICAL ); break;
case 'C' :
ok = ( sInfo->scopeValue->type == HB_IT_STRING ); break;
default:
ok = FALSE;
}
if ( ok ) {
if( *pScope == NULL )
*pScope = hb_itemNew( NULL );
hb_itemCopy( *pScope, sInfo->scopeValue );
*pScopeKey = hb_cdxKeyPutItem( *pScopeKey, *pScope );
(*pScopeKey)->Tag = (sInfo->nScope == 0) ? (CDX_IGNORE_REC_NUM) : (CDX_MAX_REC_NUM);
}
else
printf("hb_cdxSetScope: scope value of wrong type"); /* DBFCDX/1051 Scope Type Mismatch */
}
}
else
printf("hb_cdxSetScope: workarea not indexed");
return SUCCESS;
}
// ( DBENTRYP_VPL ) hb_cdxSkipScope : NULL
// ( DBENTRYP_P ) hb_cdxCompile : NULL

View File

@@ -141,6 +141,10 @@ static LPCDXTAG hb_cdxGetTagByNumber(CDXAREAP pArea, USHORT uiTag );
static PHB_ITEM hb_cdxKeyGetItem( LPKEYINFO pKey, PHB_ITEM pItem, USHORT uiType );
static LPCDXTAG hb_cdxReorderTagList ( LPCDXTAG TagList );
static ERRCODE hb_cdxGoEof( CDXAREAP pArea );
static BOOL hb_cdxTopScope( LPCDXTAG pTag, LPKEYINFO pKey );
static BOOL hb_cdxBottomScope( LPCDXTAG pTag, LPKEYINFO pKey );
static void hb_cdxTagClearScope( LPCDXTAG pTag, USHORT nScope );
static USHORT hb_cdxIndexCheckVersion( LPCDXINDEX pIndex );
static USHORT hb_cdxIndexUnLockRead( LPCDXINDEX pIndex, LPCDXTAG pTag );