121 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* i4dump.c   (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */
 | |
| 
 | |
| #include "d4all.h"
 | |
| #ifndef S4UNIX
 | |
|    #ifdef __TURBOC__
 | |
|       #pragma hdrstop
 | |
|    #endif
 | |
| #endif
 | |
| 
 | |
| #ifdef S4STAND_ALONE
 | |
| 
 | |
| #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 tfile4dumpDo( TAG4FILE *t4, int outHandle, int level, int displayAll )
 | |
| {
 | |
|    char outBuf[200] ;
 | |
|    int rc, iKey ;
 | |
|    B4BLOCK *blockOn ;
 | |
|    char buf[ I4MAX_KEY_SIZE ] ;
 | |
|    int len ;
 | |
| 
 | |
|    rc = tfile4down( t4 ) ;
 | |
|    if ( rc < 0 || rc == 2 )
 | |
|       return -1 ;
 | |
|    blockOn = tfile4block( t4 ) ;
 | |
| 
 | |
|    if ( b4leaf( blockOn ) && !displayAll )
 | |
|    {
 | |
|       tfile4up( t4 ) ;
 | |
|       return 0 ;
 | |
|    }
 | |
| 
 | |
|    if ( b4leaf( blockOn) )
 | |
|    {
 | |
|       M4PRINT( outBuf, "\r\n\r\nLeaf B4BLOCK #: %ld   Level %d\r\n\r\n", blockOn->fileBlock, level ) ;
 | |
|       output( outHandle, outBuf ) ;
 | |
|       output( outHandle, "Record Number   Key\r\n" ) ;
 | |
|    }
 | |
|    else
 | |
|    {
 | |
|       M4PRINT( outBuf, "\r\n\r\nBranch B4BLOCK #: %ld   Level %d\r\n\r\n", blockOn->fileBlock, level ) ;
 | |
|       output( outHandle, outBuf ) ;
 | |
|       output( outHandle, "FILE4 B4BLOCK      Key\r\n" ) ;
 | |
|    }
 | |
| 
 | |
|    for ( iKey = 0; iKey < blockOn->nKeys; iKey++ )
 | |
|    {
 | |
|       M4PRINT( outBuf, "\r\n%10ld      ", b4key(blockOn,iKey)->num ) ;
 | |
| 
 | |
|       output( outHandle, outBuf ) ;
 | |
|       if ( tfile4type( t4 ) == r4str )
 | |
|       {
 | |
|          len =  50 ;
 | |
|          if ( len > t4->header.keyLen )
 | |
|             len =  t4->header.keyLen ;
 | |
| 
 | |
|          memcpy( buf, b4keyKey( blockOn, iKey ), len ) ;
 | |
|          buf[len] =  0 ;
 | |
|          output( outHandle, buf ) ;
 | |
|       }
 | |
|    }
 | |
| 
 | |
|    if ( b4leaf( blockOn ) )
 | |
|    {
 | |
|       tfile4up( t4 ) ;
 | |
|       return 0 ;
 | |
|    }
 | |
| 
 | |
|    M4PRINT( outBuf, "\r\n%10ld      ", b4key( blockOn, iKey )->num ) ;
 | |
|    output( outHandle, outBuf ) ;
 | |
| 
 | |
|    blockOn->keyOn = 0 ;
 | |
|    do
 | |
|    {
 | |
|       rc = tfile4dumpDo( t4, outHandle, level + 1, displayAll ) ;
 | |
|       if ( rc > 0 )
 | |
|          return error4( t4->codeBase, e4result, E94905 ) ;
 | |
|       if ( rc < 0 )
 | |
|          return -1 ;
 | |
|    } while ( b4skip( blockOn, 1) == 1 ) ;
 | |
| 
 | |
|    tfile4up(t4) ;
 | |
|    return 0 ;
 | |
| }
 | |
| 
 | |
| int tfile4dump( TAG4FILE *t4, int outHandle, const int displayAll )
 | |
| {
 | |
|    int rc ;
 | |
| 
 | |
|    #ifdef E4PARM_LOW
 | |
|       if ( t4 == 0 )
 | |
|          return error4( 0, e4parm_null, E94902 ) ;
 | |
|    #endif
 | |
| 
 | |
|    if ( error4code( t4->codeBase ) < 0 )
 | |
|       return -1 ;
 | |
| 
 | |
|    rc = index4lock( t4->indexFile, 0L ) ;
 | |
|    if ( rc )
 | |
|       return rc ;
 | |
| 
 | |
|    if ( tfile4freeAll( t4 ) < 0 )
 | |
|       return -1 ;
 | |
| 
 | |
|    output( outHandle, "\r\n\r\n" ) ;
 | |
|    tfile4dumpDo( t4, outHandle, 0, displayAll ) ;
 | |
|    return index4unlock( t4->indexFile, 0L ) ;
 | |
| }
 | |
| 
 | |
| #endif /* S4MDX */
 | |
| #endif /* S4INDEX_OFF */
 | |
| #endif /* S4STAND_ALONE */
 |