which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* m4check.c   (c)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved. */
 | |
| 
 | |
| #include "d4all.h"
 | |
| 
 | |
| /* not supported for FoxPro FPT memo files */
 | |
| #ifndef S4MFOX
 | |
| #ifndef S4MNDX
 | |
| 
 | |
| #ifndef S4UNIX
 | |
| #ifdef __TURBOC__
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifndef S4MEMO_OFF
 | |
| int S4FUNCTION f4memo_check( MEMO4FILE *f4memo )
 | |
| {
 | |
|   F4FLAG flags ;
 | |
|   DATA4 *d4 ;
 | |
|   int  rc, i_field ;
 | |
|   long num_blocks, memo_id ;
 | |
|   MEMO4CHAIN_ENTRY cur ;
 | |
| 
 | |
|   d4 = f4memo->data ;
 | |
|   rc = d4lock_file( d4 ) ;
 | |
|   if ( rc != 0 )
 | |
|     return rc ;
 | |
| 
 | |
|   if ( ( rc = d4update( d4 ) ) != 0 )
 | |
|     return rc ;
 | |
| 
 | |
|   if ( f4flag_init( &flags, d4->code_base, file4len( &f4memo->file ) / f4memo->block_size ) < 0 )
 | |
|     return e4memory ;
 | |
| 
 | |
|   /* Set flags for the data file entries */
 | |
|   for ( d4top( d4 ) ; ! d4eof( d4 ) ; d4skip( d4, 1L ) )
 | |
|   {
 | |
|     for ( i_field = 0 ; i_field < d4->n_fields_memo ; i_field++ )
 | |
|     {
 | |
|       num_blocks = (f4memo_len(d4->fields_memo[i_field].field) + f4memo->block_size - 1) / f4memo->block_size ;
 | |
|       memo_id = f4long( d4->fields_memo[i_field].field ) ;
 | |
| 
 | |
|       if ( f4flag_is_any_set( &flags, memo_id, num_blocks ) )
 | |
|         return e4describe( d4->code_base, e4info, E4_F4MEMO_CHECK, E4_INFO_AME, (char *) 0 ) ;
 | |
|       if ( f4flag_set_range( &flags, memo_id, num_blocks ) < 0 )
 | |
|         return -1 ;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /* Set flags for the free chain */
 | |
|   memset( (void *)&cur, 0, sizeof(cur) ) ;
 | |
|   memo4file_chain_skip( f4memo, &cur ) ;  /* Read in root */
 | |
| 
 | |
|   for ( memo4file_chain_skip( f4memo, &cur ) ; cur.next != -1 ; memo4file_chain_skip( f4memo, &cur ) )
 | |
|   {
 | |
|     rc = f4flag_is_any_set( &flags, cur.block_no, cur.num) ;
 | |
|     if ( rc < 0 )
 | |
|       return -1 ;
 | |
|     if ( rc )
 | |
|       return e4describe( d4->code_base, e4info, E4_F4MEMO_CHECK, E4_INFO_AME, (char *) 0 ) ;
 | |
|     if ( f4flag_set_range( &flags, cur.block_no, cur.num ) < 0 )
 | |
|       return -1 ;
 | |
|   }
 | |
| 
 | |
|   rc = f4flag_is_all_set( &flags, 1, file4len( &f4memo->file ) / f4memo->block_size-1 ) ;
 | |
|   u4free( flags.flags ) ;
 | |
|   if ( rc == 0 )
 | |
|     return e4describe( d4->code_base, e4result, E4_F4MEMO_CHECK, E4_RESULT_WAS, (char *) 0 ) ;
 | |
|   if ( rc < 0 )
 | |
|     return -1 ;
 | |
| 
 | |
|   return 0 ;
 | |
| }
 | |
| 
 | |
| #endif  /*   ifndef S4MFOX   */
 | |
| #endif  /*   ifndef S4MNDX   */
 | |
| 
 | |
| #endif /*  ifndef S4MEMO_OFF */
 |