File: dumpdbt.cpp

package info (click to toggle)
xdb 1.2.0-5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,676 kB
  • ctags: 1,055
  • sloc: cpp: 14,001; sh: 6,343; makefile: 150
file content (109 lines) | stat: -rw-r--r-- 3,368 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*  $Id: dumpdbt.cpp,v 1.8 1999/03/19 10:56:32 willy Exp $

    Xbase project source code

    This program is used for debugging the memo file logic

    Copyright (C) 1997  Startech, Gary A. Kunkel   
    email - xbase@startech.keller.tx.us
    www   - http://www.startech.keller.tx.us/xbase.html

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    V 1.0   10/10/97   - Initial release of software
    V 1.5   1/2/97     - Added memo field support
    V 1.6a  5/1/98     - Added expression support
    V 1.8   11/29/98   - Version 1.8 upgrade
*/

#include <xdb/xbase.h>

int main( int ac, char **av )
{
#ifdef XB_MEMO_FIELDS
   xbXBase x;
   xbDbf dbf( &x );

   if( ac <= 1 ){
     cout << "\nUsage: dumpdbt filename...\n";
     return 1;
   }

   for( int i = 1; i < ac; ++i ){
     char* filename = av[i];
     xbDbf dbf( &x );
      

     if( dbf.OpenDatabase( filename )){
        cout << "\nCant open input file " << filename;
        return 2;
     }
  
     cout << "\n\nFree Block Chain....";
#ifdef XBASE_DEBUG
     dbf.DumpMemoFreeChain();
     cout <<"\nEnd of free block chain\n***********************************";
#else
     cout << "\nXBASE_DEBUG is not compiled in\n";
#endif

   /* lock the memo file */
#  ifdef XB_LOCKING_ON
     dbf.LockMemoFile( F_SETLK, F_RDLCK );
#  endif /* XB_LOCKING_ON */

        if( !dbf.MemoFieldsPresent() ) {
            cout << "No memo fields exist in " << filename << endl;
        } else {
            xbLong BufSize = 0L;
            char* Buf = NULL;
            for( xbLong l = 1; l <= dbf.NoOfRecords(); l++ )
      {
         dbf.GetRecord( l );
         cout << "\nRecord # " << dbf.GetCurRecNo();
                for( int j = 0; j < dbf.FieldCount(); j++ ) {
                    if( dbf.GetFieldType( j ) == 'M' ) {
                        int len = dbf.GetMemoFieldLen( j );
               cout << "\nMemo field " << dbf.GetFieldName(j) << " length = " << len;
               cout << " Head Block = " << dbf.GetLongField( j ) << "\n";
               if( len > BufSize )
               {
                  if( BufSize ) free( Buf );
                  if(( Buf = (( char *) malloc( len ))) == NULL )
                     return XB_NO_MEMORY;
                  BufSize = len;
               }
               dbf.GetMemoField( j, len, Buf, F_SETLKW );
                        for( int i = 0; i < len; i++ )
                  cout << Buf[i];
            }
      }
   }
        

   /* unlock the memo file */
#  ifdef XB_LOCKING_ON
       dbf.LockMemoFile( F_SETLK, F_UNLCK );
#  endif /* XB_LOCKING_ON */

       cout << "\n";
       dbf.CloseDatabase();
     }
#else
     cout << "\nXB_MEMO_FIELDS is not compiled in\n";
#endif
   }
   return 0;
}