//
// (c) J. Dean Brock, 1999, 2002
//

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std ;

#include "btree.h"

char *Usage = "blist btfile" ;

void main(int argc, char *argv[])
{
  ifstream btFile ;
  blockRecT btNode;
  int i ;

  if (argc != 2) {
    cerr << Usage << endl ;
    exit(1) ;
  }
    
  btFile.open(argv[1], ios::in) ;
  if (btFile.fail()) {
    cerr << "Unable to open " << argv[1] << endl ;
    exit(1) ;
  }
  
  btFile.read((char *)&btNode, sizeof(blockRecT)) ;

  // First the first leaf
  while (!btFile.fail() && !isLeaf(&btNode)) {
    btFile.seekg(btNode.recs[0].value*sizeof(blockRecT), ios::beg) ;
    btFile.read((char *)&btNode, sizeof(blockRecT)) ;
  }

  for (i=0; i<getUsedRecords(&btNode); ++i)
    cout << setw(-KEYSIZE) << btNode.recs[i].name << ": "
	 << setw(10) << btNode.recs[i].value << endl ;


  // Now move through the rest of the leaves
  while (btNode.recs[METAPNTR].value != -1) {
    btFile.seekg(btNode.recs[METAPNTR].value*sizeof(blockRecT), ios::beg) ;
    btFile.read((char *)&btNode, sizeof(blockRecT)) ;
    for (i=0; i<getUsedRecords(&btNode); ++i)
      cout << setw(-KEYSIZE) << btNode.recs[i].name << ": "
	   << setw(10) << btNode.recs[i].value << endl ;
  }


}
