ChangeLogTag:19990818-14:13 GMT+1 Bruno Cantero <bruno@issnet.net>

This commit is contained in:
Bruno Cantero
1999-08-18 12:30:02 +00:00
parent 9944bea9c9
commit 5ca1289210
7 changed files with 510 additions and 234 deletions

View File

@@ -1,3 +1,12 @@
19990818-14:13 GMT+1 Bruno Cantero <bruno@issnet.net>
* include/rddapi.h
source/rdd/dbcmd.c
source/rdd/dbf1.c
source/rdd/sdf1.c
source/rdd/delim1.c
source/rdd/dbfntx/dbfntx1.c
Added new functions
19990818-03:00 GMT+1 Victor Szel <info@szelvesz.hu>
* source/compiler/harbour.y

View File

@@ -156,6 +156,25 @@ typedef struct
typedef DBOPENINFO * LPDBOPENINFO;
/*
* DBEXTENDINFO
* ------------
* Additional properties
*/
typedef struct
{
USHORT uiHeaderLen; /* Size of header */
USHORT uiRecordLen; /* Size of record */
BYTE * bRecord; /* Buffer of the data */
BYTE * bOldRecord; /* Buffer of the data for undelete */
BOOL fHasMemo; /* Work Area with Memo fields */
PHB_ITEM pRecNo; /* Current record */
} DBEXTENDINFO;
typedef DBEXTENDINFO * LPDBEXTENDINFO;
/*
* DBORDERCONDINFO
* ---------------
@@ -509,10 +528,12 @@ typedef struct _AREA
BOOL fTop; /* TRUE if "top" */
BOOL fBottom; /* TRUE if "bottom" */
#endif
BOOL fBof; /* TRUE if "bof" */
BOOL fEof; /* TRUE if "eof" */
BOOL fFound; /* TRUE if "found" */
#if 0
DBSCOPEINFO dbsi; /* Info regarding last LOCATE */
DBFILTERINFO dbfi; /* Filter in effect */
@@ -528,6 +549,7 @@ typedef struct _AREA
USHORT rddID;
LPFILEINFO lpFileInfo; /* Files used by this workarea */
LPDBEXTENDINFO lpExtendInfo; /* Additional properties */
} AREA;
@@ -549,11 +571,11 @@ typedef USHORT ( * DBENTRYP_VF )( AREAP area, LPDBFIELDINFO param );
typedef USHORT ( * DBENTRYP_SP )( AREAP area, USHORT * param );
typedef USHORT ( * DBENTRYP_P )( AREAP area, BYTE * param );
typedef USHORT ( * DBENTRYP_S )( AREAP area, USHORT param );
typedef USHORT ( * DBENTRYP_LP )( AREAP area, LONG * param );
typedef USHORT ( * DBENTRYP_SVP )( AREAP area, USHORT index, void * param );
#if 0
typedef USHORT ( * DBENTRYP_LP )( AREAP area, LONGP param);
typedef USHORT ( * DBENTRYP_PP )( AREAP area, void ** param);
typedef USHORT ( * DBENTRYP_SVP )( AREAP area, USHORT index, void * param);
typedef USHORT ( * DBENTRYP_SVPB )( AREAP area, USHORT index, void * param, USHORT mode);
typedef USHORT ( * DBENTRYP_VPL )( AREAP area, void * p1, LONG p2);
typedef USHORT ( * DBENTRYP_VPLP )( AREAP area, void * p1, LONGP p2);
@@ -600,23 +622,31 @@ typedef struct _RDDFUNCS
#if 0
DBENTRYP_V deleterec;
DBENTRYP_SP deleted;
#endif
DBENTRYP_SP fieldCount;
#if 0
DBENTRYP_VP fieldDisplay;
DBENTRYP_SSI fieldInfo;
#endif
DBENTRYP_SVP fieldName;
#if 0
DBENTRYP_V flush;
DBENTRYP_PP getRec;
#endif
DBENTRYP_SI getValue;
#if 0
DBENTRYP_SVP getVarLen;
DBENTRYP_V goCold;
DBENTRYP_V goHot;
DBENTRYP_VP putRec;
DBENTRYP_SI putValue;
DBENTRYP_V recall;
DBENTRYP_LP reccount;
DBENTRYP_ISI recInfo;
DBENTRYP_I recno;
#endif
DBENTRYP_LP reccount;
#if 0
DBENTRYP_ISI recInfo;
#endif
DBENTRYP_I recno;
DBENTRYP_S setFieldExtent;
/* WorkArea/Database management */
@@ -703,12 +733,12 @@ typedef struct _RDDFUNCS
DBENTRYP_SVPB getValueFile;
DBENTRYP_VP openMemFile;
DBENTRYP_SVP putValueFile;
#endif
/* Database file header handling */
DBENTRYP_V readDBHeader;
#endif
DBENTRYP_V writeDBHeader;

View File

@@ -24,8 +24,8 @@
#include <ctype.h>
#include "extend.h"
#include "init.h"
#include "itemapi.h"
#include "init.h"
#include "errorapi.h"
#include "rddapi.h"
#include "set.h"
@@ -34,6 +34,7 @@
#include "set.ch"
#define HARBOUR_MAX_RDD_DRIVERNAME_LENGTH 32
#define HARBOUR_MAX_RDD_FIELDNAME_LENGTH 32
typedef struct _RDDNODE
{
@@ -77,13 +78,19 @@ HARBOUR HB_DBSKIP( void );
HARBOUR HB_DBUSEAREA( void );
HARBOUR HB_DELIM( void );
HARBOUR HB_EOF( void );
HARBOUR HB_FIELDCOUNT( void );
HARBOUR HB_FIELDGET( void );
HARBOUR HB_FIELDNAME( void );
HARBOUR HB_FOUND( void );
HARBOUR HB_LASTREC( void );
HARBOUR HB_RDDLIST( void );
HARBOUR HB_RDDNAME( void );
HARBOUR HB_RDDREGISTER( void );
HARBOUR HB_RDDSETDEFAULT( void );
HARBOUR HB_RDDSHUTDOWN( void );
HARBOUR HB_RDDSYS( void );
HARBOUR HB_RECCOUNT( void );
HARBOUR HB_RECNO( void );
HARBOUR HB_SDF( void );
HB_INIT_SYMBOLS_BEGIN( dbCmd__InitSymbols )
@@ -100,12 +107,18 @@ HB_INIT_SYMBOLS_BEGIN( dbCmd__InitSymbols )
{ "DBSKIP", FS_PUBLIC, HB_DBSKIP, 0 },
{ "DBUSEAREA", FS_PUBLIC, HB_DBUSEAREA, 0 },
{ "EOF", FS_PUBLIC, HB_EOF, 0 },
{ "FIELDCOUNT", FS_PUBLIC, HB_FIELDCOUNT, 0 },
{ "FIELDGET", FS_PUBLIC, HB_FIELDGET, 0 },
{ "FIELDNAME", FS_PUBLIC, HB_FIELDNAME, 0 },
{ "FOUND", FS_PUBLIC, HB_FOUND, 0 },
{ "LASTREC", FS_PUBLIC, HB_LASTREC, 0 },
{ "RDDLIST", FS_PUBLIC, HB_RDDLIST, 0 },
{ "RDDNAME", FS_PUBLIC, HB_RDDNAME, 0 },
{ "RDDREGISTER", FS_PUBLIC, HB_RDDREGISTER, 0 },
{ "RDDSETDEFAULT", FS_PUBLIC, HB_RDDSETDEFAULT, 0 },
{ "RDDSHUTDOWN", FS_PUBLIC, HB_RDDSHUTDOWN, 0 }
{ "RDDSHUTDOWN", FS_PUBLIC, HB_RDDSHUTDOWN, 0 },
{ "RECCOUNT", FS_PUBLIC, HB_RECCOUNT, 0 },
{ "RECNO", FS_PUBLIC, HB_RECNO, 0 }
HB_INIT_SYMBOLS_END( dbCmd__InitSymbols )
#if ! defined(__GNUC__)
#pragma startup dbCmd__InitSymbols
@@ -212,10 +225,10 @@ static int hb_rddRegister( char * szDriver, USHORT uiType )
if ( hb_parni( -1 ) != SUCCESS )
{
hb_xfree( pRddNewNode ); /* Delete de new RDD node */
return 3; /* Invalid FUNCTABLE */
return 3; /* Invalid FUNCTABLE */
}
if( !pRddList ) /* First RDD node */
if( !pRddList ) /* First RDD node */
pRddList = pRddNewNode;
else
{
@@ -263,19 +276,19 @@ static ERRCODE UnSupported_L( AREAP pArea, LONG lLong )
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
{
printf( "Calling default: Bof()\n" );
* pBof = pArea->fBof;
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
{
printf( "Calling default: Eof()\n" );
* pEof = pArea->fEof;
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
{
printf( "Calling default: Found()\n" );
* pFound = pArea->fFound;
return SUCCESS;
}
@@ -292,7 +305,10 @@ static ERRCODE AddField( AREAP pArea, LPDBFIELDINFO pFieldInfo )
pField = pArea->lpFields + pArea->uiFieldCount;
if( pArea->uiFieldCount > 0 )
( ( LPFIELD ) ( pField - 1 ) )->lpfNext = pField;
pField->sym = ( void * ) pFieldInfo->atomName;
pField->sym = ( void * ) hb_xgrab( HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 );
memset( pField->sym, 0, HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 );
strncpy( ( char * ) pField->sym, ( char * ) pFieldInfo->atomName,
HARBOUR_MAX_RDD_FIELDNAME_LENGTH );
pField->uiType = pFieldInfo->uiType;
pField->uiTypeExtended = pFieldInfo->typeExtended;
pField->uiLen = pFieldInfo->uiLen;
@@ -302,12 +318,55 @@ static ERRCODE AddField( AREAP pArea, LPDBFIELDINFO pFieldInfo )
return SUCCESS;
}
static ERRCODE FieldCount( AREAP pArea, USHORT * uiFields )
{
* uiFields = pArea->uiFieldCount;
return SUCCESS;
}
static ERRCODE FieldName( AREAP pArea, USHORT uiIndex, void * szName )
{
LPFIELD pField;
pField = pArea->lpFields;
while( pField && uiIndex > 1 )
{
pField = pField->lpfNext;
uiIndex--;
}
if( pField )
{
strncpy( ( char * ) szName, ( char * ) pField->sym,
HARBOUR_MAX_RDD_FIELDNAME_LENGTH );
return SUCCESS;
}
else
return FAILURE;
}
static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
{
printf( "Calling default: CreateFields()\n" );
return SUCCESS;
}
static ERRCODE GetValue( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
{
printf( "Calling default: GetValue()\n" );
return SUCCESS;
}
static ERRCODE RecCount( AREAP pArea, LONG * pRecCount )
{
printf( "Calling default: RecCount()\n" );
return SUCCESS;
}
static ERRCODE RecNo( AREAP pArea, PHB_ITEM pRecNo )
{
return SUCCESS;
}
static ERRCODE SetFieldExtent( AREAP pArea, USHORT uiFieldExtent )
{
pArea->uiFieldCount = 0;
@@ -319,7 +378,9 @@ static ERRCODE SetFieldExtent( AREAP pArea, USHORT uiFieldExtent )
static ERRCODE Close( AREAP pArea )
{
printf( "Calling default: Close()\n" );
if( pArea->lpFileInfo->hFile != FS_ERROR )
hb_fsClose( pArea->lpFileInfo->hFile );
pArea->lpFileInfo->hFile = FS_ERROR;
return SUCCESS;
}
@@ -332,11 +393,12 @@ static ERRCODE Create( AREAP pArea, LPDBOPENINFO pCreateInfo )
if( SELF_WRITEDBHEADER( pArea ) == FAILURE )
{
hb_fsClose( pArea->lpFileInfo->hFile );
pArea->lpFileInfo->hFile = FS_ERROR;
return FAILURE;
}
hb_fsClose( pArea->lpFileInfo->hFile );
pArea->lpFileInfo->hFile = 0;
pArea->lpFileInfo->hFile = FS_ERROR;
return SUCCESS;
}
@@ -349,29 +411,70 @@ static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
static ERRCODE NewArea( AREAP pArea )
{
pArea->lpFileInfo = ( LPFILEINFO ) hb_xgrab( sizeof( FILEINFO ) );
pArea->lpFileInfo->hFile = 0;
pArea->lpFileInfo->hFile = FS_ERROR;
pArea->lpFileInfo->pNext = 0;
pArea->lpExtendInfo = ( LPDBEXTENDINFO ) hb_xgrab( sizeof( DBEXTENDINFO ) );
memset( pArea->lpExtendInfo, 0, sizeof( DBEXTENDINFO ) );
pArea->lpExtendInfo->pRecNo = hb_itemNew( NULL );
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
{
printf( "Calling default: Open()\n" );
return SUCCESS;
USHORT uiFlags;
uiFlags = pOpenInfo->fReadonly ? FO_READ : FO_READWRITE;
uiFlags |= pOpenInfo->fShared ? FO_DENYNONE : FO_EXCLUSIVE;
pArea->lpFileInfo->hFile = hb_fsOpen( pOpenInfo->abName, uiFlags );
if( pArea->lpFileInfo->hFile == FS_ERROR )
return FAILURE;
if( SELF_READDBHEADER( pArea ) == FAILURE )
{
hb_fsClose( pArea->lpFileInfo->hFile );
pArea->lpFileInfo->hFile = FS_ERROR;
return FAILURE;
}
return SELF_GOTOP( pArea );
}
static ERRCODE Release( AREAP pArea )
{
LPFILEINFO pFileInfo;
LPFIELD pField;
if( pArea->lpFields )
{
pField = pArea->lpFields;
while( pField )
{
if( pField->sym )
hb_xfree( pField->sym );
pField = pField->lpfNext;
}
hb_xfree( pArea->lpFields );
}
while( pArea->lpFileInfo )
{
pFileInfo = pArea->lpFileInfo;
pArea->lpFileInfo = pArea->lpFileInfo->pNext;
hb_xfree( pFileInfo );
}
if( pArea->lpExtendInfo )
{
if( pArea->lpExtendInfo->bRecord )
hb_xfree( pArea->lpExtendInfo->bRecord );
if( pArea->lpExtendInfo->bOldRecord )
hb_xfree( pArea->lpExtendInfo->bOldRecord );
hb_itemRelease( pArea->lpExtendInfo->pRecNo );
hb_xfree( pArea->lpExtendInfo );
}
return SUCCESS;
}
@@ -404,6 +507,11 @@ static RDDFUNCS defTable = { Bof,
Skip,
AddField,
CreateFields,
FieldCount,
FieldName,
GetValue,
RecCount,
RecNo,
SetFieldExtent,
Close,
Create,
@@ -413,6 +521,7 @@ static RDDFUNCS defTable = { Bof,
Release,
StructSize,
SysName,
UnSupported_V,
UnSupported_V
};
@@ -788,7 +897,7 @@ HARBOUR HB_DBUSEAREA( void )
uiRddID = 0;
if( !( pRddNode = hb_FindRddNode( szDriver, &uiRddID ) ) )
{
MyError( "DBCMD/1015 Argument error", "DBCREATE" );
MyError( "DBCMD/1015 Argument error", "DBUSEAREA" );
return;
}
@@ -908,6 +1017,64 @@ HARBOUR HB_EOF( void )
hb_retl( bEof );
}
HARBOUR HB_FIELDCOUNT( void )
{
USHORT uiFields;
if( pCurrArea )
{
if( !( ( AREAP ) pCurrArea->pArea )->lprfsHost )
MyError( "No table error ", "9xxxx" );
else
SELF_FIELDCOUNT( ( AREAP ) pCurrArea->pArea, &uiFields );
}
hb_retni( uiFields );
}
HARBOUR HB_FIELDGET( void )
{
PHB_ITEM pItem;
USHORT uiField;
pItem = hb_itemNew( 0 );
uiField = hb_parni( 1 );
if( pCurrArea && uiField )
SELF_GETVALUE( ( AREAP ) pCurrArea->pArea, uiField, pItem );
hb_itemReturn( pItem );
hb_itemRelease( pItem );
}
HARBOUR HB_FIELDNAME( void )
{
USHORT uiFields, uiIndex;
char * szName;
if( pCurrArea )
{
if( !( ( AREAP ) pCurrArea->pArea )->lprfsHost )
MyError( "No table error ", "9xxxx" );
else
{
uiIndex = hb_parni( 1 );
if( SELF_FIELDCOUNT( ( AREAP ) pCurrArea->pArea, &uiFields ) != SUCCESS )
hb_retc( "" );
if( uiIndex > 0 && uiIndex <= uiFields )
{
szName = ( char * ) hb_xgrab( HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 );
SELF_FIELDNAME( ( AREAP ) pCurrArea->pArea, hb_parni( 1 ), szName );
hb_retc( szName );
hb_xfree( szName );
return;
}
}
}
hb_retc( "" );
}
HARBOUR HB_FOUND( void )
{
BOOL bFound = FALSE;
@@ -922,6 +1089,11 @@ HARBOUR HB_FOUND( void )
hb_retl( bFound );
}
HARBOUR HB_LASTREC( void )
{
HB_RECCOUNT();
}
HARBOUR HB_RDDLIST( void )
{
USHORT uiType;
@@ -1018,3 +1190,33 @@ HARBOUR HB_RDDSHUTDOWN( void )
hb_xfree( pRddNode );
}
}
HARBOUR HB_RECNO( void )
{
if( pCurrArea )
{
if( !( ( AREAP ) pCurrArea->pArea )->lprfsHost )
MyError( "No table error ", "9xxxx" );
else
{
SELF_RECNO( ( AREAP ) pCurrArea->pArea,
( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->pRecNo );
hb_itemReturn( ( ( AREAP ) pCurrArea->pArea )->lpExtendInfo->pRecNo );
}
}
}
HARBOUR HB_RECCOUNT( void )
{
LONG ulRecCount = 0;
if( pCurrArea )
{
if( !( ( AREAP ) pCurrArea->pArea )->lprfsHost )
MyError( "No table error ", "9xxxx" );
else
SELF_RECCOUNT( ( AREAP ) pCurrArea->pArea, &ulRecCount );
}
hb_retnl( ulRecCount );
}

View File

@@ -72,46 +72,71 @@ HB_INIT_SYMBOLS_END( dbf1__InitSymbols )
#pragma startup dbf1__InitSymbols
#endif
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
static ERRCODE ReadBuffer( AREAP pArea, LONG lRecNo )
{
printf( "Calling DBF: Bof()\n" );
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
{
printf( "Calling DBF: Eof()\n" );
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
{
printf( "Calling DBF: Found()\n" );
hb_fsSeek( pArea->lpFileInfo->hFile, pArea->lpExtendInfo->uiHeaderLen +
( lRecNo - 1 ) * pArea->lpExtendInfo->uiRecordLen, FS_SET );
if( hb_fsRead( pArea->lpFileInfo->hFile, pArea->lpExtendInfo->bRecord,
pArea->lpExtendInfo->uiRecordLen ) != pArea->lpExtendInfo->uiRecordLen )
{
memset( pArea->lpExtendInfo->bRecord, ' ', pArea->lpExtendInfo->uiRecordLen );
pArea->lpExtendInfo->bRecord[ pArea->lpExtendInfo->uiRecordLen ] = 0;
return FAILURE;
}
return SUCCESS;
}
static ERRCODE GoBottom( AREAP pArea )
{
printf( "Calling DBF: GoBottom()\n" );
return SUCCESS;
LONG lRecCount;
if( SELF_RECCOUNT( pArea, &lRecCount ) == FAILURE )
return FAILURE;
return SELF_GOTO( pArea, lRecCount );
}
static ERRCODE GoTo( AREAP pArea, LONG lRecNo )
{
printf( "Calling DBF: GoTo()\n" );
return SUCCESS;
LONG lRecCount;
if( SELF_RECCOUNT( pArea, &lRecCount ) == FAILURE )
return FAILURE;
if( lRecCount < 1 )
{
pArea->fBof = 1;
pArea->fEof = 1;
lRecNo = 1;
}
else
{
if( lRecNo > lRecCount + 1 )
lRecNo = lRecCount + 1;
if( lRecNo == 1 )
pArea->fBof = 1;
else
pArea->fBof = 0;
if( lRecNo == lRecCount + 1 )
pArea->fEof = 1;
else
pArea->fEof = 0;
}
hb_itemPutNL( pArea->lpExtendInfo->pRecNo, lRecNo );
if( lRecCount > 0 )
return ReadBuffer( pArea, lRecNo );
else
return SUCCESS;
}
static ERRCODE GoTop( AREAP pArea )
{
printf( "Calling DBF: GoTop()\n" );
return SUCCESS;
return SELF_GOTO( pArea, 1 );
}
static ERRCODE Skip( AREAP pArea, LONG lToSkip )
{
printf( "Calling DBF: Skip()\n" );
return SUCCESS;
return SELF_GOTO( pArea, hb_itemGetNL( pArea->lpExtendInfo->pRecNo ) + lToSkip );
}
static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
@@ -150,9 +175,73 @@ static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
return SUCCESS;
}
static ERRCODE Close( AREAP pArea )
static ERRCODE GetValue( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
{
printf( "Calling DBF: Close()\n" );
LPFIELD pField;
USHORT uiCount, uiOffset;
BYTE * szText, * szOldChar, szEndChar;
if( uiIndex > pArea->uiFieldCount )
return FAILURE;
pField = pArea->lpFields;
uiOffset = 1;
for( uiCount = 1; uiCount < uiIndex; uiCount++ )
{
if( pField->uiType == 'C' )
uiOffset += pField->uiLen + ( ( USHORT ) pField->uiDec << 8 );
else
uiOffset += pField->uiLen;
pField = pField->lpfNext;
}
szText = pArea->lpExtendInfo->bRecord + uiOffset;
switch( pField->uiType )
{
case 'C':
hb_itemPutCL( pItem, ( char * ) szText,
pField->uiLen + ( ( USHORT ) pField->uiDec << 8 ) );
break;
case 'N':
szOldChar = szText + pField->uiLen;
szEndChar = * szOldChar;
* szOldChar = 0;
if( pField->uiDec )
hb_itemPutND( pItem, atof( ( char * ) szText ) );
else
hb_itemPutNL( pItem, atof( ( char * ) szText ) );
* szOldChar = szEndChar;
break;
case 'D':
szOldChar = szText + pField->uiLen;
szEndChar = * szOldChar;
* szOldChar = 0;
hb_itemPutDS( pItem, ( char * ) szText );
* szOldChar = szEndChar;
break;
case 'L':
if( * szText == 'T' )
hb_itemPutL( pItem, 1 );
else
hb_itemPutL( pItem, 0 );
break;
}
return SUCCESS;
}
static ERRCODE RecCount( AREAP pArea, LONG * pRecCount )
{
DBFHEADER pHeader;
hb_fsSeek( pArea->lpFileInfo->hFile, 0, FS_SET );
if( hb_fsRead( pArea->lpFileInfo->hFile, ( BYTE * ) &pHeader,
sizeof( DBFHEADER ) ) != sizeof( DBFHEADER ) )
return FAILURE;
* pRecCount = pHeader.ulRecords;
return SUCCESS;
}
@@ -167,9 +256,82 @@ static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
static ERRCODE ReadDBHeader( AREAP pArea )
{
printf( "Calling DBF: Open()\n" );
DBFHEADER pHeader;
DBFIELDINFO pFieldInfo;
LPDBFFIELD pDBField;
USHORT uiDataLen;
char * szBuffer;
USHORT uiFields, uiCount;
hb_fsSeek( pArea->lpFileInfo->hFile, 0, FS_SET );
if( hb_fsRead( pArea->lpFileInfo->hFile, ( BYTE * ) &pHeader,
sizeof( DBFHEADER ) ) != sizeof( DBFHEADER ) )
return FAILURE;
pArea->lpExtendInfo->uiHeaderLen = pHeader.uiHeaderLen;
uiDataLen = pHeader.uiHeaderLen - sizeof( DBFHEADER );
szBuffer = ( char * ) hb_xgrab( uiDataLen );
if( hb_fsRead( pArea->lpFileInfo->hFile, ( BYTE * ) szBuffer,
uiDataLen ) != uiDataLen )
{
hb_xfree( szBuffer );
return FAILURE;
}
for( uiFields = 0; uiFields < uiDataLen; uiFields += 32 )
if( szBuffer[ uiFields ] == 0xD )
break;
uiFields /= 32;
if( ( uiDataLen / 32 ) < uiFields )
{
hb_xfree( szBuffer );
return FAILURE;
}
pArea->lpExtendInfo->uiRecordLen = 1;
SELF_SETFIELDEXTENT( pArea, uiFields );
pFieldInfo.typeExtended = 0;
pDBField = ( LPDBFFIELD ) szBuffer;
for( uiCount = 0; uiCount < uiFields; uiCount++ )
{
pFieldInfo.atomName = ( BYTE * ) pDBField->bName;
pFieldInfo.uiType = toupper( pDBField->bType );
if( pFieldInfo.uiType == 'N' )
{
pFieldInfo.uiLen = ( USHORT ) pDBField->bLen;
pFieldInfo.uiDec = ( USHORT ) pDBField->bDec;
}
else
{
if( pFieldInfo.uiType == 'L' || pFieldInfo.uiType == 'D' ||
pFieldInfo.uiType == 'M' )
{
pFieldInfo.uiLen = ( USHORT ) pDBField->bLen;
if( pFieldInfo.uiType == 'M' )
pArea->lpExtendInfo->fHasMemo = 1;
}
else if( pFieldInfo.uiType == 'C' )
{
pFieldInfo.uiLen = ( USHORT ) pDBField->bLen +
( ( USHORT ) pDBField->bDec << 8 );
}
pFieldInfo.uiDec = 0;
}
pArea->lpExtendInfo->uiRecordLen += pFieldInfo.uiLen;
SELF_ADDFIELD( pArea, &pFieldInfo );
pDBField++;
}
hb_xfree( szBuffer );
pArea->lpExtendInfo->bRecord = ( BYTE * ) hb_xgrab( pArea->lpExtendInfo->uiRecordLen + 1 );
memset( pArea->lpExtendInfo->bRecord, ' ', pArea->lpExtendInfo->uiRecordLen );
pArea->lpExtendInfo->bRecord[ pArea->lpExtendInfo->uiRecordLen ] = 0;
pArea->lpExtendInfo->bOldRecord = ( BYTE * ) hb_xgrab( pArea->lpExtendInfo->uiRecordLen + 1 );
memset( pArea->lpExtendInfo->bOldRecord, ' ', pArea->lpExtendInfo->uiRecordLen );
pArea->lpExtendInfo->bOldRecord[ pArea->lpExtendInfo->uiRecordLen ] = 0;
return SUCCESS;
}
@@ -269,24 +431,30 @@ static ERRCODE WriteDBHeader( AREAP pArea )
static RDDFUNCS dbfSuper = { 0 };
static RDDFUNCS dbfTable = { Bof,
Eof,
Found,
static RDDFUNCS dbfTable = { 0, /* Super Bof */
0, /* Super Eof */
0, /* Super Found */
GoBottom,
GoTo,
GoTop,
Skip,
0, /* Super AddField */
CreateFields,
0, /* Super FieldCount */
0, /* Super FieldName */
GetValue,
RecCount,
0, /* Super RecNo */
0, /* Super SetFieldsExtent */
Close,
0, /* Super Close */
0, /* Super Create */
Info,
0, /* Super NewArea */
Open,
0, /* Super Open */
0, /* Super Release */
0, /* Super StructSize */
0, /* Super SysName */
ReadDBHeader,
WriteDBHeader
};

View File

@@ -39,54 +39,6 @@ HB_INIT_SYMBOLS_END( dbfntx1__InitSymbols )
#pragma startup dbfntx1__InitSymbols
#endif
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
{
printf( "Calling DBFNTX: Bof()\n" );
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
{
printf( "Calling DBFNTX: Eof()\n" );
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
{
printf( "Calling DBFNTX: Found()\n" );
return SUCCESS;
}
static ERRCODE GoBottom( AREAP pArea )
{
printf( "Calling DBFNTX: GoBottom()\n" );
return SUCCESS;
}
static ERRCODE GoTo( AREAP pArea, LONG lRecNo )
{
printf( "Calling DBFNTX: GoTo()\n" );
return SUCCESS;
}
static ERRCODE GoTop( AREAP pArea )
{
printf( "Calling DBFNTX: GoTop()\n" );
return SUCCESS;
}
static ERRCODE Skip( AREAP pArea, LONG lToSkip )
{
printf( "Calling DBFNTX: Skip()\n" );
return SUCCESS;
}
static ERRCODE Close( AREAP pArea )
{
printf( "Calling DBFNTX: Close()\n" );
return SUCCESS;
}
static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
{
switch( uiIndex )
@@ -98,29 +50,28 @@ static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
{
printf( "Calling DBFNTX: Open()\n" );
return SUCCESS;
}
static RDDFUNCS ntxSuper = { 0 };
static RDDFUNCS ntxTable = { Bof,
Eof,
Found,
GoBottom,
GoTo,
GoTop,
Skip,
static RDDFUNCS ntxTable = { 0, /* Super Bof */
0, /* Super Eof */
0, /* Super Found */
0, /* Super GoBottom */
0, /* Super GoTo */
0, /* Super GoTop */
0, /* Super Skip */
0, /* Super AddField */
0, /* Super CreateFields */
0, /* Super FieldCount */
0, /* Super FieldName */
0, /* Super GetValue */
0, /* Super RecCount */
0, /* Super SetFieldExtent */
Close,
0, /* Super RecNo */
0, /* Super Close */
0, /* Super Create */
Info,
0, /* Super NewArea */
Open,
0, /* Super Open */
0, /* Super Release */
0, /* Super StructSize */
0, /* Super SysName */

View File

@@ -38,63 +38,15 @@ HB_INIT_SYMBOLS_END( delim1__InitSymbols )
#pragma startup delim1__InitSymbols
#endif
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
{
printf( "Calling DELIM: Bof()\n" );
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
{
printf( "Calling DELIM: Eof()\n" );
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
{
printf( "Calling DELIM: Found()\n" );
return SUCCESS;
}
static ERRCODE GoBottom( AREAP pArea )
{
printf( "Calling DELIM: GoBottom()\n" );
return SUCCESS;
}
static ERRCODE GoTo( AREAP pArea, LONG lRecNo )
{
printf( "Calling DELIM: GoTo()\n" );
return SUCCESS;
}
static ERRCODE GoTop( AREAP pArea )
{
printf( "Calling DELIM: GoTop()\n" );
return SUCCESS;
}
static ERRCODE Skip( AREAP pArea, LONG lToSkip )
{
printf( "Calling DELIM: Skip()\n" );
return SUCCESS;
}
static ERRCODE Close( AREAP pArea )
{
printf( "Calling DELIM: Close()\n" );
return SUCCESS;
}
static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
{
printf( "Calling DELIM: Info()\n" );
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
static ERRCODE ReadDBHeader( AREAP pArea )
{
printf( "Calling DELIM: Open()\n" );
printf( "Calling DELIM: ReadDBHeader()\n" );
return SUCCESS;
}
@@ -106,26 +58,32 @@ static ERRCODE WriteDBHeader( AREAP pArea )
static RDDFUNCS delimSuper = { 0 };
static RDDFUNCS delimTable = { Bof,
Eof,
Found,
GoBottom,
GoTo,
GoTop,
Skip,
static RDDFUNCS delimTable = { 0, /* Super Bof */
0, /* Super Eof */
0, /* Super Found */
0, /* Super GoBottom */
0, /* Super GoTo */
0, /* Super GoTop */
0, /* Super Skip */
0, /* Super AddField */
0, /* Super CreateFields */
0, /* Super FieldCount */
0, /* Super FieldName */
0, /* Super GetValue */
0, /* Super RecCount */
0, /* Super RecNo */
0, /* Super SetFieldExtent */
Close,
0, /* Super Close */
0, /* Super Create */
Info,
0, /* Super NewArea */
Open,
0, /* Super Open */
0, /* Super Release */
0, /* Super StructSize */
0, /* Super SysName */
ReadDBHeader,
WriteDBHeader
};
};
HARBOUR HB__DELIM( void )
{

View File

@@ -38,63 +38,15 @@ HB_INIT_SYMBOLS_END( sdf1__InitSymbols )
#pragma startup sdf1__InitSymbols
#endif
static ERRCODE Bof( AREAP pArea, BOOL * pBof )
{
printf( "Calling SDF: Bof()\n" );
return SUCCESS;
}
static ERRCODE Eof( AREAP pArea, BOOL * pEof )
{
printf( "Calling SDF: Eof()\n" );
return SUCCESS;
}
static ERRCODE Found( AREAP pArea, BOOL * pFound )
{
printf( "Calling SDF: Found()\n" );
return SUCCESS;
}
static ERRCODE GoBottom( AREAP pArea )
{
printf( "Calling SDF: GoBottom()\n" );
return SUCCESS;
}
static ERRCODE GoTo( AREAP pArea, LONG lRecNo )
{
printf( "Calling SDF: GoTo()\n" );
return SUCCESS;
}
static ERRCODE GoTop( AREAP pArea )
{
printf( "Calling SDF: GoTop()\n" );
return SUCCESS;
}
static ERRCODE Skip( AREAP pArea, LONG lToSkip )
{
printf( "Calling SDF: Skip()\n" );
return SUCCESS;
}
static ERRCODE Close( AREAP pArea )
{
printf( "Calling SDF: Close()\n" );
return SUCCESS;
}
static ERRCODE Info( AREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
{
printf( "Calling SDF: Info()\n" );
return SUCCESS;
}
static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
static ERRCODE ReadDBHeader( AREAP pArea )
{
printf( "Calling SDF: Open()\n" );
printf( "Calling SDF: ReadDBHeader()\n" );
return SUCCESS;
}
@@ -106,26 +58,32 @@ static ERRCODE WriteDBHeader( AREAP pArea )
static RDDFUNCS sdfSuper = { 0 };
static RDDFUNCS sdfTable = { Bof,
Eof,
Found,
GoBottom,
GoTo,
GoTop,
Skip,
static RDDFUNCS sdfTable = { 0, /* Super Bof */
0, /* Super Eof */
0, /* Super Found */
0, /* Super GoBottom */
0, /* Super GoTo */
0, /* Super GoTop */
0, /* Super Skip */
0, /* Super AddField */
0, /* Super CreateFields */
0, /* Super FieldCount */
0, /* Super FieldName */
0, /* Super GetValue */
0, /* Super RecCount */
0, /* Super RecNo */
0, /* Super SetFieldExtent */
Close,
0, /* Super Close */
0, /* Super Create */
Info,
0, /* Super NewArea */
Open,
0, /* Super Open */
0, /* Super Release */
0, /* Super StructSize */
0, /* Super SysName */
ReadDBHeader,
WriteDBHeader
};
};
HARBOUR HB__SDF( void )
{