execp.* Corretta gestione nomi ed errori della classe TExternal_app extctype.h Tolte struct inutili usate da campo files.h Tolte variabili inutili usate da campo isam.cpp Corretta ricezione files di testo isam.h Tolti flags di linkrecinst git-svn-id: svn://10.65.10.50/trunk@6349 c028cbd2-c16b-5b4b-a496-9718f37d4682
269 lines
8.7 KiB
C++
Executable File
269 lines
8.7 KiB
C++
Executable File
#ifndef __FILES_H
|
|
#define __FILES_H
|
|
|
|
#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
|
|
long& 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 = short(nfields);}
|
|
// @cmember Assegna il numero di chiavi di ordinamento del tracciato record
|
|
void set_keys(int nkeys)
|
|
{ _rec->NKeys = short(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 fields() > 0 ? _rec->Fd[fields() - 1].RecOff + _rec->Fd[fields() - 1].Len : 0; }
|
|
|
|
#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
|
|
|