/* 
   (c) J. Dean Brock, 1998
   Written for UNCA CSCI 343
   Prints a B+-tree.
   Used for debugging.
*/

#include <stdio.h>
#include <strings.h>
#include <errno.h>

#include "btree.h"


main(int argc, char *argv[])
 {
  int rc, i, j ;
  int errflg = 0 ;
  char *filArg = NULL ;
  FILE * dbFile ;
  char usage[] = "bdump file-name\n" ;
  blockRecT block ;

  if (argc != 2) {
    (void) fputs(usage, stderr) ;
    exit(1) ;
  }

  filArg = argv[1] ;

  if ((dbFile = fopen(filArg, "r")) == (FILE *)NULL) {
    (void) fprintf(stderr, "Unable to open %s\n", filArg) ;
    perror("fopen") ;
    exit(1) ;
  }

  i = 0 ;
  while (fread((void *)&block, sizeof(blockRecT), 1, dbFile) == 1) {
    int numUsed = getUsedRecords(&block) ;
    if (isLeaf(&block)) {
      (void) fprintf(stdout, "Block%7d (LEAF-->%7d)\n",
		     i, block.recs[METAPNTR].value) ;
      for (j=0; j<numUsed; ++j)
	(void) fprintf(stdout, "  %-12.12s: %10d\n",
		       block.recs[j].name, block.recs[j].value) ;
    } else {
      (void) fprintf(stdout, "Block%7d (non-LEAF)\n", i) ;
      for (j=0; j<numUsed; ++j)
	(void) fprintf(stdout, "%10d\n%-12.12s\n",
		       block.recs[j].value, block.recs[j].name) ;
      (void) fprintf(stdout, "%10d\n", block.recs[numUsed].value) ;
    }
    fputc((int) '\n', stdout) ;
    ++i ;
  }


 }


