273 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef __FILES_H
 | |
| #define __FILES_H
 | |
| 
 | |
| #ifndef __OBJECT_H
 | |
| #include  <object.h>
 | |
| #endif 
 | |
| 
 | |
| #ifndef __EXTCTYPE_H
 | |
| #include  <extctype.h>
 | |
| #endif 
 | |
| 
 | |
| #ifndef __RECTYPES_H
 | |
| #include  <rectypes.h>
 | |
| #endif 
 | |
| 
 | |
| #ifndef __CONFIG_H
 | |
| #include  <config.h>
 | |
| #endif 
 | |
| 
 | |
| #define DESCPAR "FieldDescr"
 | |
| #define DESCTAB "TabDescr"
 | |
| #define DESCDIR "recdesc"
 | |
| 
 | |
| // @doc EXTERNAL
 | |
| 
 | |
| // @class TFile | Classe per la definizione dei metodi che comprendono tutte le
 | |
| //                procedure per l'accesso fisico di basso livello ai file.
 | |
| //
 | |
| // @base public | TObject
 | |
| class TFile : public TObject
 | |
| 
 | |
| // @author:(INTERNAL) Sandro
 | |
|   
 | |
| // @access:(INTERNAL) Private Member  
 | |
| {
 | |
| 
 | |
|   // @cmember:(INTERNAL) Descrittore del file
 | |
|   SecDef* _file;
 | |
|   // @cmember:(INTERNAL) Lunghezza del record
 | |
|   int _len;
 | |
|   // @cmember:(INTERNAL) Offset iniziale del file in settori
 | |
|   int _base;
 | |
| 
 | |
|   // @access Public Member
 | |
| public:
 | |
|   // @cmember Apre il file specificato
 | |
|   void open(const char* name, TFilelock lockmode = _manulock);
 | |
|   // @cmember Controlla se il file specificato e' corretto (TRUE se non vi sono errori)
 | |
|   bool verify(const char* name);
 | |
|   // @cmember Crea il file specificato
 | |
|   void create(const char* name, TRecnotype nrecord = 10);
 | |
|   // @cmember Cambia le dimensioni di un file
 | |
|   void chsize(const char* name, TRecnotype nrecord);
 | |
|   // @cmember Chiude il file
 | |
|   void close();
 | |
|   // @cmember Elimina il file specificato
 | |
|   void unlink(const char* name);
 | |
|   // @cmember Legge un record dal file
 | |
|   void read(char* record, TRecnotype recnum, TReclock lock = _nolock);
 | |
|   // @cmember Scrive un record sul file
 | |
|   void write(char* record, TRecnotype recnum, TReclock lock = _nolock);
 | |
|   // @cmember Ritorna lo stato di errore del file
 | |
|   int  status() const ;
 | |
|   // @cmember Ritorna l'offset di base
 | |
|   int& base()
 | |
|   { return _base; }
 | |
|   // @cmember Ritorna la lunghezza del record
 | |
|   int& len()
 | |
|   { return _len; }
 | |
|   // @cmember Controlla che non vi siano errori nel file aperto (TRUE se tutto normale)
 | |
|   bool ok() const
 | |
|   { return status() == NOERR; }
 | |
|   // @cmember Controlla se vi sono errori nel file aperto (TRUE se non ci sono errori)
 | |
|   bool error() const 
 | |
|   { return status() != NOERR; }
 | |
| 
 | |
|   // @cmember Costruttore
 | |
|   TFile(int lenrec = 0, int base = 0);
 | |
|   // @cmember Distruttore
 | |
|   virtual ~TFile();
 | |
| };
 | |
| 
 | |
| 
 | |
| // @doc EXTERNAL
 | |
| 
 | |
| // @class TDir | Classe per la gestione del file "dir.gen"
 | |
| //
 | |
| // @base public | TObject
 | |
| class TDir : public TObject
 | |
| 
 | |
| // @author:(INTERNAL) Sandro
 | |
| 
 | |
| // @access:(INTERNAL) Private Member
 | |
| {  
 | |
| 
 | |
|   // @cmember:(INTERNAL) Descrittore del file
 | |
|   FileDes* _dir;
 | |
|   // @cmember:(INTERNAL) Numero di file presenti
 | |
|   int _num;
 | |
|   // @cmember:(INTERNAL) Appartenenza al direttorio comune (TRUE) o a quello della ditta
 | |
|   bool _com;
 | |
| 
 | |
|   // @access Public Member
 | |
| public:
 | |
|   // @cmember Aggiorna l'oggetto TDir con i paramtri del file indicato
 | |
|   void get(int nfile, TReclock lock = _nolock, TDirtype dirtype = _nordir, TDirop op = _nordirop);
 | |
|   // @cmember Aggiorna il file indicato con i parametri passati
 | |
|   void put(int nfile, TDirtype dirtype = _nordir, TDirop op = _nordirop);
 | |
|   // @cmember Azzera i parametri del file selezionato
 | |
|   void zero();
 | |
| 
 | |
|   // @cmember Setta il nome del file
 | |
|   void set_name (const char * name);
 | |
|   // @cmember Setta l'EOX del file
 | |
|   void set_eox(const RecNoType eox);
 | |
|   // @cmember Setta la lunghezza del file
 | |
|   void set_len(const UINT16 len);
 | |
|   // @cmember Setta il file con i parametri passati
 | |
|   void set (const char * name, const RecNoType eod, const RecNoType flag, const char * des, const char * calc);
 | |
| 
 | |
|   // @cmember Stampa la descrizione del direttorio sull'output selezionato
 | |
|   virtual void print_on(ostream& out) const;
 | |
|   // @cmember Legge la descrizione del direttorio dall' input selezionato
 | |
|   virtual void read_from(istream& in);
 | |
| 
 | |
|   // @cmember Ritorna il nome del file selezionato
 | |
|   const char* name() const;
 | |
|   // @cmember Ritorna il nome dei file dati selezionato
 | |
|   const char* filename() const;
 | |
|   // @cmember Ritorna la descrizione del file selezionato
 | |
|   const char* des() const;
 | |
|   // @cmember Ritorna la descrizione della tabella
 | |
|   static const char* tab_des(const char* tabname);
 | |
|   // @cmember Ritorna l'espressione associata al file selezionato
 | |
|   const char* expr() const;
 | |
|   // @cmember Ritorna l'EOD del file selezionato
 | |
|   TRecnotype& eod() const;
 | |
|   // @cmember Ritorna l'EOX del file selezionato
 | |
|   TRecnotype& eox() const;
 | |
|   // @cmember Ritorna il flag del file selezionato
 | |
|   TRecnotype& flags() const;
 | |
|   // @cmember Ritorna la lunghezza del tracciato record in bytes
 | |
|   word& len() const;
 | |
|   // @cmember Ritorna lo stato d'errore del file
 | |
|   int status(TDirtype dirtype = _nordir) const ;
 | |
|   // @cmember Ritorna il numero di file presenti
 | |
|   int  num() const
 | |
|   { return _num;}
 | |
|   // @cmember Ritorna il numero di file presenti nella directory <p dirtype>
 | |
|   int items(TDirtype dirtype = _nordir) const;
 | |
|   // @cmember Ritorna il descrittore del file "dir.gen"
 | |
|   FileDes* filedesc() const
 | |
|   { return _dir; }
 | |
|   // @cmember Controlla se il file appartiene ai dati comuni. Valido solo se
 | |
|   //          la get e' stata effettuata con _sysdirop
 | |
|   bool is_com() const
 | |
|   {return _com;}
 | |
|   // @cmember Controlla se il file appartiene alla ditta. Valido solo se
 | |
|   //          la get e' stata effettuata con _sysdirop
 | |
|   bool is_firm() const
 | |
|   {return !_com;}
 | |
|   // @cmember Controlle se il file e' valido (nome esistente e dimensione
 | |
|   //          diversa da 0)
 | |
|   bool is_valid()
 | |
|   {return name()[0] > ' ' && len() > 0;}
 | |
|   // @cmember Controlla se il file e' attivato dalla chiave hardware.
 | |
|   //          Valido solo se prefhnd e settato a ""
 | |
|   bool is_active() const;
 | |
|   // @cmember Duplica il tracciato record
 | |
|   virtual TObject* dup() const { return new TDir(*this);}
 | |
| 
 | |
|   // @cmember Costruttore
 | |
|   TDir(const TDir & d);
 | |
|   // @cmember Costruttore
 | |
|   TDir();
 | |
|   // @cmember Distruttore
 | |
|   virtual ~TDir();
 | |
| };
 | |
| 
 | |
| 
 | |
| // @doc EXTERNAL
 | |
| 
 | |
| // @class TTrec | Classe per le gestione dei tracciati record dei file
 | |
| //
 | |
| // @base public | TSortable
 | |
| class TTrec : public TSortable
 | |
| 
 | |
| // @author:(INTERNAL) Sandro
 | |
| 
 | |
| // @access:(INTERNAL) Private Member
 | |
| {  
 | |
| 
 | |
|   // @cmember:(INTERNAL) Descrittore del tracciato record
 | |
|   RecDes*  _rec;
 | |
|   // @cmember:(INTERNAL) Numero del file di appartenenza
 | |
|   int _num;
 | |
|   // @cmember:(INTERNAL) Puntatore al TConfig delle descrizioni
 | |
|   TConfig* _des;
 | |
|   // @cmember:(INTERNAL) Nome della tabella 
 | |
|   TString  _tab;
 | |
| 
 | |
|   // @access Protected Member
 | |
| protected:
 | |
|   // @cmember Permette di comparare due oggetti (vedi classe <c TSortable>)
 | |
|   int compare(const TSortable& a) const;
 | |
| 
 | |
|   // @access Public Member
 | |
| public:
 | |
|   // @cmember Assegna all'oggetto TTrec il tracciato record del file indicato
 | |
|   void get(int nfile, TDirtype dirtype = _nordir);
 | |
|   // @cmember Setta il file indicato con il tracciato record dell'oggetto
 | |
|   void put(int nfile, TDirtype dirtype = _nordir);
 | |
|   // @cmember Azzera il tracciato record
 | |
|   void zero();
 | |
|   // @cmember Costruisce i puntatori per la ricerca dei campi
 | |
|   void rehash();
 | |
|   // @cmember Ritorna lo stato di errore del file
 | |
|   int status(TDirtype dirtype = _nordir) const ;
 | |
|   // @cmember Ritorna il numero del file
 | |
|   int num() const
 | |
|   { return _num;}
 | |
|   // @cmember Ritorna il numero del campo <p fieldname>
 | |
|   int field(const char* fieldname) const;
 | |
|   // @cmember Ritorna il descrittore del tracciato record
 | |
|   RecDes* rec() const
 | |
|   { return _rec;}
 | |
|   // @cmember Assegna un oggetto TTrec
 | |
|   TTrec& operator =(const TTrec& b);
 | |
|   // @cmember Ritorna il numero di campi del tracciato record
 | |
|   int fields() const
 | |
|   { return _rec->NFields; }
 | |
|   // @cmember Ritorna il numero di chiavi di ordinamento del tracciato record
 | |
|   int keys() const
 | |
|   { return _rec->NKeys; }
 | |
|   // @cmember Assegna il numero di campi del tracciato record
 | |
|   void set_fields(int nfields)
 | |
|   { _rec->NFields = nfields;}
 | |
|   // @cmember Assegna il numero di chiavi di ordinamento del tracciato record
 | |
|   void set_keys(int nkeys)
 | |
|   { _rec->NKeys = nkeys;}
 | |
|   // @cmember Ritorna una token string contenente la descrizione del campo
 | |
|   const char* fielddef(int fld) const;
 | |
|   // @cmember Ritorna una stringa contenente la chiave
 | |
|   const char* keydef(int key) const;
 | |
|   // @cmember Ritorna la lunghezza del record
 | |
|   int len() const
 | |
|   { return _rec->Fd[fields() - 1].RecOff + _rec->Fd[fields() - 1].Len; }
 | |
|   
 | |
| #ifndef FOXPRO
 | |
|   // @cmember Aggiorna la chiave. <p desc> e' una token string
 | |
|   void update_keydef(int key, const char* desc);
 | |
|   // @cmember Aggiorna il campo. <p desc> e' una token string
 | |
|   void update_fielddef(int nfld, const char* desc);
 | |
|   // @cmember Stampa il tracciato record sull'output selezionato
 | |
|   virtual void print_on(ostream& out) const;
 | |
|   // @cmember Legge il tracciato record da input selezionato
 | |
|   virtual void read_from(istream& in);
 | |
|   void set_des(TConfig* c = NULL, const char* tab = "") { _des = c; _tab = tab;}
 | |
| #endif
 | |
|   // @cmember Duplica il descrittore di file
 | |
|   virtual TObject* dup() const { return new TTrec(*this);}
 | |
| 
 | |
|   // @cmember Costruttore
 | |
|   TTrec(const TTrec & r);
 | |
|   // @cmember Costruttore
 | |
|   TTrec();
 | |
|   // @cmember Distruttore
 | |
|   virtual ~TTrec();
 | |
| };
 | |
| 
 | |
| #endif // __FILES_H
 | |
| 
 |