#ifndef __ISAM_H #define __ISAM_H #ifndef __CURRENCY_H #include #endif #ifndef __DATE_H #include #endif #ifndef __FILES_H #include #endif #ifndef __LFFILES_H #include #endif #ifndef __PREFIX_H #include #endif #define FIELDERR -1 #define RECORD_NON_FISICO (-1L) const int MAX_KEYS = 8; class TBaseisamfile; class TLocalisamfile; class TRecfield; class TMemo_data : public TString_array { TBit_array _dirty; TRecnotype _recno; TIsam_handle _isamfile; public: void destroy(); void init(TRecnotype recno, TIsam_handle file); TRecnotype recno() const { return _recno; } TIsam_handle file() const { return _isamfile; } void copy(const TMemo_data& m); bool is_dirty(int i) const { return _dirty[i]; } void set_dirty(int i, bool d = TRUE) { _dirty.set(i, d); } TMemo_data& operator=(const TMemo_data& m) { copy(m); return *this; } TMemo_data(const TMemo_data& m) { copy(m); } TMemo_data() : _recno(RECORD_NON_FISICO), _isamfile(NULL) { } virtual ~TMemo_data() { } }; // @doc EXTERNAL // @class TRectype | Classe per la definizione del tipo di record del file // // @base public | TSortable class TRectype : public TSortable // @author:(INTERNAL) Alex { // @cfriend TRecfield friend class TRecfield; // @access Protected Member protected: // @cmember:(INTERNAL) Puntatore all'inizio del record char* _rec; // @cmember:(INTERNAL) Numero logico del record int _logicnum; // @cmember:(INTERNAL) Lunghezza del record int _length; // @cmember:(INTERNAL) Indica se il record e' vuoto bool _isempty; // @cmember:(INTERNAL) Indentificatore della tabella char _tab[5]; // @cmember:(INTERNAL) Campo "COD" della tabella TMemo_data* _memo_data; // @access Protected Member protected: // @cmember Segnalazione di un campo inesistente virtual void unknown_field(const char* name) const; // @cmember Ritorna il nome dell'ultimo campo chiave identificato da

const char* last_key_field(int key) const; // @cmember Ritorna il contenuto del campo

-esimo const char* start(int nf) const; // @cmember Permette di settare il valore di

void setempty(bool val) { _isempty = val;} // @cmember Ritorna il contenuto del campo

(non tipizzata) virtual const TString & get_str(const char* fieldname) const ; // @cmember Setta il contenuto del campo

(non tipizzata) virtual void put_str(const char* fieldname, const char* val); // @access Public Member public: // @cmember Duplica il tipo di record virtual TObject* dup() const; // @cmember Compara due tipo di record del file (vedi ) virtual int compare(const TSortable& s) const; // @cmember Legge il file

con il tipo di record virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock); // @cmember Legge il file

con il tipo di record alla posizione desiderata virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop = _nolock); // @cmember Legge il prossimo record /* virtual*/ int next(TBaseisamfile& f, word lockop = _nolock); int prev(TBaseisamfile& f, word lockop = _nolock); int first(TBaseisamfile& f, word lockop = _nolock); int last(TBaseisamfile& f, word lockop = _nolock); // @cmember Aggiunge il record al file virtual int write(TBaseisamfile& f) const; // @cmember Riscrive il record sul file virtual int rewrite(TBaseisamfile& f) const; // @cmember Elimina il record dal file virtual int remove(TBaseisamfile& f) const; // @cmember Cambia il campo

della chiave principale con il valore

virtual void renum_key(const char* field, const char* val); // @cmember Ritorna il numero di campi del record int items() const; // @cmember Setta il record come non vuoto (chiama ) void setdirty() { setempty(FALSE); } // @cmember Setta il codice della tabella utilizzata void settab(const char *tab); // @cmember Ritorna il puntatore all'inizio del record. NON dovrebbe essere usata! char* string() const { return _rec;} // @cmember Setta il flag di cancellazione void discard() { *_rec = '*';} // @cmember Ripristina il flag di cancellazione void recall() { *_rec = ' ';} // @cmember Indica se il record corrente e' stato cancellato bool isdeleted() const { return *_rec == '*';} // @cmember Ritorna la lunghezza del record int len() const { return _length;} // @cmember Ritorna il tipo del campo

virtual TFieldtypes type(const char* fieldname) const; // @cmember Ritorna la lunghezza del campo

virtual int length(const char* fieldname) const; // @cmember Ritorna numero di decimali del campo

virtual int ndec(const char* fieldname) const; // @cmember Indica se esiste il campo

virtual bool exist(const char* fieldname) const; // @cmember Ritorna il nome del campo

-esimo const char* fieldname(int i) const; // @cmember Setta la chiave

-esima di ordinamento sul file const char* build_key(int key = 1) const; // @cmember Confronta le chiavi di due record int compare_key(const TRectype& rec, int key = 1, int skip_last = 0) const; // @cmember Ritorna TRUE se le chiavi di due record sono uguali (vedi ) bool same_key(const TRectype& rec, int key = 1, int skip_last = 0) const { return compare_key(rec, key, skip_last) == 0; } // @cmember Ritorna il reference al contenuto del campo

const TString& get(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato int int get_int(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato long long get_long(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato word word get_word(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato char char get_char(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato boolean bool get_bool(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato real real get_real(const char* fieldname) const ; // @cmember Ritorna il contenuto del campo

in formato data TDate get_date(const char* fieldname) const ; // @cmember Setta il contenuto del campo

in formato int void put(const char* fieldname, int val); // @cmember Setta il contenuto del campo

in formato long void put(const char* fieldname, long val); // @cmember Setta il contenuto del campo

in formato word void put(const char* fieldname, word val); // @cmember Setta il contenuto del campo

in formato data void put(const char* fieldname, const TDate& val); // @cmember Setta il contenuto del campo

in formato carattere void put(const char* fieldname, char val); // @cmember Setta il contenuto del campo

in formato boolean void put(const char* fieldname, bool val); // @cmember Setta il contenuto del campo

in formato reale void put(const char* fieldname, const real& val); // @cmember Setta il contenuto del campo

in formato valuta void put(const char* fieldname, const TCurrency& val); // @cmember Setta il contenuto del campo

(non tipizzata) void put(const char* fieldname, const char* val) { put_str(fieldname, val); } #ifdef __LONGDOUBLE__ // @cmember Setta il contenuto del campo

in formato reale void put(const char* fieldname, long double val) { put(fieldname, real(val)); } #endif // @cmember Vuota il campo puntato da

virtual void zero(const char * fieldname); // @cmember Vuota tutto il record usando il carattere

virtual void zero(char c = '\0'); // @cmember Riempie il campo

di spazi void blank(const char * fieldname) { put(fieldname, " "); } // @cmember Assegnazione tra TRectype virtual TRectype & operator =(const TRectype& rec); // @cmember Assegnazione tra TRectype virtual TRectype & operator =(const char* rec); // @cmember Assegnazione tra TRectype TRectype& operator =(const TBaseisamfile& f); // @cmember Ritorna il descrittore del record virtual RecDes * rec_des() const; // @cmember Ritorna il numero logico del record int num() const { return _logicnum;} // @cmember Ritorna se il record e' vuoto bool empty() const {return _isempty;} // @cmember Ritorna se il record non e'cancellato bool valid() const {return _rec[0] == ' ';} // @cmember Ritorna l'espressione della chiave numero

const char* key(int numkey = 1) const; // @cmember Ritorna se si tratta di un record valido virtual bool ok() const { return _rec != NULL; } // @cmember Ritorna TRUE se sono uguali bool is_equal(const TRectype& r) const; virtual void init_memo(const TRecnotype recno = RECORD_NON_FISICO, TIsam_handle file = 0); virtual void write_memo(TIsam_handle file, const TRecnotype recno); bool has_memo() const { return _memo_data != NULL; } // Gestione posta elettronica virtual void fill_transaction(TConfig& cfg, int row = 0) const; bool send_mail(const char* action = "MODIFY") const; // @cmember Ritorna la relapp che gestisce il file virtual bool get_relapp(TString& app) const; virtual bool edit(int logicnum = 0, const char * alternate_key_fields = NULL, const char* hint = NULL) const; // @cmember Inizializza un record staccato da un file. void init(int logicnum); virtual word class_id() const { return CLASS_RECTYPE; } virtual bool is_kind_of(word id) const { return id == class_id() || TSortable::is_kind_of(id); } // @cmember Costruttore Costruisce un record staccato da un file. // Sarebbe meglio utilizzare una delle altre due TRectype(int logicnum); // @cmember Costruttore. Costruisce il record e lo associa al file isam

TRectype(const TBaseisamfile* i); // @cmember Costruttore. Costruisce il record a partire da

TRectype(const TRectype& r); // @cmember Distruttore virtual ~TRectype(); }; // @doc EXTERNAL // @class TBaseisamfile | Classe per la definizione del file isam di base // // @base public | TObject class TBaseisamfile : public TObject // @author:(INTERNAL) Alex { // @cfriend TRectype friend class TRectype; // @cfriend TCursor friend class TCursor; // @cfriend TSorted_cursor friend class TSorted_cursor; // @access Protected Member protected: // @cmember:(INTERNAL) Numero logico del record corrente int _logicnum; // @cmember:(INTERNAL) Isam handle int _isam_handle; // @cmember:(INTERNAL) Chiave corrente int _curr_key; // @cmember:(INTERNAL) Ultimo errore int _lasterr; // @cmember:(INTERNAL) Puntatore a record corrente TRectype* _current; // @cmember:(INTERNAL) Record corrente TRecnotype _recno; // @access Protected Member protected: // @cmember:(INTERNAL) IO su file: virtual int _read(TRectype& rec, word op = _isequal, word lockop = _nolock); virtual int _readat(TRectype& rec, TRecnotype nrec, word lockop = _nolock); virtual int _write(const TRectype& rec); virtual int _rewrite(const TRectype& rec); virtual int _remove(const TRectype& rec); // @cmember UNUSED void recover(); // @cmember Apre il file isam di base con lock, permettendo di specificare se usare gli indici o no int _open(unsigned int mode = _manulock, bool index = TRUE); int _open_ex(unsigned int mode = _manulock, bool index = TRUE); // @cmember Chiude il file isam di base int _close(); // @cmember Ritorna il nome del file aperto const char* filename() const; // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire. TBaseisamfile(const char* name, const char* descname = NULL); int handle(int key = 0) const; // @access Public Member public: // @cmember Sostituisce il record corrente del del file virtual void set_curr(TRectype * curr); // @cmember Attiva la chiave

sul file aperto void setkey(int nkey); // @cmember Ritorna la chiave attiva sul file aperto int getkey() const; // @cmember Setta la variabile

void setstatus(int status) { _lasterr = status; } // @cmember Si posiziona sul primo record del file (vedi ) virtual int first(word lockop = _nolock); // @cmember Si posiziona sull'ultimo record del file (vedi ) virtual int last(word lockop = _nolock); // @cmember Si posiziona sul successivo record del file (vedi ) virtual int next(word lockop = _nolock); // @cmember Si posiziona sul precedente record del file (vedi ) virtual int prev(word lockop = _nolock); // @cmember Rilegge l'ultimo record letto (vedi ) virtual int reread(word lockop = _nolock); // @cmember Rilegge l'ultimo record letto e lo copia in

(vedi ) virtual int reread(TRectype& rec, word lockop = _nolock); // @cmember Salta

record dalla posizione corrente (vedi ) virtual int skip(TRecnotype nrec, word lockop = _nolock); // @cmember Legge il record (vedi e ) virtual int read(word op = _isequal, word lockop = _nolock); // @cmember Legge il record e lo copia in

(vedi e ) virtual int read(TRectype& rec, word op = _isequal, word lockop = _nolock); // @cmember Legge il record alla posizione

(vedi ) virtual int readat(TRecnotype nrec, word lockop = _nolock); // @cmember Legge il record alla posizione

e lo copia in

(vedi ) virtual int readat(TRectype& rec, TRecnotype nrec, word lockop = _nolock); // @cmember Aggiunge un record virtual int write(); // @cmember Aggiunge un record copiando da

virtual int write(const TRectype& rec); // @cmember Riscrive un record virtual int rewrite(); // @cmember Riscrive un record (il record

) virtual int rewrite(const TRectype& rec); // @cmember Riscrive un record alla posizione

virtual int rewriteat(TRecnotype nrec); // @cmember Riscrive un record alla posizione

copiando da

virtual int rewriteat(const TRectype& rec, TRecnotype nrec); // @cmember Elimina il record virtual int remove(); // @cmember Elimina il record copiando da

virtual int remove(const TRectype& rec); // @cmember Ritorna il numero logico del file sotto forma di stringa virtual const char* name() const; // @cmember Ritorna il numero del record corrente virtual TRecnotype recno() const { return _recno;} // @cmember Attiva lock di tutto il file int lock(); // @cmember Disattiva lock di tutto il file int unlock(); // @cmember Accende gli indici void indexon(); // @cmember Spegne gli indici void indexoff(); // @cmember Ritorna il valore della variabile

int status() const { return _lasterr; } // @cmember Controlla se il file e' valido (ritorna 0 se il file e' valido) int is_valid(bool exclusive); // @cmember Restituisce se il file è ordinato con indice esterno (default:FALSE) virtual bool is_sorted() {return FALSE;} // @cmember Ritorna il puntatore al record corrente virtual TRectype& curr() const {return *_current;} // @cmember Controlla se e' stata raggiunta la fine del file (TRUE se EOF) bool eof() const { return status() == _iseof || status() == _isemptyfile;} // @cmember Controlla se e' stato raggiunto l'inizio del file (TRUE se BOF) bool bof() const { return status() == _isbof || status() == _isemptyfile;} // @cmember Controlla se l'ultima operazione sul file e' stata effettuata correttamente // (TRUE se

non contiene codici di errore) bool good() const { return status() == NOERR;} // @cmember Controlla se l'ultima operazione sul file ha generato un errore // (TRUE se

contiene codici di errore) bool bad() const { return status() != NOERR;} // @cmember Controlla se il file e' vuoto (TRUE se vuoto) virtual bool empty(); // @cmember Ritorna il numero logico del record corrente int num() const { return _logicnum;} // @cmember Ritorna la descrizione del file corrente virtual const char* description(); // @cmember Ritorna il numero di record contenuti nel file corrente virtual TRecnotype eod() const ; // @cmember Numero di records presenti nel file long items() const; // n.o di records nel file // @cmember Ritorna il contenuto del campo

di tipo int int get_int(const char* fieldname) const { return curr().get_int(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo long long get_long(const char* fieldname) const { return curr().get_long(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo word word get_word(const char* fieldname) const { return curr().get_word(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo carattere char get_char(const char* fieldname) const { return curr().get_char(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo boolean bool get_bool(const char* fieldname) const { return curr().get_bool(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo real real get_real(const char* fieldname) const { return curr().get_real(fieldname);} // @cmember Ritorna il contenuto del campo

di tipo data TDate get_date(const char* fieldname) const { return curr().get_date(fieldname);} // @cmember Ritorna il contenuto del campo

(non tipizzata) const TString& get(const char* fieldname) const { return curr().get(fieldname);} // @cmember Setta il contenuto del campo

di tipo int void put(const char* fieldname, int val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo long void put(const char* fieldname, long val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo word void put(const char* fieldname, word val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo data void put(const char* fieldname, const TDate& val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo carattere void put(const char* fieldname, char val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di boolean void put(const char* fieldname, bool val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo real void put(const char* fieldname, const real& val) { curr().put(fieldname, val);} // @cmember Setta il contenuto del campo

di tipo valuta void put(const char* fieldname, const TCurrency& val) { curr().put(fieldname, val);} #ifdef __LONGDOUBLE__ // @cmember Setta il contenuto del campo

in formato reale void put(const char* fieldname, long double val) { curr().put(fieldname, real(val)); } #endif // @cmember Setta il contenuto del campo

(non tipizzata) void put(const char* fieldname, const char* val) { curr().put(fieldname, val);} // @cmember Vuota il contenuto del campo

nel record corrente (vedi ) void zero(const char * fieldname) { curr().zero(fieldname);} // @cmember Vuota il contenuto del record corrente virtual void zero() { curr().zero();} // @cmember Vuota tutto il record corrente usando il carattere

void zero(char c) { curr().zero(c);} // @cmember Riempie il campo

del record corrente di spazi void blank(const char * fieldname) { curr().blank(fieldname); } // @cmember Setta il record corrente con il contenuto del record

TRectype& operator =(const TRectype& rec) { return curr() = rec;} // @cmember Ritorna la relapp che gestisce il file virtual bool get_relapp(TString& app) const; // @cmember Testa se il file e' cambiato dal momento

bool is_changed_since(long& stat) const; virtual word class_id() const { return CLASS_BASEISAMFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TObject::is_kind_of(id); } // @cmember Costruttore TBaseisamfile(int logicnum); // @cmember Distruttore virtual ~TBaseisamfile(); }; // @doc EXTERNAL // @class TIsamfile | Classe per la definizione delle operazione sul file isam // // @base public | TBaseisamfile class TIsamfile : public TBaseisamfile // @author:(INTERNAL) Sandro { // @access Public Member public: // @cmember Aggiorna i flags associati al file // int flags(bool updateeod = FALSE); // @cmember Apre un file di isam con lock (vedi ) int open(unsigned int mode = _manulock, bool index = TRUE) { return _open(mode, index); } int open_ex(unsigned int mode = _manulock, bool index = TRUE) { return _open_ex(mode, index); } // @cmember Chiude il file di isam int close() { return _close();} virtual word class_id() const { return CLASS_ISAMFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TBaseisamfile::is_kind_of(id); } // @cmember Costruttore TIsamfile(int logicnum); // @cmember Distruttore virtual ~TIsamfile(); }; // @doc EXTERNAL // @class TSystemisamfile | Classe per la definizione delle funzione per la creazione di un file // di isam // // @base public | TIsamfile class TSystemisamfile : public TIsamfile // @author:(INTERNAL) Sandro { // @access:(INTERNAL) Private Memebr // @cmember:(INTERNAL) Array di campi che descrivono il record del file TArray _flds; // @cmember:(INTERNAL) Array di espressione TArray _exps; // @cmember:(INTERNAL) Recupera le conversioni logiche da effettuare sul file bool getlcf(long flev); // @cmember:(INTERNAL) Esegue la conversione del file. Ritorna il codice di errore. int exec_convapp(long flev, const bool before); // @cmember:(INTERNAL) Esegue la conversione sui record del file (utilizzando le espressione definite // in fconv.ini) void makelc(TRectype& rec); // @cmember aggiorna l'eod e l'eox del file void update_file(); // @access Public Member public: // @cmember Costruisce un file isam di dimensione

sulla base del tracciato

passato int build(TRecnotype eox, const TTrec& r); // @cmember Costruisce un file isam di dimensione

. int build(TRecnotype eox); // @cmember Calcola lo spazio che il file occuperebbe se venisse esteso a

long size(TRecnotype eox); // @cmember Esegue la conversione del tracciato record del file int update(const TTrec& newrec, bool vis = TRUE); // @cmember Esegue sia e int pack(bool vis = FALSE, bool ask = TRUE); // @cmember Rimuove fisicamente i record cancellati int packfile(bool vis = FALSE, bool zap = FALSE); // @cmember Rimuove fisicamente gli indici cancellati int packindex(bool vis = FALSE, bool ask = TRUE); // @cmember Rimuove fisicamente tutti i records e gli indici int zap(); // @cmember Importa un file ascii int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ; // @cmember Esporta VERSO un file ascii. int dump(const char* to, int nkey = 1, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool withdeleted = FALSE, const char * filter =NULL); virtual word class_id() const { return CLASS_SYSTEMISAMFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TIsamfile::is_kind_of(id); } // @cmember Costruttore TSystemisamfile(int logicnum): TIsamfile(logicnum) {} // @cmember Distruttore virtual ~TSystemisamfile() {} }; // @doc EXTERNAL // @class TLocalisamfile | Classe per la definizione di un isam file // // @base public | TBaseisamfile class TLocalisamfile : public TBaseisamfile // @author:(INTERNAL) Sandro { // @access Protected Member protected: // @cmember Apre il file con lock (vedi ) int open(unsigned int mode = _manulock); // @cmember Chiude il file aperto int close() ; // @cmember Costruttore per derivare TTempIsamfile TLocalisamfile(int logicnum, bool tmp); // @cmember Costruttore per derivare TExternisamfile.

indica il file esterno da aprire (vedi ). TLocalisamfile(const char* name, const char* descname = NULL); // @access Public Member public: // @cmember Avanza di

record virtual int operator +=(const TRecnotype npos); // @cmember Sposta indietro di

record virtual int operator -=(const TRecnotype npos); // @cmember Avanza al record successivo virtual int operator ++(); // @cmember Indietreggia al record precedente virtual int operator --(); // @cmember Ritorna TRUE se tabella virtual bool tab() const { return FALSE;} virtual word class_id() const { return CLASS_LOCALISAMFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TBaseisamfile::is_kind_of(id); } // @cmember Costruttore. TLocalisamfile(int logicnum); // @cmember Distruttore virtual ~TLocalisamfile(); }; // @doc EXTERNAL // @class TIsamtempfile | Classe per la definizione del file isam temporaneo // // @base public | TLocalisamfile class TIsamtempfile : public TLocalisamfile // @author:(INTERNAL) Alex { // @access:(INTERNAL) Private Member //@cmember:(INTERNAL) Indica se cancellare il file in chiusura bool _autodel; // @access Protected Member protected: // @cmember Apre il file int open(const char* radix, bool create, TRecnotype eod, TRecnotype eox); // @cmember Chiude il file int close(); // @access Public Member public: // @cmember Setta il valore di

a

void set_autodel(bool val=TRUE) {_autodel = val;} virtual word class_id() const { return CLASS_ISAMTEMPFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TLocalisamfile::is_kind_of(id); } // @cmember Costruttore TIsamtempfile(int logicnum, const char* radix, bool create=TRUE, bool autodel=FALSE); // @cmember Distruttore virtual ~TIsamtempfile(); }; // @doc EXTERNAL // @class TExternisamfile | Classe per la definizione del file isam esterno // // @base public | TLocalisamfile class TExternisamfile : public TLocalisamfile // @author:(INTERNAL) Angelo { //@cmember:(INTERNAL) Indica il nome del file col quale e' stata instanziata la classe TFilename _name; // @access Protected Member protected: // @cmember inizializza il file.

indica se aprire il file in modo esclusivo void init(const char* name, bool exclusive, bool index); // @cmember Apre il file.

indica se aprire il file in modo esclusivo int open(bool exclusive, bool index = TRUE); // @cmember Chiude il file int close(); // @access Public Member public: // @cmember Ritorna il nome del file sotto forma di stringa virtual const char* name() const; // @cmember Cancella tutti i record del file int zap(); virtual word class_id() const { return CLASS_EXTERNISAMFILE; } virtual bool is_kind_of(word id) const { return id == class_id() || TLocalisamfile::is_kind_of(id); } // @cmember Costruttore.

indica se aprire il file in modo esclusivo. //

indica se aprire il file con indici o meno TExternisamfile(const char* name, bool exclusive = FALSE, bool index = TRUE); // @cmember Costruttore.

é il nome del file che contiene la descrizione del file (estensione trr). //

indica se aprire il file in modo esclusivo. //

indica se aprire il file con indici o meno TExternisamfile(const char* name, const char * descname, bool exclusive = FALSE, bool index = TRUE); // @cmember Distruttore virtual ~TExternisamfile(); }; // @class TRecfield | Classe per la gestione dei campi di un record // // @base public | TObject class TRecfield : public TObject // @author:(INTERNAL) Alex // @access:(INTERNAL) Private Member { // @cmember:(INTERNAL) Nome del campo char _name[12]; // @cmember:(INTERNAL) Puntatore a inizio record TRectype* _rec; // @cmember:(INTERNAL) Puntatore a inizio campo char* _p; // @cmember:(INTERNAL) Lunghezza del campo byte _len; // @cmember:(INTERNAL) Numero di decimali del campo byte _dec; // @cmember:(INTERNAL) Tipo del campo TFieldtypes _type; // @cmember:(INTERNAL) Setta il campo

-esimo con i valori di

-esimo void set(int from, int to); // @access Public Member public: // @cmember Operatore di assegnamento per tipo intero int operator =(int i) ; // @cmember Operatore di assegnamento per tipo long long operator =(long l) ; // @cmember Operatore di assegnamento per tipo data const TDate& operator =(const TDate& d) ; // @cmember Operatore di assegnamento per tipo carattere const char* operator =(const char* s) ; #ifndef FOXPRO // @cmember Operatore di assegnamento per tipo real const real& operator =(const real& r) ; #endif // @cmember Operatore di estrazione per tipo intero operator int() const ; // @cmember Operatore di estrazione per tipo long operator long() const ; // @cmember const char * | operator const char* | | Operatore di estrazione per tipo carattere operator const char*() const ; // @cmember Operatore di estrazione per data operator TDate() const ; #ifndef FOXPRO // @cmember const real | operator const real | | Operatore di estrazione per real operator const real() const ; #endif // @cmember Scrive un campo packed. Sarebbe meglio non usare mai campi packed. void setptr(TRecnotype r); // @cmember Legge un campo packed. Sarebbe meglio non usare mai campi packed. TRecnotype ptr() const; // @cmember Ritorna un puntatore all'inizio del campo nel record. Dovrebbe essere protected! const char* pos() const { return (const char*) _p;} // @cmember Ritorna la lunghezza del campo int len() const { return (int) _len;} // @cmember Ritorna il numero di decimali del campo int dec() const { return (int) _dec;} TFieldtypes type() const // @cmember Ritorna il tipo del campo { return _type;} // @cmember Ritorna il puntatore a inizio record TRectype& record() const { return *_rec;} // @cmember Costruttore TRecfield(TRectype& rec, const char* name, int from = 0, int to = -1); }; #define FOR_EACH_FILE_RECORD(isamfile) \ for (int _e##isamfile = isamfile.first(); \ _e##isamfile == NOERR; \ _e##isamfile = isamfile.next()) void get_idx_names(int logicnum, TToken_string& i_names); void set_autoload_new_files(bool on); #endif // __ISAM_