static HB_ERRCODE hb_sdfNextRecord( SDFAREAP pArea ) { HB_TRACE( HB_TR_DEBUG, ( "hb_sdfNextRecord(%p)", pArea ) ); if( pArea->fPositioned ) { pArea->ulRecNo++; return hb_sdfReadRecord( pArea ); } return HB_SUCCESS; }
/* * Position cursor at the first record. */ static HB_ERRCODE hb_sdfGoTop( SDFAREAP pArea ) { HB_TRACE( HB_TR_DEBUG, ( "hb_sdfGoTop(%p)", pArea ) ); if( SELF_GOCOLD( &pArea->area ) != HB_SUCCESS ) return HB_FAILURE; pArea->area.fTop = HB_TRUE; pArea->area.fBottom = HB_FALSE; pArea->nRecordOffset = 0; pArea->ulRecNo = 1; if( hb_sdfReadRecord( pArea ) != HB_SUCCESS ) return HB_FAILURE; return SELF_SKIPFILTER( &pArea->area, 1 ); }
/* * Position cursor at the first record. */ static HB_ERRCODE hb_sdfGoTop( SDFAREAP pArea ) { HB_TRACE( HB_TR_DEBUG, ( "hb_sdfGoTop(%p)", pArea ) ); if( SELF_GOCOLD( &pArea->area ) != HB_SUCCESS ) return HB_FAILURE; pArea->area.fTop = HB_TRUE; pArea->area.fBottom = HB_FALSE; if( pArea->ulRecNo != 1 ) { if( pArea->ulRecNo != 0 || ! pArea->fReadonly ) /* generate RTE */ return SUPER_GOTOP( &pArea->area ); pArea->ulRecNo = 1; if( hb_sdfReadRecord( pArea ) != HB_SUCCESS ) return HB_FAILURE; } return SELF_SKIPFILTER( &pArea->area, 1 ); }
static HB_ERRCODE hb_sdfNextRecord( SDFAREAP pArea ) { HB_TRACE( HB_TR_DEBUG, ( "hb_sdfNextRecord(%p)", pArea ) ); if( ! pArea->fPositioned ) pArea->nNextOffset = ( HB_FOFFSET ) -1; else { if( pArea->nNextOffset == 0 ) { HB_USHORT uiRead, uiToRead, uiEolPos, uiRest = 0; HB_FOFFSET ulOffset = pArea->nRecordOffset; uiToRead = pArea->uiRecordLen + pArea->uiEolLen + 2; do { uiRead = ( HB_USHORT ) hb_fileReadAt( pArea->pFile, pArea->pRecord + uiRest, uiToRead - uiRest, ulOffset + uiRest ) + uiRest; if( uiRead > 0 && uiRead < uiToRead && pArea->pRecord[ uiRead - 1 ] == '\032' ) --uiRead; uiEolPos = ( HB_USHORT ) hb_strAt( pArea->szEol, pArea->uiEolLen, ( const char * ) pArea->pRecord, uiRead ); if( uiEolPos ) { --uiEolPos; if( uiRead < uiToRead && uiRead == uiEolPos + pArea->uiEolLen ) pArea->nNextOffset = ( HB_FOFFSET ) -1; else pArea->nNextOffset = ulOffset + uiEolPos + pArea->uiEolLen; } else if( uiRead < uiToRead ) { pArea->nNextOffset = ( HB_FOFFSET ) -1; } else { if( pArea->uiEolLen > 1 ) { uiRest = pArea->uiEolLen - 1; memcpy( pArea->pRecord, pArea->pRecord + uiRead - uiRest, uiRest ); } ulOffset += uiRead - uiRest; } } while( pArea->nNextOffset == 0 ); } pArea->ulRecNo++; } if( pArea->nNextOffset == ( HB_FOFFSET ) -1 ) { pArea->area.fEof = HB_TRUE; pArea->fPositioned = HB_FALSE; hb_sdfClearRecordBuffer( pArea ); return HB_SUCCESS; } pArea->nRecordOffset = pArea->nNextOffset; return hb_sdfReadRecord( pArea ); }