#include <direct.h>

#define XVT_INCL_NATIVE
#define STRICT

#include <applicat.h>
#include <colors.h>
#include <config.h>
#include <isam.h>
#include <mask.h>
#include <prefix.h>
#include <progind.h>
#include <urldefid.h>
#include <utility.h>
#include <archives.h>

#include "ba2200.h"


///////////////////////////////////////////////////////////
// Archiving application
///////////////////////////////////////////////////////////

class TArchive_app : public TApplication
{ 
  TArchive _arc;
  
protected:
  virtual bool create();
  virtual bool menu(MENU_TAG);

  KEY query(long& firm, char& floppy, TString& desc, bool& tmp) const;
  
public:      
  void stop_job();

  TArchive_app() {}
  virtual ~TArchive_app() {}  
};

bool TArchive_app::create()
{    
  TApplication::create();
  
  bool ok = TRUE;
  
  TIsamfile utenti(LF_USER, FALSE);
  utenti.open(_excllock);
  for (int err = utenti.first(); err == NOERR; err = utenti.next())
  {                            
    const TString16 u = utenti.get("USERNAME");
    if (u != user() && utenti.get_bool("CONNECTED"))
    {
      ok = error_box("L'archiviazione non puo' essere effettuata\n"
                     "se ci sono altri utenti collegati: %s", (const char*)u);
    }
  }
  utenti.close();
  
  if (ok)
    dispatch_e_menu(BAR_ITEM(1));      
  
  return ok;
}


KEY TArchive_app::query(long& firm, char& floppy, TString& desc, bool& temp) const
{
  TMask m("ba2200");
  const KEY k = m.run();
  
  if (k != K_QUIT)
  {             
    if (m.get(F_DATA) == "T")
      firm = -1;
    else  
      firm = m.get_long(F_CODDITTA);
    floppy = m.get(F_FLOPPY)[0];
    desc = m.get(F_DESCR);
    temp = m.get_bool(F_TEMP);
  }  
  
  return k;
}

bool TArchive_app::menu(MENU_TAG)
{ 
  KEY k;   
  long firm;
  char floppy;
  TString80 desc;
  bool temp;
  
  while ((k = query(firm, floppy, desc, temp)) != K_QUIT)
  {
    if (k == K_SAVE) _arc.backup(firm, floppy, desc);
    else             _arc.restore(firm, floppy, temp);
  }
  
  return FALSE;
}

int ba2200(int argc, char* argv[])
{ 
  TArchive_app a;
  a.run(argc, argv, "Archiviazione");                  
  return 0;
}