campo-sirio/cb/source/d4fresh.c
alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

168 lines
4.2 KiB
C
Executable File

/* 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 */