diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 20b0b96152..e6f19d54ed 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,14 @@ +19991204-13:15 GMT+1 Bruno Cantero + * include/rddapi.h + source/rdd/dbcmd.c + source/rdd/dbf1.c + source/rdd/dbfcdx/dbfcdx1.c + + Begining with ordCondSet(), ordCreate(), ordDestroy(), ordListClear() and + ordListRebuild(). + * source/rtl/dummy.prg + - Removed ordCondSet(), ordCreate(), ordDestroy(), ordListClear() and + ordListRebuild() functions. + 19991203-15:18 GMT+1 Jose Lalin * source/pp/hbpp.c ! Bug fixed in #error directive. diff --git a/harbour/include/rddapi.h b/harbour/include/rddapi.h index 66272dcfa8..896e2d21de 100644 --- a/harbour/include/rddapi.h +++ b/harbour/include/rddapi.h @@ -585,6 +585,9 @@ typedef USHORT ( * DBENTRYP_VL )( AREAP area, LPDBLOCKINFO param ); typedef USHORT ( * DBENTRYP_VFI )( AREAP area, LPDBFILTERINFO param ); typedef USHORT ( * DBENTRYP_VEI )( AREAP area, LPDBEVALINFO param ); typedef USHORT ( * DBENTRYP_VLO )( AREAP area, LPDBSCOPEINFO param ); +typedef USHORT ( * DBENTRYP_VOC )( AREAP area, LPDBORDERCREATEINFO param ); +typedef USHORT ( * DBENTRYP_VOI )( AREAP area, LPDBORDERCONDINFO param ); +typedef USHORT ( * DBENTRYP_OI )( AREAP area, LPDBORDERINFO param ); typedef USHORT ( * DBENTRYP_SP )( AREAP area, USHORT * param ); typedef USHORT ( * DBENTRYP_P )( AREAP area, BYTE * param ); typedef USHORT ( * DBENTRYP_PP )( AREAP area, BYTE ** param ); @@ -692,14 +695,18 @@ typedef struct _RDDFUNCS /* Order Management */ DBENTRYP_VP orderListAdd; +#endif DBENTRYP_V orderListClear; +#if 0 DBENTRYP_VP orderListDelete; DBENTRYP_VP orderListFocus; +#endif DBENTRYP_V orderListRebuild; - DBENTRYP_VP orderCondition; - DBENTRYP_VP orderCreate; - DBENTRYP_VP orderDestroy; + DBENTRYP_VOI orderCondition; + DBENTRYP_VOC orderCreate; + DBENTRYP_OI orderDestroy; +#if 0 DBENTRYP_SVP orderInfo; #endif diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index 35d25d6600..2dca65b107 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -123,6 +123,11 @@ HARBOUR HB_LASTREC( void ); HARBOUR HB_LOCK( void ); HARBOUR HB_LUPDATE( void ); HARBOUR HB_NETERR( void ); +HARBOUR HB_ORDCONDSET( void ); +HARBOUR HB_ORDCREATE( void ); +HARBOUR HB_ORDDESTROY( void ); +HARBOUR HB_ORDLISTCLEAR( void ); +HARBOUR HB_ORDLISTREBUILD( void ); HARBOUR HB_RDDLIST( void ); HARBOUR HB_RDDNAME( void ); HARBOUR HB_RDDREGISTER( void ); @@ -519,12 +524,32 @@ static ERRCODE defOpen( AREAP pArea, LPDBOPENINFO pOpenInfo ) return SUCCESS; } +static ERRCODE defOrderCondition( AREAP pArea, LPDBORDERCONDINFO pOrderInfo ) +{ + if( pArea->lpdbOrdCondInfo ) + { + if( pArea->lpdbOrdCondInfo->abFor ) + hb_xfree( pArea->lpdbOrdCondInfo->abFor ); + if( pArea->lpdbOrdCondInfo->itmCobFor ) + hb_itemRelease( pArea->lpdbOrdCondInfo->itmCobFor ); + if( pArea->lpdbOrdCondInfo->itmCobWhile ) + hb_itemRelease( pArea->lpdbOrdCondInfo->itmCobWhile ); + if( pArea->lpdbOrdCondInfo->itmCobEval ) + hb_itemRelease( pArea->lpdbOrdCondInfo->itmCobEval ); + hb_xfree( pArea->lpdbOrdCondInfo ); + } + pArea->lpdbOrdCondInfo = pOrderInfo; + + return SUCCESS; +} + static ERRCODE defRelease( AREAP pArea ) { LPFILEINFO pFileInfo; HB_TRACE(HB_TR_DEBUG, ("defRelease(%p)", pArea)); + SELF_ORDSETCOND( pArea, NULL ); if( pArea->lpFields ) { hb_xfree( pArea->lpFields ); @@ -822,6 +847,11 @@ static RDDFUNCS defTable = { defBof, defEval, defUnSupported, defUnSupported, + defUnSupported, + defUnSupported, + defOrderCondition, + ( DBENTRYP_VOC ) defUnSupported, + ( DBENTRYP_OI ) defUnSupported, defClearFilter, defClearLocate, defFilterText, @@ -2875,6 +2905,131 @@ HARBOUR HB_NETERR( void ) hb_retl( bNetError ); } +HARBOUR HB_ORDCONDSET( void ) +{ + LPDBORDERCONDINFO pOrderCondInfo; + char * szFor; + ULONG ulLen; + PHB_ITEM pItem; + + if( pCurrArea ) + { + pOrderCondInfo = ( LPDBORDERCONDINFO ) hb_xgrab( sizeof( DBORDERCONDINFO ) ); + szFor = hb_parc( 1 ); + ulLen = strlen( szFor ); + if( ulLen ) + { + pOrderCondInfo->abFor = ( BYTE * ) hb_xgrab( ulLen + 1 ); + strcpy( ( char * ) pOrderCondInfo->abFor, szFor ); + } + else + pOrderCondInfo->abFor = NULL; + pItem = hb_param( 2, IT_BLOCK ); + if( pItem ) + { + pOrderCondInfo->itmCobFor = hb_itemNew( NULL ); + hb_itemCopy( pOrderCondInfo->itmCobFor, pItem ); + } + else + pOrderCondInfo->itmCobFor = NULL; + if( ISLOG( 3 ) ) + pOrderCondInfo->fAll = hb_parl( 3 ); + else + pOrderCondInfo->fAll = TRUE; + pItem = hb_param( 4, IT_BLOCK ); + if( pItem ) + { + pOrderCondInfo->itmCobWhile = hb_itemNew( NULL ); + hb_itemCopy( pOrderCondInfo->itmCobWhile, pItem ); + } + else + pOrderCondInfo->itmCobWhile = NULL; + pItem = hb_param( 5, IT_BLOCK ); + if( pItem ) + { + pOrderCondInfo->itmCobEval = hb_itemNew( NULL ); + hb_itemCopy( pOrderCondInfo->itmCobEval, pItem ); + } + else + pOrderCondInfo->itmCobEval = NULL; + pOrderCondInfo->lStep = hb_parnl( 6 ); + pOrderCondInfo->lStartRecno = hb_parnl( 7 ); + pOrderCondInfo->lNextCount = hb_parnl( 8 ); + pOrderCondInfo->lRecno = hb_parnl( 9 ); + pOrderCondInfo->fRest = hb_parl( 10 ); + pOrderCondInfo->fDescending = hb_parl( 11 ); + pOrderCondInfo->fAdditive = hb_parl( 12 ); + pOrderCondInfo->fScoped = hb_parl( 13 ); + pOrderCondInfo->fCustom = hb_parl( 14 ); + pOrderCondInfo->fNoOptimize = hb_parl( 15 ); + if( !pOrderCondInfo->itmCobWhile ) + pOrderCondInfo->fRest = TRUE; + if( pOrderCondInfo->lNextCount || pOrderCondInfo->lRecno || pOrderCondInfo->fRest ) + pOrderCondInfo->fAll = FALSE; + hb_retl( SELF_ORDSETCOND( ( AREAP ) pCurrArea->pArea, pOrderCondInfo ) == SUCCESS ); + } + else + hb_retl( FALSE ); +} + +HARBOUR HB_ORDCREATE( void ) +{ + DBORDERCREATEINFO pOrderInfo; + char * szKeyExpr; + + if( pCurrArea ) + { + pOrderInfo.abBagName = ( BYTE * ) hb_parc( 1 ); + pOrderInfo.atomBagName = ( BYTE * ) hb_parc( 2 ); + pOrderInfo.abExpr = hb_param( 3, IT_STRING ); + if( ( ( strlen( ( char * ) pOrderInfo.abBagName ) == 0 ) && + ( strlen( ( char * ) pOrderInfo.atomBagName ) == 0 ) ) || + !pOrderInfo.abExpr ) + { + hb_errRT_DBCMD( EG_ARG, 1006, NULL, "ORDCREATE" ); + return; + } + pOrderInfo.itmCobExpr = hb_param( 4, IT_BLOCK ); + if( ISLOG( 5 ) ) + pOrderInfo.fUnique = hb_parl( 5 ); + else + pOrderInfo.fUnique = hb_set.HB_SET_UNIQUE; + SELF_ORDCREATE( ( AREAP ) pCurrArea->pArea, &pOrderInfo ); + } + else + hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ORDCREATE" ); +} + +HARBOUR HB_ORDDESTROY( void ) +{ + DBORDERINFO pOrderInfo; + + if( pCurrArea ) + { + pOrderInfo.itmOrder = hb_param( 1, IT_STRING ); + if( !pOrderInfo.itmOrder ) + pOrderInfo.itmOrder = hb_param( 1, IT_NUMERIC ); + pOrderInfo.atomBagName = hb_param( 2, IT_STRING ); + SELF_ORDDESTROY( ( AREAP ) pCurrArea->pArea, &pOrderInfo ); + } +} + +HARBOUR HB_ORDLISTCLEAR( void ) +{ + if( pCurrArea ) + SELF_ORDLSTCLEAR( ( AREAP ) pCurrArea->pArea ); + else + hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ORDLISTCLEAR" ); +} + +HARBOUR HB_ORDLISTREBUILD( void ) +{ + if( pCurrArea ) + SELF_ORDLSTREBUILD( ( AREAP ) pCurrArea->pArea ); + else + hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ORDLISTCLEAR" ); +} + HARBOUR HB_RDDLIST( void ) { USHORT uiType; diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index c013deb564..ad5260c939 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -653,6 +653,11 @@ static RDDFUNCS dbfSuper = { 0 }; #define dbfStructSize NULL #define dbfSysName NULL #define dbfEval NULL +#define dbfOrderListClear NULL +#define dbfOrderListRebuild NULL +#define dbfOrderCondition NULL +#define dbfOrderCreate NULL +#define dbfOrderDestroy NULL #define dbfClearFilter NULL #define dbfClearLocate NULL #define dbfFilterText NULL @@ -2042,6 +2047,11 @@ static RDDFUNCS dbfTable = { dbfBof, dbfEval, dbfPack, dbfZap, + dbfOrderListClear, + dbfOrderListRebuild, + dbfOrderCondition, + dbfOrderCreate, + dbfOrderDestroy, dbfClearFilter, dbfClearLocate, dbfFilterText, diff --git a/harbour/source/rdd/dbfcdx/dbfcdx1.c b/harbour/source/rdd/dbfcdx/dbfcdx1.c index a0c19ab771..31b44ed911 100644 --- a/harbour/source/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/source/rdd/dbfcdx/dbfcdx1.c @@ -306,6 +306,7 @@ static BOOL hb_cdxWriteMemo( AREAP pArea, LPDBFMEMO pMemo, ULONG * lNewRecNo ) #define cdxEval NULL #define cdxPack NULL #define cdxZap NULL +#define cdxOrderCondition NULL #define cdxClearFilter NULL #define cdxClearLocate NULL #define cdxFilterText NULL @@ -461,6 +462,37 @@ static ERRCODE cdxOpenMemFile( AREAP pArea, LPDBOPENINFO pOpenInfo ) return SUCCESS; } +static ERRCODE cdxOrderDestroy( AREAP pArea, LPDBORDERINFO pOrderInfo ) +{ + HB_TRACE(HB_TR_DEBUG, ("cdxOrderDestroy(%p, %p)", pArea, pOrderInfo)); + + return SUCCESS; +} + +static ERRCODE cdxOrderListClear( AREAP pArea ) +{ + HB_TRACE(HB_TR_DEBUG, ("cdxOrderListClear(%p)", pArea)); + + return SUCCESS; +} + +static ERRCODE cdxOrderListRebuild( AREAP pArea ) +{ + HB_TRACE(HB_TR_DEBUG, ("cdxOrderListRebuild(%p)", pArea)); + + return SUCCESS; +} + +static ERRCODE cdxOrderCreate( AREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) +{ + HB_TRACE(HB_TR_DEBUG, ("cdxOrderCreate(%p, %p)", pArea, pOrderInfo)); + + if( SELF_GOCOLD( pArea ) == FAILURE ) + return FAILURE; + + return SELF_GOTOP( pArea ); +} + static ERRCODE cdxPutValueFile( AREAP pArea, USHORT uiIndex, void * pFile ) { LPFIELD pField; @@ -631,6 +663,11 @@ static RDDFUNCS cdxTable = { cdxBof, cdxEval, cdxPack, cdxZap, + cdxOrderListClear, + cdxOrderListRebuild, + cdxOrderCondition, + cdxOrderCreate, + cdxOrderDestroy, cdxClearFilter, cdxClearLocate, cdxFilterText, diff --git a/harbour/source/rtl/dummy.prg b/harbour/source/rtl/dummy.prg index 3fca6ad01d..418d0e2a27 100644 --- a/harbour/source/rtl/dummy.prg +++ b/harbour/source/rtl/dummy.prg @@ -38,10 +38,7 @@ FUNCTION ordBagExt() ; RETURN ".ntx" FUNCTION ordBagName() ; RETURN "" FUNCTION ordCond() ; RETURN NIL /* 5.3 */ -FUNCTION ordCondSet() ; RETURN NIL -FUNCTION ordCreate() ; RETURN NIL FUNCTION ordDescend() ; RETURN .F. /* 5.3 */ -FUNCTION ordDestroy() ; RETURN NIL FUNCTION ordFor() ; RETURN NIL FUNCTION ordIsUnique() ; RETURN .F. /* 5.3 */ FUNCTION ordKey() ; RETURN "" @@ -52,8 +49,6 @@ FUNCTION ordKeyGoto() ; RETURN .F. /* 5.3 */ FUNCTION ordKeyNo() ; RETURN 0 /* 5.3 */ FUNCTION ordKeyVal() ; RETURN NIL /* 5.3 */ FUNCTION ordListAdd() ; RETURN NIL -FUNCTION ordListClear() ; RETURN NIL -FUNCTION ordListRebuild() ; RETURN NIL FUNCTION ordName() ; RETURN "" FUNCTION ordNumber() ; RETURN 0 FUNCTION ordScope() ; RETURN NIL /* 5.3 */