ChangeLogTag:19991010-23:30 GMT+1 Bruno Cantero <bruno@issnet.net>

This commit is contained in:
Bruno Cantero
1999-10-10 21:44:26 +00:00
parent 9375b75390
commit f15ee39b99
5 changed files with 260 additions and 105 deletions

View File

@@ -1,3 +1,19 @@
19991010-23:30 GMT+1 Bruno Cantero <bruno@issnet.net>
+ source/rdd/dbcmd.c
+ source/rdd/dbf1.c
+ Added support for SET DELETED.
* Changed default extension from .DBF and .DBT to .dbf and .dbt
* source/rdd/dbfcdx/dbfcdx1.c
* Changed default extension from .FPT to .fpt
* tests/testdbf.prg
* Now test SET DELETED command too.
+ source/rdd/dbfcdx/Makefile
+ Added missing file.
19991010-15:05 GMT+1 Victor Szel <info@szelvesz.hu>
* source/rtl/filesys.c
+ ISDISK() undocumented Clipper 5.3 function added.

View File

@@ -138,7 +138,7 @@ static LPAREANODE pCurrArea = NULL; /* Pointer to a selectd and valid area */
* -- BASIC RDD METHODS --
*/
static ERRCODE AddField( AREAP pArea, LPDBFIELDINFO pFieldInfo )
static ERRCODE defAddField( AREAP pArea, LPDBFIELDINFO pFieldInfo )
{
LPFIELD pField;
@@ -166,7 +166,7 @@ static ERRCODE AddField( AREAP pArea, LPDBFIELDINFO pFieldInfo )
return SUCCESS;
}
static ERRCODE Alias( AREAP pArea, BYTE * szAlias )
static ERRCODE defAlias( AREAP pArea, BYTE * szAlias )
{
strncpy( ( char * ) szAlias,
( ( PHB_DYNS ) pArea->atomAlias )->pSymbol->szName,
@@ -174,20 +174,20 @@ static ERRCODE Alias( AREAP pArea, BYTE * szAlias )
return SUCCESS;
}
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
static ERRCODE defBof( AREAP pArea, BOOL * pBof )
{
* pBof = pArea->fBof;
return SUCCESS;
}
static ERRCODE Close( AREAP pArea )
static ERRCODE defClose( AREAP pArea )
{
( ( PHB_DYNS ) pArea->atomAlias )->hArea = 0;
return SUCCESS;
}
static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
static ERRCODE defCreateFields( AREAP pArea, PHB_ITEM pStruct )
{
USHORT uiCount;
PHB_ITEM pFieldDesc;
@@ -208,13 +208,13 @@ static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
static ERRCODE defEof( AREAP pArea, BOOL * pEof )
{
* pEof = pArea->fEof;
return SUCCESS;
}
static ERRCODE Error( AREAP pArea, PHB_ITEM pError )
static ERRCODE defError( AREAP pArea, PHB_ITEM pError )
{
char * szRddName;
@@ -226,13 +226,13 @@ static ERRCODE Error( AREAP pArea, PHB_ITEM pError )
return hb_errLaunch( pError );
}
static ERRCODE FieldCount( AREAP pArea, USHORT * uiFields )
static ERRCODE defFieldCount( AREAP pArea, USHORT * uiFields )
{
* uiFields = pArea->uiFieldCount;
return SUCCESS;
}
static ERRCODE FieldInfo( AREAP pArea, USHORT uiIndex, USHORT uiType, PHB_ITEM pItem )
static ERRCODE defFieldInfo( AREAP pArea, USHORT uiIndex, USHORT uiType, PHB_ITEM pItem )
{
LPFIELD pField;
char szType[ 2 ];
@@ -269,7 +269,7 @@ static ERRCODE FieldInfo( AREAP pArea, USHORT uiIndex, USHORT uiType, PHB_ITEM p
}
static ERRCODE FieldName( AREAP pArea, USHORT uiIndex, void * szName )
static ERRCODE defFieldName( AREAP pArea, USHORT uiIndex, void * szName )
{
LPFIELD pField;
@@ -282,29 +282,30 @@ static ERRCODE FieldName( AREAP pArea, USHORT uiIndex, void * szName )
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
static ERRCODE defFound( AREAP pArea, BOOL * pFound )
{
* pFound = pArea->fFound;
return SUCCESS;
}
static ERRCODE GetRec( AREAP pArea, BYTE ** pBuffer )
static ERRCODE defGetRec( AREAP pArea, BYTE ** pBuffer )
{
* pBuffer = pArea->lpExtendInfo->bRecord;
return SUCCESS;
}
static ERRCODE NewArea( AREAP pArea )
static ERRCODE defNewArea( AREAP pArea )
{
pArea->lpFileInfo = ( LPFILEINFO ) hb_xgrab( sizeof( FILEINFO ) );
memset( pArea->lpFileInfo, 0, sizeof( FILEINFO ) );
pArea->lpFileInfo->hFile = FS_ERROR;
pArea->lpExtendInfo = ( LPDBEXTENDINFO ) hb_xgrab( sizeof( DBEXTENDINFO ) );
memset( pArea->lpExtendInfo, 0, sizeof( DBEXTENDINFO ) );
pArea->dbsi.fIgnoreFilter = TRUE;
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
static ERRCODE defOpen( AREAP pArea, LPDBOPENINFO pOpenInfo )
{
pArea->atomAlias = hb_dynsymGet( ( char * ) pOpenInfo->atomAlias );
if( ( ( PHB_DYNS ) pArea->atomAlias )->hArea )
@@ -320,7 +321,7 @@ static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
return SUCCESS;
}
static ERRCODE Release( AREAP pArea )
static ERRCODE defRelease( AREAP pArea )
{
LPFILEINFO pFileInfo;
@@ -344,7 +345,7 @@ static ERRCODE Release( AREAP pArea )
return SUCCESS;
}
static ERRCODE SetFieldExtent( AREAP pArea, USHORT uiFieldExtent )
static ERRCODE defSetFieldExtent( AREAP pArea, USHORT uiFieldExtent )
{
pArea->uiFieldExtent = uiFieldExtent;
pArea->lpFields = ( LPFIELD ) hb_xgrab( uiFieldExtent * sizeof( FIELD ) );
@@ -352,15 +353,106 @@ static ERRCODE SetFieldExtent( AREAP pArea, USHORT uiFieldExtent )
return SUCCESS;
}
static ERRCODE Skip( AREAP pArea, LONG lToSkip )
static ERRCODE defSkip( AREAP pArea, LONG lToSkip )
{
if( pArea->dbfi.fFilter )
return SELF_SKIPFILTER( pArea, lToSkip );
else
return SELF_SKIPRAW( pArea, lToSkip );
BOOL bExit;
if( pArea->dbfi.fFilter || !pArea->dbsi.fIgnoreFilter || !hb_set.HB_SET_DELETED )
{
if( lToSkip > 0 )
{
while( lToSkip > 0 )
{
SELF_SKIPRAW( pArea, 1 );
SELF_SKIPFILTER( pArea, 1 );
SELF_EOF( pArea, &bExit );
if( bExit )
return SUCCESS;
lToSkip--;
}
}
else if( lToSkip < 0 )
{
while( lToSkip < 0 )
{
SELF_SKIPRAW( pArea, -1 );
SELF_SKIPFILTER( pArea, -1 );
SELF_BOF( pArea, &bExit );
if( bExit )
return SELF_SKIPFILTER( pArea, 1 );
lToSkip++;
}
}
else
{
SELF_SKIPRAW( pArea, 0 );
SELF_SKIPFILTER( pArea, 1 );
SELF_EOF( pArea, &bExit );
if( bExit )
return SUCCESS;
}
}
return SELF_SKIPRAW( pArea, lToSkip );
}
static ERRCODE StructSize( AREAP pArea, USHORT * uiSize )
static ERRCODE defSkipFilter( AREAP pArea, LONG lUpDown )
{
BOOL bExit, bDeleted;
if( lUpDown > 0 )
{
do
{
SELF_EOF( pArea, &bExit );
if( bExit )
return SUCCESS;
if( !hb_set.HB_SET_DELETED ) /* Skip if deleted */
{
SELF_DELETED( pArea, &bDeleted );
if( !bDeleted )
return SUCCESS;
SELF_SKIPRAW( pArea, 1 );
}
else
return SUCCESS;
} while( 1 );
}
else if( lUpDown < 0 )
{
do
{
SELF_BOF( pArea, &bExit );
if( bExit )
return SELF_SKIPFILTER( pArea, 1 );
if( !hb_set.HB_SET_DELETED ) /* Skip if deleted */
{
SELF_DELETED( pArea, &bDeleted );
if( !bDeleted )
return SUCCESS;
SELF_SKIPRAW( pArea, -1 );
}
else
return SUCCESS;
} while( 1 );
}
return SUCCESS;
}
static ERRCODE defSkipRaw( AREAP pArea, LONG lToSkip )
{
return SELF_GOTO( pArea, pArea->lpExtendInfo->lRecNo + lToSkip );
}
static ERRCODE defStructSize( AREAP pArea, USHORT * uiSize )
{
HB_SYMBOL_UNUSED( pArea );
HB_SYMBOL_UNUSED( uiSize );
@@ -368,7 +460,7 @@ static ERRCODE StructSize( AREAP pArea, USHORT * uiSize )
return SUCCESS;
}
static ERRCODE SysName( AREAP pArea, BYTE * pBuffer )
static ERRCODE defSysName( AREAP pArea, BYTE * pBuffer )
{
USHORT uiCount;
LPRDDNODE pRddNode;
@@ -380,7 +472,7 @@ static ERRCODE SysName( AREAP pArea, BYTE * pBuffer )
return SUCCESS;
}
static ERRCODE UnSupported( AREAP pArea )
static ERRCODE defUnSupported( AREAP pArea )
{
PHB_ITEM pError;
@@ -394,59 +486,59 @@ static ERRCODE UnSupported( AREAP pArea )
return FAILURE;
}
static RDDFUNCS defTable = { Bof,
Eof,
Found,
UnSupported,
( DBENTRYP_UL ) UnSupported,
( DBENTRYP_I ) UnSupported,
UnSupported,
Skip,
( DBENTRYP_L ) UnSupported,
( DBENTRYP_L ) UnSupported,
AddField,
( DBENTRYP_B ) UnSupported,
CreateFields,
UnSupported,
( DBENTRYP_BP ) UnSupported,
FieldCount,
( DBENTRYP_VF ) UnSupported,
FieldInfo,
FieldName,
UnSupported,
GetRec,
( DBENTRYP_SI ) UnSupported,
( DBENTRYP_SVL ) UnSupported,
UnSupported,
UnSupported,
( DBENTRYP_P ) UnSupported,
( DBENTRYP_SI ) UnSupported,
UnSupported,
( DBENTRYP_ULP ) UnSupported,
( DBENTRYP_ISI ) UnSupported,
( DBENTRYP_I ) UnSupported,
SetFieldExtent,
Alias,
Close,
( DBENTRYP_VP ) UnSupported,
( DBENTRYP_SI ) UnSupported,
NewArea,
Open,
Release,
StructSize,
SysName,
Error,
( DBENTRYP_VSP ) UnSupported,
( DBENTRYP_VL ) UnSupported,
( DBENTRYP_UL ) UnSupported,
UnSupported,
( DBENTRYP_VP ) UnSupported,
( DBENTRYP_SVP ) UnSupported,
( DBENTRYP_VP ) UnSupported,
( DBENTRYP_SVP ) UnSupported,
UnSupported,
UnSupported,
( DBENTRYP_SVP ) UnSupported
static RDDFUNCS defTable = { defBof,
defEof,
defFound,
defUnSupported,
( DBENTRYP_UL ) defUnSupported,
( DBENTRYP_I ) defUnSupported,
defUnSupported,
defSkip,
defSkipFilter,
defSkipRaw,
defAddField,
( DBENTRYP_B ) defUnSupported,
defCreateFields,
defUnSupported,
( DBENTRYP_BP ) defUnSupported,
defFieldCount,
( DBENTRYP_VF ) defUnSupported,
defFieldInfo,
defFieldName,
defUnSupported,
defGetRec,
( DBENTRYP_SI ) defUnSupported,
( DBENTRYP_SVL ) defUnSupported,
defUnSupported,
defUnSupported,
( DBENTRYP_P ) defUnSupported,
( DBENTRYP_SI ) defUnSupported,
defUnSupported,
( DBENTRYP_ULP ) defUnSupported,
( DBENTRYP_ISI ) defUnSupported,
( DBENTRYP_I ) defUnSupported,
defSetFieldExtent,
defAlias,
defClose,
( DBENTRYP_VP ) defUnSupported,
( DBENTRYP_SI ) defUnSupported,
defNewArea,
defOpen,
defRelease,
defStructSize,
defSysName,
defError,
( DBENTRYP_VSP ) defUnSupported,
( DBENTRYP_VL ) defUnSupported,
( DBENTRYP_UL ) defUnSupported,
defUnSupported,
( DBENTRYP_VP ) defUnSupported,
( DBENTRYP_SVP ) defUnSupported,
( DBENTRYP_VP ) defUnSupported,
( DBENTRYP_SVP ) defUnSupported,
defUnSupported,
defUnSupported,
( DBENTRYP_SVP ) defUnSupported
};
@@ -1261,7 +1353,7 @@ HARBOUR HB_DBGOTO( void )
if( !pCurrArea )
{
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "DBGOTOP" );
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "DBGOTO" );
return;
}
@@ -1394,7 +1486,6 @@ HARBOUR HB_DBSKIP( void )
{
if( ISNUM( 1 ) )
lToSkip = hb_parnl( 1 );
SELF_SKIP( ( AREAP ) pCurrArea->pArea, lToSkip );
}
else

View File

@@ -593,6 +593,7 @@ static RDDFUNCS dbfSuper = { 0 };
#define dbfFound NULL
#define dbfSkip NULL
#define dbfSkipFilter NULL
#define dbfSkipRaw NULL
#define dbfCreateFields NULL
#define dbfFieldCount NULL
#define dbfFieldDisplay NULL
@@ -629,6 +630,9 @@ static ERRCODE dbfAppend( AREAP pArea, BOOL bUnLockAll )
ULONG lRecCount, lRecNo;
PHB_ITEM pError;
if( SELF_GOCOLD( pArea ) == FAILURE )
return FAILURE;
if( pArea->lpExtendInfo->fReadOnly )
{
pError = hb_errNew();
@@ -947,7 +951,8 @@ static ERRCODE dbfGoBottom( AREAP pArea )
if( SELF_RECCOUNT( pArea, &lRecCount ) == FAILURE )
return FAILURE;
return SELF_GOTO( pArea, lRecCount );
SELF_GOTO( pArea, lRecCount );
return SELF_SKIPFILTER( pArea, -1 );
}
static ERRCODE dbfGoCold( AREAP pArea )
@@ -1016,6 +1021,7 @@ static ERRCODE dbfGoTo( AREAP pArea, ULONG lRecNo )
pArea->fEof = 1;
else
pArea->fEof = 0;
pArea->fBof = ( lRecNo == 1 );
}
pArea->lpExtendInfo->lRecNo = lRecNo;
@@ -1051,7 +1057,8 @@ static ERRCODE dbfGoToId( AREAP pArea, PHB_ITEM pItem )
static ERRCODE dbfGoTop( AREAP pArea )
{
return SELF_GOTO( pArea, 1 );
SELF_GOTO( pArea, 1 );
return SELF_SKIPFILTER( pArea, 1 );
}
static ERRCODE dbfInfo( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
@@ -1600,21 +1607,6 @@ static ERRCODE dbfRelease( AREAP pArea )
return SUPER_RELEASE( pArea );
}
static ERRCODE dbfSkipRaw( AREAP pArea, LONG lToSkip )
{
LONG lRecNo = pArea->lpExtendInfo->lRecNo + lToSkip;
if( lRecNo < 1 )
{
lRecNo = 1;
pArea->fBof = 1;
}
else
pArea->fBof = 0;
return SELF_GOTO( pArea, lRecNo );
}
static ERRCODE dbfUnLock( AREAP pArea, ULONG lRecNo )
{
if( lRecNo == 0 )

View File

@@ -0,0 +1,15 @@
#
# $Id$
#
ROOT = ../../../
C_SOURCES=\
dbfcdx1.c \
PRG_SOURCES=\
dbfcdx0.prg \
LIB=dbfcdx
include $(TOP)$(ROOT)config/lib.cf

View File

@@ -4,13 +4,13 @@
function main()
local aStruct := { { "CHARACTER", "C", 25, 0 }, ;
{ "NUMERIC", "N", 8, 0 }, ;
{ "DOUBLE", "N", 8, 2 }, ;
{ "DATE", "D", 8, 0 }, ;
{ "LOGICAL", "L", 1, 0 }, ;
{ "MEMO1", "M", 10, 0 }, ;
{ "MEMO2", "M", 10, 0 } }
local nI, aStruct := { { "CHARACTER", "C", 25, 0 }, ;
{ "NUMERIC", "N", 8, 0 }, ;
{ "DOUBLE", "N", 8, 2 }, ;
{ "DATE", "D", 8, 0 }, ;
{ "LOGICAL", "L", 1, 0 }, ;
{ "MEMO1", "M", 10, 0 }, ;
{ "MEMO2", "M", 10, 0 } }
REQUEST DBFCDX
@@ -19,12 +19,12 @@ function main()
? "[" + MYALIAS->MEMO1 + "]"
? "[" + MYALIAS->MEMO2 + "]"
? "-"
dbAppend()
MYALIAS->( dbAppend() )
MYALIAS->MEMO1 := "Hello world!"
MYALIAS->MEMO2 := "Harbour power"
? "[" + MYALIAS->MEMO1 + "]"
? "[" + MYALIAS->MEMO2 + "]"
dbAppend()
MYALIAS->( dbAppend() )
MYALIAS->MEMO1 := "111"
MYALIAS->MEMO2 := "222"
? "[" + MYALIAS->MEMO1 + "]"
@@ -34,5 +34,46 @@ function main()
? "[" + Str( MYALIAS->DOUBLE ) + "]"
? "[" + Str( MYALIAS->NUMERIC ) + "]"
dbCloseAll()
? ""
? "Press any key..."
InKey( 0 )
dbCreate( "testdbf", aStruct, "DBFCDX", .t., "MYALIAS" )
for nI := 1 to 10
MYALIAS->( dbAppend() )
MYALIAS->NUMERIC := nI
? "Adding a record", nI
if nI == 3 .or. nI == 7
MYALIAS->( dbDelete() )
? "Deleting record", nI
endif
next
? ""
? "With SET DELETED OFF"
? "Press any key..."
InKey( 0 )
MYALIAS->( dbGoTop() )
do while !MYALIAS->( Eof() )
? MYALIAS->NUMERIC
MYALIAS->( dbSkip() )
enddo
SET DELETED ON
? ""
? "With SET DELETED ON"
? "Press any key..."
InKey( 0 )
MYALIAS->( dbGoTop() )
do while !MYALIAS->( Eof() )
? MYALIAS->NUMERIC
MYALIAS->( dbSkip() )
enddo
return nil