2009-08-23 11:58 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/contrib/hbwin/axcore.c
    * added automatic activex initialization to __AXDOVERB().
      __AXGETCONTROL()/hb_oleAxControlNew() also make automatic
      initialization so it's not necessary to explicitly call
      WIN_AXINIT()/hb_oleAxInit()

  * harbour/contrib/rddads/readme.txt
    ! updated ADS* RDD usage description which contain very old information
      which stop to be valid many years ago, i.e. user code should not call
      rddRegister().

  * harbour/contrib/rddads/rddads.h
  * harbour/contrib/rddads/ads1.c
    ! fixed SELF_RESETREL() macro
    ! changed uiRecordLen to ulRecordLen - ADT tables can have records
      longer then 64KB
    ! fixed size of alias buffer passed to AdsGetTableAlias()

  * harbour/contrib/rddads/adsx.c
    * modified ADSXAREA structure definition to directly inherit from
      ADSAREA instead of manual redefining all of its fields.
This commit is contained in:
Przemyslaw Czerpak
2009-08-23 09:58:39 +00:00
parent 7dc8954a1e
commit 88f8eeb94b
6 changed files with 158 additions and 145 deletions

View File

@@ -17,6 +17,29 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-08-23 11:58 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbwin/axcore.c
* added automatic activex initialization to __AXDOVERB().
__AXGETCONTROL()/hb_oleAxControlNew() also make automatic
initialization so it's not necessary to explicitly call
WIN_AXINIT()/hb_oleAxInit()
* harbour/contrib/rddads/readme.txt
! updated ADS* RDD usage description which contain very old information
which stop to be valid many years ago, i.e. user code should not call
rddRegister().
* harbour/contrib/rddads/rddads.h
* harbour/contrib/rddads/ads1.c
! fixed SELF_RESETREL() macro
! changed uiRecordLen to ulRecordLen - ADT tables can have records
longer then 64KB
! fixed size of alias buffer passed to AdsGetTableAlias()
* harbour/contrib/rddads/adsx.c
* modified ADSXAREA structure definition to directly inherit from
ADSAREA instead of manual redefining all of its fields.
2009-08-23 10:15 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
! Minor visual correction to help screen option section.

View File

@@ -163,7 +163,7 @@ HB_FUNC( __AXDOVERB ) /* ( hWndAx, iVerb ) --> hResult */
IUnknown* pUnk = NULL;
HRESULT lOleError;
if( ! s_pAtlAxGetControl )
if( ! hb_oleAxInit() || ! s_pAtlAxGetControl )
{
hb_oleSetError( S_OK );
hb_errRT_BASE_SubstR( EG_UNSUPPORTED, 3012, "ActiveX not initialized", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );

View File

@@ -1961,7 +1961,7 @@ static HB_ERRCODE adsFlush( ADSAREAP pArea )
static HB_ERRCODE adsGetRec( ADSAREAP pArea, BYTE ** pBuffer )
{
UNSIGNED32 u32Len = pArea->uiRecordLen, u32Result;
UNSIGNED32 u32Len = ( UNSIGNED32 ) pArea->ulRecordLen, u32Result;
HB_TRACE(HB_TR_DEBUG, ("adsGetRec(%p, %p)", pArea, pBuffer));
@@ -2331,7 +2331,7 @@ static HB_ERRCODE adsGetVarLen( ADSAREAP pArea, USHORT uiIndex, ULONG * ulLen )
static HB_ERRCODE adsPutRec( ADSAREAP pArea, const BYTE * pBuffer )
{
UNSIGNED32 u32Len = pArea->uiRecordLen, u32Result;
UNSIGNED32 u32Len = ( UNSIGNED32 ) pArea->ulRecordLen, u32Result;
HB_TRACE(HB_TR_DEBUG, ("adsGetRec(%p, %p)", pArea, pBuffer));
@@ -2620,7 +2620,7 @@ static HB_ERRCODE adsRecInfo( ADSAREAP pArea, PHB_ITEM pRecID, USHORT uiInfoType
break;
}
case DBRI_RECSIZE:
hb_itemPutNL( pInfo, pArea->uiRecordLen );
hb_itemPutNL( pInfo, pArea->ulRecordLen );
break;
case DBRI_RECNO:
@@ -2874,10 +2874,10 @@ static HB_ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo )
}
AdsGetRecordLength( pArea->hTable, &u32Length );
pArea->uiRecordLen = (USHORT) u32Length;
pArea->ulRecordLen = u32Length;
/* Alloc record buffer - because it's also used for some extended types
conversion it has to be at least 25 bytes size */
pArea->pRecord = ( BYTE * ) hb_xgrab( HB_MAX( ( ULONG ) pArea->uiRecordLen, pArea->maxFieldLen ) + 1 );
pArea->pRecord = ( BYTE * ) hb_xgrab( HB_MAX( pArea->ulRecordLen, pArea->maxFieldLen ) + 1 );
return SELF_GOTOP( ( AREAP ) pArea );
}
@@ -2915,7 +2915,7 @@ static HB_ERRCODE adsInfo( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
break;
}
case DBI_GETRECSIZE:
hb_itemPutNL( pItem, pArea->uiRecordLen );
hb_itemPutNL( pItem, pArea->ulRecordLen );
break;
case DBI_GETLOCKARRAY:
@@ -3184,7 +3184,7 @@ static HB_ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
/* Set default alias if necessary */
if( !pOpenInfo->atomAlias )
{
UNSIGNED16 uiAliasLen = HB_RDD_MAX_ALIAS_LEN;
UNSIGNED16 uiAliasLen = HB_RDD_MAX_ALIAS_LEN + 1;
if( AdsGetTableAlias( hTable, ( UNSIGNED8 * ) szAlias, &uiAliasLen ) == AE_SUCCESS )
pOpenInfo->atomAlias = szAlias;
else
@@ -3333,10 +3333,10 @@ static HB_ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
pArea->maxFieldLen = 24;
AdsGetRecordLength( pArea->hTable, &u32Length );
pArea->uiRecordLen = (USHORT) u32Length;
pArea->ulRecordLen = u32Length;
/* Alloc record buffer - because it's also used for some extended types
conversion it has to be at least 25 bytes size */
pArea->pRecord = ( BYTE * ) hb_xgrab( HB_MAX( ( ULONG ) pArea->uiRecordLen, pArea->maxFieldLen ) + 1 );
pArea->pRecord = ( BYTE * ) hb_xgrab( HB_MAX( pArea->ulRecordLen, pArea->maxFieldLen ) + 1 );
/* If successful call SUPER_OPEN to finish system jobs */
if( SUPER_OPEN( ( AREAP ) pArea, pOpenInfo ) == HB_FAILURE )

View File

@@ -109,34 +109,7 @@ typedef struct _MIXTAG
typedef struct _ADSXAREA_
{
AREA area;
/*
* ADS's additions to the workarea structure
*
* Warning: The above section MUST match WORKAREA exactly! Any
* additions to the structure MUST be added below, as in this
* example.
*/
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
char * szDataFileName; /* Name of data file */
USHORT uiRecordLen; /* Size of record */
ULONG ulRecNo; /* Current record */
BYTE * pRecord; /* Buffer of record data */
ULONG maxFieldLen; /* Max field length in table record */
BOOL fPositioned; /* TRUE if we are not at phantom record */
BOOL fShared; /* Shared file */
BOOL fReadonly; /* Read only file */
BOOL fFLocked; /* TRUE if file is locked */
int iFileType; /* adt/cdx/ntx */
ADSHANDLE hTable;
ADSHANDLE hOrdCurrent;
ADSHANDLE hStatement;
ADSAREA adsarea;
/* ================ Additional fields for ADSX RDD =================== */
@@ -184,15 +157,15 @@ static HB_ERRCODE hb_adsUpdateAreaFlags( ADSXAREAP pArea )
{
UNSIGNED16 u16Bof, u16Eof, u16Found;
AdsAtBOF( pArea->hTable, &u16Bof );
AdsAtEOF( pArea->hTable, &u16Eof );
AdsIsFound( pArea->hTable, &u16Found );
AdsAtBOF( pArea->adsarea.hTable, &u16Bof );
AdsAtEOF( pArea->adsarea.hTable, &u16Eof );
AdsIsFound( pArea->adsarea.hTable, &u16Found );
pArea->area.fBof = u16Bof != 0;
pArea->area.fEof = u16Eof != 0;
pArea->area.fFound = u16Found != 0;
pArea->adsarea.area.fBof = u16Bof != 0;
pArea->adsarea.area.fEof = u16Eof != 0;
pArea->adsarea.area.fFound = u16Found != 0;
pArea->fPositioned = !pArea->area.fBof && !pArea->area.fEof;
pArea->adsarea.fPositioned = !pArea->adsarea.area.fBof && !pArea->adsarea.area.fEof;
return HB_SUCCESS;
}
@@ -251,16 +224,16 @@ static LPMIXKEY mixKeyEval( LPMIXTAG pTag, ADSXAREAP pArea )
PHB_ITEM pItem;
LPMIXKEY pKey;
int iCurrArea = hb_rddGetCurrentWorkAreaNumber();
PHB_CODEPAGE pCodepage = hb_cdpSelect( pArea->area.cdPage );
PHB_CODEPAGE pCodepage = hb_cdpSelect( pArea->adsarea.area.cdPage );
if( iCurrArea != pArea->area.uiArea )
hb_rddSelectWorkAreaNumber( pArea->area.uiArea );
if( iCurrArea != pArea->adsarea.area.uiArea )
hb_rddSelectWorkAreaNumber( pArea->adsarea.area.uiArea );
else
iCurrArea = 0;
pItem = hb_vmEvalBlockOrMacro( pTag->pKeyItem );
pKey = mixKeyNew( pItem, pArea->ulRecNo, pTag->bType, pTag->uiLen );
pKey = mixKeyNew( pItem, pArea->adsarea.ulRecNo, pTag->bType, pTag->uiLen );
if( iCurrArea )
hb_rddSelectWorkAreaNumber( iCurrArea );
@@ -280,8 +253,8 @@ static BOOL mixEvalCond( PHB_ITEM pCondItem, ADSXAREAP pArea )
{
iCurrArea = hb_rddGetCurrentWorkAreaNumber();
if( iCurrArea != pArea->area.uiArea )
hb_rddSelectWorkAreaNumber( pArea->area.uiArea );
if( iCurrArea != pArea->adsarea.area.uiArea )
hb_rddSelectWorkAreaNumber( pArea->adsarea.area.uiArea );
else
iCurrArea = 0;
}
@@ -457,7 +430,7 @@ static LPMIXTAG mixTagCreate( const char * szTagName, PHB_ITEM pKeyExpr, PHB_ITE
{
LPMIXTAG pTag;
LPMIXKEY pKey;
LPDBORDERCONDINFO pOrdCondInfo = pArea->area.lpdbOrdCondInfo;
LPDBORDERCONDINFO pOrdCondInfo = pArea->adsarea.area.lpdbOrdCondInfo;
ADSHANDLE hOrder;
ULONG ulRec, ulStartRec, ulNextCount = 0;
LONG lStep = 0;
@@ -499,7 +472,7 @@ static LPMIXTAG mixTagCreate( const char * szTagName, PHB_ITEM pKeyExpr, PHB_ITE
if( ! pOrdCondInfo || pOrdCondInfo->fAll )
{
pArea->hOrdCurrent = 0;
pArea->adsarea.hOrdCurrent = 0;
}
else
{
@@ -516,26 +489,27 @@ static LPMIXTAG mixTagCreate( const char * szTagName, PHB_ITEM pKeyExpr, PHB_ITE
ulStartRec = hb_itemGetNL( pOrdCondInfo->itmStartRecID );
if( !ulStartRec )
ulStartRec = pArea->ulRecNo;
ulStartRec = pArea->adsarea.ulRecNo;
if( pArea->area.lpdbOrdCondInfo->lNextCount > 0 )
if( pArea->adsarea.area.lpdbOrdCondInfo->lNextCount > 0 )
ulNextCount = pOrdCondInfo->lNextCount;
}
else if( ! pOrdCondInfo->fUseCurrent )
{
pArea->hOrdCurrent = 0;
pArea->adsarea.hOrdCurrent = 0;
}
}
hOrder = pArea->hOrdCurrent ? pArea->hOrdCurrent : pArea->hTable;
hOrder = pArea->adsarea.hOrdCurrent ? pArea->adsarea.hOrdCurrent :
pArea->adsarea.hTable;
if( ulStartRec )
AdsGotoRecord( pArea->hTable, ulStartRec );
AdsGotoRecord( pArea->adsarea.hTable, ulStartRec );
else
AdsGotoTop( pArea->hTable );
AdsGotoTop( pArea->adsarea.hTable );
hb_adsUpdateAreaFlags( pArea );
while( ! pArea->area.fEof )
while( ! pArea->adsarea.area.fEof )
{
SELF_RECNO( (AREAP) pArea, &ulRec );
SELF_GOTO( (AREAP) pArea, ulRec );
@@ -625,7 +599,7 @@ static LPMIXTAG mixFindTag( ADSXAREAP pArea, PHB_ITEM pOrder )
usFind = (UNSIGNED16) hb_itemGetNI( pOrder );
AdsGetNumIndexes( pArea->hTable, &usOrder );
AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder );
usOrder++;
pTag = pArea->pTagList;
while( pTag && usOrder != usFind )
@@ -719,7 +693,7 @@ static HB_ERRCODE adsxSeek( ADSXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL
/* reset any pending relations - I hope ACE make the same and the problem
reported in GOTO() does not exist here */
SELF_RESETREL( pArea );
SELF_RESETREL( &pArea->adsarea );
mixFindKey( pArea->pTagCurrent, pMixKey, &ulKeyPos );
@@ -752,10 +726,10 @@ static HB_ERRCODE adsxSeek( ADSXAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL
errCode = SELF_GOTO( (AREAP) pArea, ulRecNo );
pArea->area.fEof = ulRecNo == 0;
pArea->area.fBof = FALSE;
pArea->area.fFound = fFound;
pArea->fPositioned = ! pArea->area.fEof;
pArea->adsarea.area.fEof = ulRecNo == 0;
pArea->adsarea.area.fBof = FALSE;
pArea->adsarea.area.fFound = fFound;
pArea->adsarea.fPositioned = ! pArea->adsarea.area.fEof;
return errCode;
}
@@ -770,20 +744,20 @@ static HB_ERRCODE adsxSkip( ADSXAREAP pArea, LONG lToSkip )
return SUPER_SKIP( (AREAP) pArea, lToSkip );
/* resolve any pending relations */
if( pArea->lpdbPendingRel )
if( pArea->adsarea.lpdbPendingRel )
SELF_FORCEREL( (AREAP) pArea );
pArea->area.fTop = pArea->area.fBottom = FALSE;
pArea->adsarea.area.fTop = pArea->adsarea.area.fBottom = FALSE;
if( lToSkip > 0 )
{
if( !pArea->fPositioned )
if( !pArea->adsarea.fPositioned )
{
errCode = SELF_GOTO( (AREAP) pArea, pArea->ulRecNo );
errCode = SELF_GOTO( (AREAP) pArea, pArea->adsarea.ulRecNo );
}
else
{
pArea->area.fEof = FALSE;
pArea->adsarea.area.fEof = FALSE;
}
pKey = mixKeyEval( pArea->pTagCurrent, pArea );
@@ -803,19 +777,19 @@ static HB_ERRCODE adsxSkip( ADSXAREAP pArea, LONG lToSkip )
mixKeyFree( pKey );
hb_adsUpdateAreaFlags( pArea );
pArea->area.fBof = FALSE;
pArea->adsarea.area.fBof = FALSE;
}
else
{
if( !pArea->fPositioned )
if( !pArea->adsarea.fPositioned )
{
errCode = SELF_GOBOTTOM( (AREAP) pArea );
pArea->area.fBottom = FALSE;
pArea->adsarea.area.fBottom = FALSE;
++lToSkip;
}
else
{
pArea->area.fBof = FALSE;
pArea->adsarea.area.fBof = FALSE;
}
pKey = mixKeyEval( pArea->pTagCurrent, pArea );
@@ -835,11 +809,11 @@ static HB_ERRCODE adsxSkip( ADSXAREAP pArea, LONG lToSkip )
mixKeyFree( pKey );
hb_adsUpdateAreaFlags( pArea );
pArea->area.fEof = FALSE;
pArea->adsarea.area.fEof = FALSE;
}
/* Force relational movement in child WorkAreas */
if( pArea->area.lpdbRelations )
if( pArea->adsarea.area.lpdbRelations )
SELF_SYNCCHILDREN( (AREAP) pArea );
return errCode;
@@ -872,14 +846,14 @@ static HB_ERRCODE adsxCreate( ADSXAREAP pArea, LPDBOPENINFO pCreateInfo )
{
if( pCreateInfo->cdpId )
{
pArea->area.cdPage = hb_cdpFind( pCreateInfo->cdpId );
if( !pArea->area.cdPage )
pArea->area.cdPage = hb_vmCDP();
pArea->adsarea.area.cdPage = hb_cdpFind( pCreateInfo->cdpId );
if( !pArea->adsarea.area.cdPage )
pArea->adsarea.area.cdPage = hb_vmCDP();
}
else
pArea->area.cdPage = hb_vmCDP();
pArea->adsarea.area.cdPage = hb_vmCDP();
pArea->pSortTable = mixBuildSortTable( pArea->area.cdPage );
pArea->pSortTable = mixBuildSortTable( pArea->adsarea.area.cdPage );
return HB_SUCCESS;
}
return HB_FAILURE;
@@ -892,14 +866,14 @@ static HB_ERRCODE adsxOpen( ADSXAREAP pArea, LPDBOPENINFO pOpenInfo )
{
if( pOpenInfo->cdpId )
{
pArea->area.cdPage = hb_cdpFind( pOpenInfo->cdpId );
if( !pArea->area.cdPage )
pArea->area.cdPage = hb_vmCDP();
pArea->adsarea.area.cdPage = hb_cdpFind( pOpenInfo->cdpId );
if( !pArea->adsarea.area.cdPage )
pArea->adsarea.area.cdPage = hb_vmCDP();
}
else
pArea->area.cdPage = hb_vmCDP();
pArea->adsarea.area.cdPage = hb_vmCDP();
pArea->pSortTable = mixBuildSortTable( pArea->area.cdPage );
pArea->pSortTable = mixBuildSortTable( pArea->adsarea.area.cdPage );
return HB_SUCCESS;
}
return HB_FAILURE;
@@ -932,7 +906,7 @@ static HB_ERRCODE adsxOrderListFocus( ADSXAREAP pArea, LPDBORDERINFO pOrderInfo
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, pArea->pTagCurrent->szName );
pArea->pTagCurrent = mixFindTag( pArea, pOrderInfo->itmOrder );
pArea->hOrdCurrent = 0;
pArea->adsarea.hOrdCurrent = 0;
if( pArea->pTagCurrent )
return HB_SUCCESS;
@@ -953,19 +927,19 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
/* Test key expression */
bValidExpr = FALSE;
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pOrderInfo->abExpr ), &bValidExpr );
AdsIsExprValid( pArea->adsarea.hTable, (UNSIGNED8*) hb_itemGetCPtr( pOrderInfo->abExpr ), &bValidExpr );
bUseADS = bValidExpr;
if( bUseADS && pArea->area.lpdbOrdCondInfo )
if( bUseADS && pArea->adsarea.area.lpdbOrdCondInfo )
{
/* Test FOR expression */
if( pArea->area.lpdbOrdCondInfo->abFor )
if( pArea->adsarea.area.lpdbOrdCondInfo->abFor )
{
bValidExpr = FALSE;
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) pArea->area.lpdbOrdCondInfo->abFor, &bValidExpr );
AdsIsExprValid( pArea->adsarea.hTable, (UNSIGNED8*) pArea->adsarea.area.lpdbOrdCondInfo->abFor, &bValidExpr );
bUseADS = bValidExpr;
}
else if( pArea->area.lpdbOrdCondInfo->itmCobFor )
else if( pArea->adsarea.area.lpdbOrdCondInfo->itmCobFor )
{
bUseADS = FALSE;
}
@@ -973,13 +947,13 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
/* Test WHILE expression */
if( bUseADS )
{
if( pArea->area.lpdbOrdCondInfo->abWhile )
if( pArea->adsarea.area.lpdbOrdCondInfo->abWhile )
{
bValidExpr = FALSE;
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) pArea->area.lpdbOrdCondInfo->abWhile, &bValidExpr );
AdsIsExprValid( pArea->adsarea.hTable, (UNSIGNED8*) pArea->adsarea.area.lpdbOrdCondInfo->abWhile, &bValidExpr );
bUseADS = bValidExpr;
}
else if( pArea->area.lpdbOrdCondInfo->itmCobWhile )
else if( pArea->adsarea.area.lpdbOrdCondInfo->itmCobWhile )
bUseADS = FALSE;
}
}
@@ -998,12 +972,12 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
{
if( SELF_COMPILE( (AREAP) pArea, hb_itemGetCPtr( pOrderInfo->abExpr ) ) == HB_FAILURE )
return HB_FAILURE;
pKeyItem = pArea->area.valResult;
pArea->area.valResult = NULL;
pKeyItem = pArea->adsarea.area.valResult;
pArea->adsarea.area.valResult = NULL;
}
/* Test key codeblock on EOF */
ulRecNo = pArea->ulRecNo;
ulRecNo = pArea->adsarea.ulRecNo;
SELF_GOTO( (AREAP) pArea, 0 );
if( SELF_EVALBLOCK( (AREAP) pArea, pKeyItem ) == HB_FAILURE )
{
@@ -1012,8 +986,8 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
return HB_FAILURE;
}
pResult = pArea->area.valResult;
pArea->area.valResult = NULL;
pResult = pArea->adsarea.area.valResult;
pArea->adsarea.area.valResult = NULL;
switch ( hb_itemType( pResult ) )
{
@@ -1055,33 +1029,33 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
return HB_FAILURE;
}
if( pArea->area.lpdbOrdCondInfo )
if( pArea->adsarea.area.lpdbOrdCondInfo )
{
/* Obtain FOR codeblock */
if( pArea->area.lpdbOrdCondInfo->itmCobFor )
if( pArea->adsarea.area.lpdbOrdCondInfo->itmCobFor )
{
pForItem = hb_itemNew( pArea->area.lpdbOrdCondInfo->itmCobFor );
pForItem = hb_itemNew( pArea->adsarea.area.lpdbOrdCondInfo->itmCobFor );
}
else if( pArea->area.lpdbOrdCondInfo->abFor )
else if( pArea->adsarea.area.lpdbOrdCondInfo->abFor )
{
if( SELF_COMPILE( (AREAP) pArea, pArea->area.lpdbOrdCondInfo->abFor ) == HB_FAILURE )
if( SELF_COMPILE( (AREAP) pArea, pArea->adsarea.area.lpdbOrdCondInfo->abFor ) == HB_FAILURE )
{
hb_vmDestroyBlockOrMacro( pKeyItem );
SELF_GOTO( (AREAP) pArea, ulRecNo );
return HB_FAILURE;
}
pForItem = pArea->area.valResult;
pArea->area.valResult = NULL;
pForItem = pArea->adsarea.area.valResult;
pArea->adsarea.area.valResult = NULL;
}
/* Obtain WHILE codeblock */
if( pArea->area.lpdbOrdCondInfo->itmCobWhile )
if( pArea->adsarea.area.lpdbOrdCondInfo->itmCobWhile )
{
pWhileItem = hb_itemNew( pArea->area.lpdbOrdCondInfo->itmCobWhile );
pWhileItem = hb_itemNew( pArea->adsarea.area.lpdbOrdCondInfo->itmCobWhile );
}
else if( pArea->area.lpdbOrdCondInfo->abWhile )
else if( pArea->adsarea.area.lpdbOrdCondInfo->abWhile )
{
if( SELF_COMPILE( (AREAP) pArea, pArea->area.lpdbOrdCondInfo->abWhile ) == HB_FAILURE )
if( SELF_COMPILE( (AREAP) pArea, pArea->adsarea.area.lpdbOrdCondInfo->abWhile ) == HB_FAILURE )
{
hb_vmDestroyBlockOrMacro( pKeyItem );
if( pForItem )
@@ -1089,8 +1063,8 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
SELF_GOTO( (AREAP) pArea, ulRecNo );
return HB_FAILURE;
}
pWhileItem = pArea->area.valResult;
pArea->area.valResult = NULL;
pWhileItem = pArea->adsarea.area.valResult;
pArea->adsarea.area.valResult = NULL;
}
}
@@ -1106,10 +1080,10 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
SELF_GOTO( (AREAP) pArea, ulRecNo );
return HB_FAILURE;
}
if( hb_itemType( pArea->area.valResult ) != HB_IT_LOGICAL )
if( hb_itemType( pArea->adsarea.area.valResult ) != HB_IT_LOGICAL )
{
hb_itemRelease( pArea->area.valResult );
pArea->area.valResult = 0;
hb_itemRelease( pArea->adsarea.area.valResult );
pArea->adsarea.area.valResult = 0;
hb_vmDestroyBlockOrMacro( pKeyItem );
hb_vmDestroyBlockOrMacro( pForItem );
if( pWhileItem )
@@ -1118,8 +1092,8 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
hb_mixErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0 );
return HB_FAILURE;
}
hb_itemRelease( pArea->area.valResult );
pArea->area.valResult = NULL;
hb_itemRelease( pArea->adsarea.area.valResult );
pArea->adsarea.area.valResult = NULL;
}
/* TODO: WHILE condition is not tested, like in DBFCDX. Why? Compatibility with Clipper? */
@@ -1146,7 +1120,7 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
}
pArea->pTagCurrent = pTagNew;
pArea->hOrdCurrent = 0;
pArea->adsarea.hOrdCurrent = 0;
return HB_SUCCESS;
}
@@ -1182,7 +1156,7 @@ static HB_ERRCODE adsxOrderDestroy( ADSXAREAP pArea, LPDBORDERINFO pOrderInfo )
}
else
{
pArea->hOrdCurrent = 0;
pArea->adsarea.hOrdCurrent = 0;
return HB_FAILURE;
}
}
@@ -1196,7 +1170,7 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO
return SUPER_ORDINFO( (AREAP) pArea, uiIndex, pOrderInfo );
/* resolve any pending relations */
if( pArea->lpdbPendingRel )
if( pArea->adsarea.lpdbPendingRel )
SELF_FORCEREL( ( AREAP ) pArea );
switch( uiIndex )
@@ -1250,17 +1224,17 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO
if( ulPos > 0 && ulPos <= pTag->ulRecCount )
SELF_GOTO( (AREAP) pArea, pTag->pKeys[ ulPos - 1 ]->rec );
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, !pArea->area.fEof );
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, !pArea->adsarea.area.fEof );
}
else
{
LPMIXKEY pKey;
ULONG ulKeyPos;
if( !pArea->fPositioned )
SELF_GOTO( (AREAP) pArea, pArea->ulRecNo );
if( !pArea->adsarea.fPositioned )
SELF_GOTO( (AREAP) pArea, pArea->adsarea.ulRecNo );
else
pArea->area.fEof = FALSE;
pArea->adsarea.area.fEof = FALSE;
pKey = mixKeyEval( pTag, pArea );
@@ -1280,17 +1254,17 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO
if( ulPos > 0 && ulPos <= pTag->ulRecCount )
SELF_GOTO( (AREAP) pArea, pTag->pKeys[ ulPos - 1 ]->rec );
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, !pArea->area.fEof );
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, !pArea->adsarea.area.fEof );
}
else
{
LPMIXKEY pKey;
ULONG ulKeyPos;
if( !pArea->fPositioned )
SELF_GOTO( (AREAP) pArea, pArea->ulRecNo );
if( !pArea->adsarea.fPositioned )
SELF_GOTO( (AREAP) pArea, pArea->adsarea.ulRecNo );
else
pArea->area.fEof = FALSE;
pArea->adsarea.area.fEof = FALSE;
pKey = mixKeyEval( pTag, pArea );
@@ -1324,7 +1298,7 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO
{
UNSIGNED16 usOrder = 0;
AdsGetNumIndexes( pArea->hTable, &usOrder );
AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder );
pTag = pArea->pTagList;
while( pTag )
{
@@ -1340,7 +1314,7 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, USHORT uiIndex, LPDBORDERINFO
LPMIXTAG pTag2;
UNSIGNED16 usOrder = 0;
AdsGetNumIndexes( pArea->hTable, &usOrder );
AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder );
pTag2 = pArea->pTagList;
usOrder++;
while ( pTag2 && pTag != pTag2 )

View File

@@ -146,7 +146,7 @@ typedef struct _ADSAREA_
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
char * szDataFileName; /* Name of data file */
USHORT uiRecordLen; /* Size of record */
ULONG ulRecordLen; /* Size of record */
ULONG ulRecNo; /* Current record */
BYTE * pRecord; /* Buffer of record data */
ULONG maxFieldLen; /* Max field length in table record */
@@ -156,7 +156,7 @@ typedef struct _ADSAREA_
BOOL fReadonly; /* Read only file */
BOOL fFLocked; /* TRUE if file is locked */
int iFileType; /* adt/cdx/ntx */
int iFileType; /* adt/cdx/ntx/vfp */
ADSHANDLE hTable;
ADSHANDLE hOrdCurrent;
@@ -165,13 +165,13 @@ typedef struct _ADSAREA_
typedef ADSAREA * ADSAREAP;
#define SELF_RESETREL( p ) if( pArea->lpdbPendingRel ) \
#define SELF_RESETREL( p ) if( (p)->lpdbPendingRel ) \
{ \
if( pArea->lpdbPendingRel->isScoped && \
!pArea->lpdbPendingRel->isOptimized ) \
SELF_FORCEREL( ( AREAP ) pArea ); \
if( (p)->lpdbPendingRel->isScoped && \
!(p)->lpdbPendingRel->isOptimized ) \
SELF_FORCEREL( ( AREAP ) (p) ); \
else \
pArea->lpdbPendingRel = NULL; \
(p)->lpdbPendingRel = NULL; \
}

View File

@@ -20,13 +20,29 @@
You need also to include to your prg file following lines:
REQUEST ADS
rddRegister( "ADS", 1 )
rddsetdefault( "ADS" )
By default RDD is tuned for remote server and cdx indexes. To
change this you may use commands, defined in ads.ch:
and then you can set default RDD using one of the following functions:
rddsetdefault( "ADT" )
rddsetdefault( "ADSNTX" )
rddsetdefault( "ADSCDX" )
rddsetdefault( "ADSVFP" )
You can also use:
REQUEST ADT | ADSNTX | ADSCDX | ADSVFP
instead of REQUEST ADS.
for backward compatibility with old code it's possible to use also:
rddsetdefault( "ADS" )
and then
SET FILETYPE TO NTX | CDX | ADT | VFP
command or AdsSetFileType() function to set table type (default is CDX)
By default RDD is tuned for remote server. To change this you may
use commands, defined in ads.ch:
SET SERVER LOCAL
SET FILETYPE TO NTX / SET FILETYPE TO ADT
or functions AdsSetServerType(), AdsSetFileType().
or function AdsSetServerType().