#ifndef __ARCHIVES_H
#define __ARCHIVES_H

#ifndef __STDIO_H
#include <stdio.h>
#endif

#ifndef __STRINGS_H
#include <strings.h>
#endif

///////////////////////////////////////////////////////////
// TArchive
///////////////////////////////////////////////////////////

class ALArchive;

// @doc EXTERNAL

// @class TArchive | Classe per effettuare compressione e archiviazione di dati
//
// @base public | TObject
class TArchive : public TObject

// @author:(INTERNAL) Angelo

// @access:(INTERNAL) Private Member
{
  // @ccost:(INTERNAL) BUFSIZE | 4096*7 | Dimensione del buffer di lettura/scrittura su dischetto
  enum { BUFSIZE = 4096*7 };
  // @cmember:(INTERNAL) Oggetto per la gestione di archivi (vedi <c ALArchive>)
  ALArchive* _arc;

// @access Protected Member
protected:
  // @cmember NON IMPLEMENTATA
  KEY query() const;
  // @cmember Funzione per richiedere all'utente il dischetto e per controllare la
  //					corretta sequenza dei dischetti da inserire
  FILE* ask_disk(TFilename& name, int disk, char floppy, bool lettura) const;
  
  // @cmember Ritorna la dimensione del file <p f>
  long fsize(FILE* f) const;                          
  // @cmember Spezza il file in modo da farlo stare sul dischetto
  bool fsplit(const char* filename, char floppy, const char* desc = "") const;
  // @cmember Ricostruisce il file spezzato
  bool fbuild(const char* filename, char floppy) const;
  
  // @cmember Ricostruisce la lista dei file contenuti nel backup
  int build_backup_list(long firm, TString_array& fl) const;
  // @cmember Costruisce la lista delle directory da scompattare
  int build_restore_list(long firm, char floppy, TString_array& fl) const;

// @access Public Member
public:   
  // @cmember Effettua il backup della directory
  bool backup(const char* dir, char floppy, const char* desc, bool pr_set=TRUE);
  // @cmember Effettua il backup della ditta
  bool backup(long firm, char floppy, const char* desc, bool pr_set=TRUE);

  // @cmember Effettua il restore della directory
  bool restore(const char* dir, char floppy, bool temp, bool pr_set=TRUE);
  // @cmember Effettua il restore della ditta
  bool restore(long firm, char floppy, bool temp, bool pr_set=TRUE);

  // @cmember Interrompe le operazioni
  void stop_job();
};           

#endif