168 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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 */
 |