#ifndef __PREFIX_H
#define __PREFIX_H

#ifndef __EXTCTYPE_H
#include <extctype.h>
#endif

#ifndef __FILES_H
#include <files.h>
#endif

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

// @doc EXTERNAL

// @class TPrefix | Classe contenente le informazioni sulla ditta correntemente in uso
//
// @base public | TObject     
class TPrefix : public TObject

// @author:(INTERNAL) Sandro-Guido
{
  // @access:(INTERNAL) Private Member
  
  // @cmember:(INTERNAL) Contenuto del file "prefix.txt"
  TString _prefix; 
  // @cmember:(INTERNAL) Array di flag di apertura dei file (dir.gen)
  int* _dirfl;
  // @cmember:(INTERNAL) Array di flag di apertura dei file (trc.gen)
  int* _recfl;
  // @cmember:(INTERNAL) Livello degli archivi
  long _filelevel;
  // @cmember:(INTERNAL) Numero di files esitenti
  int _items;
  
  // @cmember:(INTERNAL) Puntatore alla lista dei file (dir.gen)
  SecDef* _fdir;
  // @cmember:(INTERNAL) Puntatore alla lista dei record (trc.gen)
  SecDef* _rdir;
  
  // @access Protected Member
protected:        
  // @cmember Verifica l'effettiva esistenza della directory <p s> sotto 
  //          la directory dati 
  bool test(const char* s) const ;
  // @cmember Copia fisicamente la stringa <p _prefix> nel file "prefix.txt"
  void put();
  
  // @access Public Member          
public:  
  // @cmember Setta la ditta corrente
  void set(const char* name = NULL, bool force = FALSE, TFilelock mode = _manulock);
  // @cmember Controlla l'esistenza di un codice ditta
  bool exist(long codditta) const;
  // @cmember Controlla l'esistenza di un codice ditta e che non sia in uso
  bool test(long codditta) const;
  // @cmember Ritorna il codice della ditta corrente
  long get_codditta() const ;
  // @cmember Setta il codice della ditta corrente
  bool set_codditta(long codditta, bool force = FALSE);
  // @cmember Ritorna il contenuto della variabile <p _prefix>
  const char* name() const 
  { return _prefix;}
  // @cmember Ritorna il livello degli archivi
  long filelevel() const 
  {return _filelevel;} 
  
  // @cmember Ritorna il numero di archivi
  int items() const 
  { return _items; }
  // @cmember Ritorna la descrizione del file passato
  const char* description(const char* cod) const;
  // @cmember Ritorna la descrizione del file passato
  const char* description(int cod) const;
  // @cmember Controlla che la ditta attiva sia una ditta (e non es. dati comuni)
  bool is_firm() const 
  { return _prefix.len() == 6 && _prefix[5] == 'a';}
  // @cmember Controlla che siano attivi i dati comuni (e non una ditta)
  bool is_com() const  
  { return !is_firm();}

  // @cmember Riapre tutti gli archivi della ditta attiva
  void reopen() const ;
  
  // @cmember Costruttore
  TPrefix();
  // @cmember Distruttore
  virtual ~TPrefix();
};


const char* firm2dir(long codditta);

TString& user();

TPrefix& prefix_init(); 
TPrefix& prefix();
void prefix_destroy();

#endif // __PREFIX_H