/* Example for data chacking*/
#include "CifFileObj.h"
#include "DICFileObj.h"
#include "DDLFileObj.h"
#include <iostream.h>
#include <time.h>


#define FALSE 0
#define NS 10
int main(int argc, char *argv[]) {
  char *diags=NULL;
  ISTable *ddlformat;
  DDLFileObj * ddl = NULL;
  ISTable *dicformat;
  DICFileObj * dic = NULL;
  CifFileObj * fobjR = NULL;
  int err,warn;
  time_t start,end;
  FILE * fpN;
  char *cifFile=NULL;
  char *pname=NULL;
  pname = argv[0];

  if (argc < 2) {
    cerr << pname << ":  usage = <ciffile> " << endl;
    exit(1);
  }

  cifFile = (char *) calloc(strlen(argv[1]) + 1, sizeof(char));
  strcpy(cifFile,argv[1]);          

   time(&start);
  ddl = new DDLFileObj((char*)"ddl", WRITE_MODE, 80, "?", 1);
  ddlformat = new ISTable("ddlformat");
//  ddl->Read("./test/ndb_ddl",ddlformat, diags);
  ddl->Read((char*)"./test/ddl-mm",ddlformat, diags);
  cout<<"diags = ";
  if (diags != NULL)
  {
    cout<<diags;
  }
  cout<<endl;
  time(&end);
  cout<<"second(s)"<<difftime(end,start)<<endl;

  time(&start);
  if((fpN=fopen("./test/dictionary.odb","r")) == NULL) {
    cout<<"First time"<<endl;
    dicformat = new ISTable("dicformat");
    dic = new DICFileObj((char*)"./test/dictionary.odb", WRITE_MODE, 80, "?", 0);
    //  dic->Read("./test/ndb_dictionary.dic",ddl , dicformat, diags);
    dic->Read((char*)"./test/dictionary.dic",ddl , dicformat, diags);
  }
  else {
    fclose(fpN);
    dic = new DICFileObj((char*)"./test/dictionary.odb", READ_MODE, 80, "?", 0);
  }

  time(&end);
  cout<<"second(s)"<<difftime(end,start)<<endl;
  cout<<"diags = ";
  if (diags != NULL)
  {
    cout<<diags;
  }
  cout<<endl;

  dic->Compress(ddl);

  time(&start);
  fobjR = new CifFileObj("./test/tmp.odb", WRITE_MODE, 80, "?", 1);
  cout<<cifFile<<endl;
  fobjR->Read(cifFile,diags,err,warn);
  time(&end);
  cout<<"second(s)"<<difftime(end,start)<<endl;
  cout<<"============================="<<endl;
  time(&start);
  fobjR->DataChecking(dic);

  time(&end);
  cout<<"second(s)"<<difftime(end,start)<<endl;
  ddl->CloseFile(0);
  if (ddl) delete ddl;
  dic->CloseFile(1);
  if (dic) delete dic;
  fobjR->CloseFile(0);
  if (fobjR) delete fobjR;
exit(0);
}
