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
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* i4dump.c   (C)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved.
 | |
| 
 | |
|    Displays the contents of a tag.
 | |
|    Currently uses printf */
 | |
| 
 | |
| #include "d4all.h"
 | |
| #ifndef S4UNIX
 | |
| #ifdef __TURBOC__
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifndef S4INDEX_OFF
 | |
| 
 | |
| /* not supported for FoxPro compact index file structures */
 | |
| #ifdef S4MDX    /*  ifndef S4FOX  */
 | |
| 
 | |
| static void output( int h, char * s )
 | |
| {
 | |
|   write( h, s, strlen(s) ) ;
 | |
| }
 | |
| 
 | |
| static int  t4dump_do( TAG4 *t4, int out_handle, int level, int display_all )
 | |
| {
 | |
|   char out_buf[200] ;
 | |
|   int rc, i_key ;
 | |
|   B4BLOCK *block_on ;
 | |
|   char buf[ I4MAX_KEY_SIZE ] ;
 | |
|   int len ;
 | |
| 
 | |
|   rc = t4down( t4 ) ;
 | |
|   if ( rc < 0 || rc == 2 )
 | |
|     return -1 ;
 | |
|   block_on = t4block( t4 ) ;
 | |
| 
 | |
|   if ( b4leaf( block_on ) && !display_all )
 | |
|   {
 | |
|     t4up( t4 ) ;
 | |
|     return 0 ;
 | |
|   }
 | |
| 
 | |
|   if ( b4leaf( block_on) )
 | |
|   {
 | |
|     M4PRINT( out_buf, "\r\n\r\nLeaf B4BLOCK #: %ld   Level %d\r\n\r\n", block_on->file_block, level ) ;
 | |
|     output( out_handle, out_buf ) ;
 | |
|     output( out_handle, "Record Number   Key\r\n" ) ;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     M4PRINT( out_buf, "\r\n\r\nBranch B4BLOCK #: %ld   Level %d\r\n\r\n", block_on->file_block, level ) ;
 | |
|     output( out_handle, out_buf ) ;
 | |
|     output( out_handle, "FILE4 B4BLOCK      Key\r\n" ) ;
 | |
|   }
 | |
| 
 | |
|   for ( i_key = 0; i_key < block_on->n_keys; i_key++ )
 | |
|   {
 | |
|     M4PRINT( out_buf, "\r\n%10ld      ", b4key(block_on,i_key)->num ) ;
 | |
| 
 | |
|     output( out_handle, out_buf ) ;
 | |
|     if ( t4type( t4 ) == r4str )
 | |
|     {
 | |
|       len =  50 ;
 | |
|       if ( len > t4->header.key_len )
 | |
|         len =  t4->header.key_len ;
 | |
| 
 | |
|       memcpy( buf, b4key_key( block_on, i_key ), len ) ;
 | |
|       buf[len] =  0 ;
 | |
|       output( out_handle, buf ) ;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if ( b4leaf( block_on ) )
 | |
|   {
 | |
|     t4up( t4 ) ;
 | |
|     return 0 ;
 | |
|   }
 | |
| 
 | |
|   M4PRINT( out_buf, "\r\n%10ld      ", b4key( block_on, i_key )->num ) ;
 | |
|   output( out_handle, out_buf ) ;
 | |
| 
 | |
|   block_on->key_on = 0 ;
 | |
|   do
 | |
|   {
 | |
|     rc = t4dump_do( t4, out_handle, level + 1, display_all ) ;
 | |
|     if ( rc > 0 )
 | |
|       e4severe( e4result, E4_T4DUMP ) ;
 | |
|     if ( rc < 0 )
 | |
|       return -1 ;
 | |
|   } while ( b4skip( block_on, 1) == 1 ) ;
 | |
| 
 | |
|   t4up(t4) ;
 | |
|   return 0 ;
 | |
| }
 | |
| 
 | |
| int S4FUNCTION t4dump( TAG4 *t4, int out_handle, int display_all )
 | |
| {
 | |
|   int rc ;
 | |
| 
 | |
| #ifdef S4DEBUG
 | |
|   if ( t4 == 0 )
 | |
|     e4severe( e4parm, E4_T4DUMP ) ;
 | |
| #endif
 | |
| 
 | |
|   if ( t4->code_base->error_code < 0 )
 | |
|     return -1 ;
 | |
| 
 | |
|   rc = i4lock( t4->index ) ;
 | |
|   if ( rc )
 | |
|     return rc ;
 | |
| 
 | |
|   if ( t4free_all( t4 ) < 0 )
 | |
|     return -1 ;
 | |
| 
 | |
|   output( out_handle, "\r\n\r\n" ) ;
 | |
|   return t4dump_do( t4, out_handle, 0, display_all ) ;
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 |