/* d4fresh.c (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */ #include "d4all.h" #ifndef S4UNIX #ifdef __TURBOC__ #pragma hdrstop #endif #endif int S4FUNCTION d4refresh( DATA4 *data ) { #ifdef E4PARM_HIGH if ( data == 0 ) return error4( 0, e4parm_null, E94201 ) ; #endif #ifdef S4CLIENT return 0 ; #else return dfile4refresh( data->dataFile ) ; #endif } #ifndef S4CLIENT #ifdef P4ARGS_USED #pragma argsused #endif int dfile4refresh( DATA4FILE *data ) { #ifndef S4SINGLE #ifndef S4OPTIMIZE_OFF #ifndef S4OFF_INDEX #ifdef N4OTHER TAG4FILE *tagOn ; #else INDEX4FILE *indexOn ; #endif #endif #ifdef E4PARM_LOW if ( data == 0 ) return error4( 0, e4parm_null, E91102 ) ; #endif file4refresh( &data->file ) ; #ifndef S4OFF_MEMO if ( data->memoFile.file.hand != -1 ) file4refresh( &data->memoFile.file ) ; #endif #ifndef S4OFF_INDEX #ifdef N4OTHER for( tagOn = 0 ;; ) { tagOn = dfile4tagNext( data, tagOn) ; if ( tagOn == 0 ) break ; file4refresh( &tagOn->file ) ; } #else for ( indexOn = 0 ;; ) { indexOn = (INDEX4FILE *)l4next( &data->indexes, indexOn ) ; if ( indexOn == 0 ) break ; file4refresh( &indexOn->file ) ; } #endif /* N4OTHER */ #endif /* S4OFF_INDEX */ if ( error4code( data->c4 ) < 0 ) return -1 ; #endif #endif return 0 ; } #endif #ifndef S4SERVER #ifndef S4CLIENT #ifndef S4SINGLE #ifndef S4OPTIMIZE_OFF #define S4DO_REFRESH #endif #endif #endif #ifdef P4ARGS_USED #pragma argsused #endif int S4FUNCTION d4refreshRecord( DATA4 *data ) { #ifndef S4OFF_MEMO int i ; #endif #ifdef S4DO_REFRESH OPT4 *opt ; int rc ; #ifdef E4PARM_HIGH if ( data == 0 ) return error4( 0, e4parm, E94203 ) ; #endif opt = &data->codeBase->opt ; if ( dfile4lockTestFile( data->dataFile, data4clientId( data ), data4serverId( data ) ) != 0 || data->dataFile->file.lowAccessMode != OPEN4DENY_NONE || opt == 0 || data->recNum <= 0L || data->recNum > d4recCount( data ) ) return 0 ; if ( data->dataFile->file.doBuffer ) /* also makes sure 'opt' should exist */ opt->forceCurrent = 1 ; #ifndef S4OFF_MEMO if ( data->dataFile->nFieldsMemo > 0 && data->dataFile->memoFile.file.hand != -1 ) { file4refresh( &data->dataFile->memoFile.file ) ; for ( i = 0; i < data->dataFile->nFieldsMemo; i++ ) f4memoReset( data->fieldsMemo[i].field ) ; } #endif data->recordChanged = 0 ; rc = d4goData( data, data->recNum ) ; if ( rc ) return rc ; data->bofFlag = data->eofFlag = 0 ; if ( data->dataFile->file.doBuffer ) /* also makes sure 'opt' should exist */ opt->forceCurrent = 0 ; #ifdef S4SERVER if ( dfile4lockTest( data->dataFile, data4clientId( data ), data4serverId( data ), data->recNum ) ) #else if ( d4lockTest( data, data->recNum ) ) #endif { memcpy( data->recordOld, data->record, dfile4recWidth( data->dataFile ) ) ; data->recNumOld = data->recNum ; #ifndef S4OFF_MEMO data->memoValidated = 1 ; #endif } #ifndef S4OFF_MEMO else data->memoValidated = 0 ; #endif if ( error4code( data->codeBase ) < 0 ) return -1 ; return 0 ; #else #ifndef S4OFF_MEMO if ( data->dataFile->nFieldsMemo > 0 ) { for ( i = 0; i < data->dataFile->nFieldsMemo; i++ ) f4memoReset( data->fieldsMemo[i].field ) ; } #endif data->recordChanged = 0 ; return d4go( data, data->recNum ) ; #endif } #ifdef S4DO_REFRESH #undef S4DO_REFRESH #endif #endif /* S4SERVER */