#ifndef __FILES_H #define __FILES_H #ifndef __OBJECT_H #include #endif #ifndef __EXTCTYPE_H #include #endif #ifndef __RECTYPES_H #include #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 { // @access Private Member // @cmember Descrittore del file SecDef* _file; // @cmember Lunghezza del record int _len; // @cmember 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; } bool error() const { return status() != NOERR; } // @cmember Costruttore TFile(int lenrec = 0, int base = 0); // @cmember Distruttore virtual ~TFile(); }; // @class TDir | Classe per la gestione del file "dir.gen" // // @base public | TObject class TDir : public TObject { // @access Private Member // @cmember Descrittore del file FileDes* _dir; // @cmember Numero di file presenti int _num; // @cmember 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 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 selezioanato 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(); // @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;} 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 Costruttore TDir(); // @cmember Distruttore virtual ~TDir(); }; // @class TTrec | Classe per le gestione dei tracciati record dei file // // @base public | TSortable class TTrec : public TSortable { // @access Private Member // @cmember Descrittore del tracciato record RecDes* _rec; // @cmember Numero del file di appartenenza int _num; // @access Protected Member protected: // @cmember Permette di comparare due oggetti (vedi classe ) 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;} 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.

e' una token string void update_keydef(int key, const char* desc); // @cmember Aggiorna il campo.

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); #endif // @cmember Costruttore TTrec(); // @cmember Distruttore virtual ~TTrec(); }; #endif // __FILES_H