Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : isam.* Migliorate get e put field_buffer() e update() Eliminato _cod dai TRectype maskfld.c* Corretta gestione selezione files *.* Corretti conflitti generati dal riporto della 1.5 git-svn-id: svn://10.65.10.50/trunk@7426 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d0ab8cc457
commit
062476b25d
@ -519,18 +519,6 @@ void TApplication::set_perms()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TApplication::open_files(int logicnum, ...)
|
|
||||||
{
|
|
||||||
va_list marker;
|
|
||||||
va_start(marker, logicnum);
|
|
||||||
while (logicnum > 0)
|
|
||||||
{
|
|
||||||
CHECKD(_used_files.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
|
|
||||||
_used_files.add(new TLocalisamfile(logicnum), logicnum);
|
|
||||||
logicnum = va_arg(marker, int);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @mfunc Legge il parametro /uUTENTE e lo toglie dalla lista
|
// @mfunc Legge il parametro /uUTENTE e lo toglie dalla lista
|
||||||
|
@ -54,8 +54,6 @@ class TApplication
|
|||||||
// @cmember:(INTERNAL) Indica se l'applicazione e' stata creata con successo
|
// @cmember:(INTERNAL) Indica se l'applicazione e' stata creata con successo
|
||||||
bool _create_ok;
|
bool _create_ok;
|
||||||
|
|
||||||
// @cmember:(INTERNAL) array dei files usati
|
|
||||||
TArray _used_files;
|
|
||||||
// @cmember:(INTERNAL) Termine dell'applicazione
|
// @cmember:(INTERNAL) Termine dell'applicazione
|
||||||
void terminate();
|
void terminate();
|
||||||
// @cmember:(INTERNAL) Cambia il cursore del mouse
|
// @cmember:(INTERNAL) Cambia il cursore del mouse
|
||||||
@ -102,7 +100,8 @@ protected:
|
|||||||
|
|
||||||
// @cmember apre i files necessari
|
// @cmember apre i files necessari
|
||||||
void open_files(int logicnum, ...);
|
void open_files(int logicnum, ...);
|
||||||
// @access Public Member
|
|
||||||
|
// @access Public Member
|
||||||
public:
|
public:
|
||||||
// @cmember Modifca la barra dei menu' inserendo la <p menubar>
|
// @cmember Modifca la barra dei menu' inserendo la <p menubar>
|
||||||
// void setbar(int menubar) { _bar = menubar;}
|
// void setbar(int menubar) { _bar = menubar;}
|
||||||
@ -186,8 +185,6 @@ public:
|
|||||||
bool add_menu(TString_array& menu, MENU_TAG id = 0);
|
bool add_menu(TString_array& menu, MENU_TAG id = 0);
|
||||||
// @cmember Elimina il menu' <p id> (Ritorna se ce l'ha fatta???)
|
// @cmember Elimina il menu' <p id> (Ritorna se ce l'ha fatta???)
|
||||||
bool remove_menu(MENU_TAG id);
|
bool remove_menu(MENU_TAG id);
|
||||||
// Aggiunge uno o piu' file a quelli aperti
|
|
||||||
void open_files(int logicnum, ...);
|
|
||||||
|
|
||||||
// @cmember Costruttore
|
// @cmember Costruttore
|
||||||
TApplication();
|
TApplication();
|
||||||
|
@ -75,8 +75,6 @@ protected:
|
|||||||
void _write_file();
|
void _write_file();
|
||||||
// @cmember Inizializza il paragrafo leggendo dal file di nome <p fn > i dati
|
// @cmember Inizializza il paragrafo leggendo dal file di nome <p fn > i dati
|
||||||
void init(const char *fn, const char* pa, bool warning);
|
void init(const char *fn, const char* pa, bool warning);
|
||||||
// @cmember Carica una variabile da una riga
|
|
||||||
bool add_line(const TString& l);
|
|
||||||
|
|
||||||
// @access Public Memeber
|
// @access Public Memeber
|
||||||
public:
|
public:
|
||||||
@ -144,9 +142,6 @@ public:
|
|||||||
// se sort=TRUE, l'array è ordinato per nomevar(i), altrimenti è in ordine HASH
|
// se sort=TRUE, l'array è ordinato per nomevar(i), altrimenti è in ordine HASH
|
||||||
int list_variables(TString_array& vl, bool add_value = FALSE, const char* section = NULL, const bool sort=FALSE);
|
int list_variables(TString_array& vl, bool add_value = FALSE, const char* section = NULL, const bool sort=FALSE);
|
||||||
|
|
||||||
// @cmember Chiama cfgcb per ogni paragrafo
|
|
||||||
int for_each_paragraph(CONFIG_CALLBACK cfgcb, void* jolly);
|
|
||||||
|
|
||||||
// @cmember Ritorna l'intero array delle variabili della sezione
|
// @cmember Ritorna l'intero array delle variabili della sezione
|
||||||
// eventualmente specificata da <p section>
|
// eventualmente specificata da <p section>
|
||||||
TAssoc_array& list_variables(const char* section = NULL);
|
TAssoc_array& list_variables(const char* section = NULL);
|
||||||
|
@ -453,8 +453,8 @@ public:
|
|||||||
|
|
||||||
// @cmember operator const | real& | | Ritorna il valore real dell'espressione
|
// @cmember operator const | real& | | Ritorna il valore real dell'espressione
|
||||||
operator const real&() { return as_real(); }
|
operator const real&() { return as_real(); }
|
||||||
// @cmember operator const | char* | | Ritorna il valore dell'espressione come stringa
|
// @cmember operator const | TString& | | Ritorna il valore dell'espressione come stringa
|
||||||
const TString & as_string();
|
operator const TString&() { return as_string(); }
|
||||||
// @cmember Ritorna il valore dell'espressione come booleano
|
// @cmember Ritorna il valore dell'espressione come booleano
|
||||||
operator bool() { return as_bool(); }
|
operator bool() { return as_bool(); }
|
||||||
// @cmember Ritorna il nome della variabile di posto <p varnum>
|
// @cmember Ritorna il nome della variabile di posto <p varnum>
|
||||||
|
@ -1123,8 +1123,6 @@ public:
|
|||||||
virtual const char* get() const;
|
virtual const char* get() const;
|
||||||
virtual bool set(const char*);
|
virtual bool set(const char*);
|
||||||
|
|
||||||
TFieldref& field(int i) const { return (TFieldref&)_field[i]; }
|
|
||||||
|
|
||||||
TForm_string(TPrint_section* section);
|
TForm_string(TPrint_section* section);
|
||||||
virtual ~TForm_string() {}
|
virtual ~TForm_string() {}
|
||||||
};
|
};
|
||||||
|
124
include/isam.cpp
124
include/isam.cpp
@ -77,6 +77,7 @@ void write_journal(TJournalHeader& jh, void* data, int len)
|
|||||||
#define INVFLD 255
|
#define INVFLD 255
|
||||||
|
|
||||||
Str80 cprefix;
|
Str80 cprefix;
|
||||||
|
bool __field_changed = FALSE;
|
||||||
|
|
||||||
HIDDEN char _isam_string[257];
|
HIDDEN char _isam_string[257];
|
||||||
|
|
||||||
@ -118,14 +119,15 @@ int findfld(const RecDes *recd, const char *s)
|
|||||||
stp -= MaxFields;
|
stp -= MaxFields;
|
||||||
byte p = stp + i;
|
byte p = stp + i;
|
||||||
const int fp = recd->SortFd[p];
|
const int fp = recd->SortFd[p];
|
||||||
|
if (fp == INVFLD)
|
||||||
if (fp == INVFLD) return(FIELDERR);
|
return(FIELDERR);
|
||||||
|
|
||||||
const int cmp = strcmp(recd->Fd[fp].Name, s);
|
const int cmp = strcmp(recd->Fd[fp].Name, s);
|
||||||
if (!cmp)
|
if (cmp == 0)
|
||||||
return (int) fp;
|
return (int) fp;
|
||||||
else
|
else
|
||||||
if (cmp > 0) return(FIELDERR);
|
if (cmp > 0)
|
||||||
|
return(FIELDERR);
|
||||||
}
|
}
|
||||||
return(FIELDERR);
|
return(FIELDERR);
|
||||||
}
|
}
|
||||||
@ -252,16 +254,32 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
|||||||
len = 1;
|
len = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__field_changed = FALSE;
|
||||||
const char c = (t == _intzerofld || t == _longzerofld) ? '0' : ' ';
|
const char c = (t == _intzerofld || t == _longzerofld) ? '0' : ' ';
|
||||||
for (i = l - len - 1; i >= 0; i--) recout[i] = c;
|
for (i = l - len - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
__field_changed |= recout[i] != c;
|
||||||
|
recout[i] = c;
|
||||||
|
}
|
||||||
|
if (!__field_changed)
|
||||||
|
{
|
||||||
|
__field_changed = memcmp(s, &recout, l) != 0;
|
||||||
|
if (!__field_changed)
|
||||||
|
return;
|
||||||
|
}
|
||||||
strncpy(&recout[l - len], s, len) ;
|
strncpy(&recout[l - len], s, len) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (exceeded)
|
if (exceeded)
|
||||||
len = l;
|
len = l;
|
||||||
|
__field_changed = memcmp(s, &recout, l) != 0;
|
||||||
|
if (!__field_changed)
|
||||||
|
return;
|
||||||
|
|
||||||
strncpy(recout, s, len) ;
|
strncpy(recout, s, len) ;
|
||||||
for (i = l - 1; i >= len; i--) recout[i] = ' ';
|
for (i = l - 1; i >= len; i--)
|
||||||
|
recout[i] = ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1211,12 +1229,7 @@ TLocalisamfile::TLocalisamfile(int logicnum, bool tmpfile)
|
|||||||
|
|
||||||
TLocalisamfile::~TLocalisamfile()
|
TLocalisamfile::~TLocalisamfile()
|
||||||
{
|
{
|
||||||
if (_isamfile && openf[num()-1] != NULL)
|
|
||||||
{
|
|
||||||
if (_was_open)
|
|
||||||
setkey(_oldkey);
|
|
||||||
close();
|
close();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TLocalisamfile::close()
|
int TLocalisamfile::close()
|
||||||
@ -1733,11 +1746,10 @@ int TSystemisamfile::update(
|
|||||||
|
|
||||||
if (dir.eod() > 0 && oldrec.len() > 0)
|
if (dir.eod() > 0 && oldrec.len() > 0)
|
||||||
{
|
{
|
||||||
err = _open_ex(_excllock);
|
err = _open_ex(_excllock, FALSE);
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
||||||
// Apro il file destinazione in modo esclusivo e senza indici
|
// Apro il file destinazione in modo esclusivo e senza indici
|
||||||
int tmpnum = num();
|
int tmpnum = num();
|
||||||
TIsam_handle ishandle = prefix().open_isamfile(tmpnum, tmpfname, TRUE, FALSE);
|
TIsam_handle ishandle = prefix().open_isamfile(tmpnum, tmpfname, TRUE, FALSE);
|
||||||
@ -1782,7 +1794,19 @@ int TSystemisamfile::update(
|
|||||||
TRecfield* out_fld = (TRecfield*)outfld.objptr(j);
|
TRecfield* out_fld = (TRecfield*)outfld.objptr(j);
|
||||||
if (in_fld != NULL && out_fld != NULL)
|
if (in_fld != NULL && out_fld != NULL)
|
||||||
{
|
{
|
||||||
const char* fld_val = *in_fld;
|
char* fld_val = (char*)(const char*)*in_fld;
|
||||||
|
if (out_fld->type() != _datefld && out_fld->type() != _memofld)
|
||||||
|
{
|
||||||
|
const int l1 = out_fld->len();
|
||||||
|
const int l2 = strlen(fld_val);
|
||||||
|
if (l1 < l2)
|
||||||
|
{
|
||||||
|
if (out_fld->type() != _alfafld)
|
||||||
|
*fld_val = '\0';
|
||||||
|
else
|
||||||
|
fld_val[l1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
*out_fld = fld_val;
|
*out_fld = fld_val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2306,7 +2330,7 @@ void TBaseisamfile::recover()
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TRectype::TRectype(int logicnum)
|
TRectype::TRectype(int logicnum)
|
||||||
: _cod(NULL), _memo_data(NULL), _memo_dirty(NULL)
|
: _memo_data(NULL), _memo_dirty(NULL)
|
||||||
|
|
||||||
{
|
{
|
||||||
_logicnum = logicnum;
|
_logicnum = logicnum;
|
||||||
@ -2324,7 +2348,7 @@ TRectype::TRectype(int logicnum)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TRectype::TRectype(const TBaseisamfile* i)
|
TRectype::TRectype(const TBaseisamfile* i)
|
||||||
: _cod(NULL), _memo_data(NULL), _memo_dirty(NULL)
|
: _memo_data(NULL), _memo_dirty(NULL)
|
||||||
{
|
{
|
||||||
_logicnum = i->num();
|
_logicnum = i->num();
|
||||||
_length = prefix().get_reclen(_logicnum);
|
_length = prefix().get_reclen(_logicnum);
|
||||||
@ -2342,7 +2366,7 @@ TRectype::TRectype(const TBaseisamfile* i)
|
|||||||
|
|
||||||
|
|
||||||
TRectype::TRectype(const TRectype& r)
|
TRectype::TRectype(const TRectype& r)
|
||||||
: _logicnum(r._logicnum), _cod(NULL),
|
: _logicnum(r._logicnum),
|
||||||
_memo_data(NULL), _memo_dirty(NULL)
|
_memo_data(NULL), _memo_dirty(NULL)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2358,14 +2382,11 @@ TRectype::TRectype(const TRectype& r)
|
|||||||
memcpy(_rec, r._rec, _length);
|
memcpy(_rec, r._rec, _length);
|
||||||
|
|
||||||
strcpy(_tab, r._tab);
|
strcpy(_tab, r._tab);
|
||||||
if (r._cod != NULL)
|
|
||||||
_cod = new TRecfield(*this, "COD");
|
|
||||||
setempty(r.empty());
|
setempty(r.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
TRectype::~TRectype()
|
TRectype::~TRectype()
|
||||||
{
|
{
|
||||||
if (_cod != NULL) delete _cod;
|
|
||||||
if (_rec != NULL) delete _rec;
|
if (_rec != NULL) delete _rec;
|
||||||
if (_memo_data != NULL ) delete _memo_data;
|
if (_memo_data != NULL ) delete _memo_data;
|
||||||
if (_memo_dirty != NULL ) delete _memo_dirty;
|
if (_memo_dirty != NULL ) delete _memo_dirty;
|
||||||
@ -2404,14 +2425,7 @@ void TRectype::init_memo( const TRecnotype recno)
|
|||||||
|
|
||||||
void TRectype::settab(const char *tab)
|
void TRectype::settab(const char *tab)
|
||||||
{
|
{
|
||||||
if (_cod != NULL)
|
|
||||||
{
|
|
||||||
delete _cod;
|
|
||||||
_cod = NULL;
|
|
||||||
}
|
|
||||||
strcpy(_tab, tab);
|
strcpy(_tab, tab);
|
||||||
if (*_tab != '\0')
|
|
||||||
_cod = new TRecfield(*this, "COD");
|
|
||||||
zero();
|
zero();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2594,19 +2608,19 @@ const char* TRectype::fieldname(int i) const
|
|||||||
|
|
||||||
const TString& TRectype::get_str(const char* fieldname) const
|
const TString& TRectype::get_str(const char* fieldname) const
|
||||||
{
|
{
|
||||||
char * s = _isam_string;
|
|
||||||
static TFixed_string tmp(_isam_string, sizeof(_isam_string));
|
static TFixed_string tmp(_isam_string, sizeof(_isam_string));
|
||||||
const RecDes * recd = rec_des();
|
const RecDes * recd = rec_des();
|
||||||
int nf = findfld(recd, fieldname);
|
const int nf = findfld(recd, fieldname);
|
||||||
|
|
||||||
if (nf == FIELDERR)
|
if (nf == FIELDERR)
|
||||||
{
|
{
|
||||||
unknown_field(fieldname);
|
unknown_field(fieldname);
|
||||||
*s = '\0';
|
tmp.cut(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
__getfieldbuff(recd->Fd[nf].Len, recd->Fd[nf].TypeF,
|
{
|
||||||
_rec + recd->Fd[nf].RecOff, s);
|
const RecFieldDes& fd = recd->Fd[nf];
|
||||||
|
__getfieldbuff(fd.Len, fd.TypeF, _rec + fd.RecOff, _isam_string);
|
||||||
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2614,9 +2628,19 @@ const TString& TRectype::get_str(const char* fieldname) const
|
|||||||
|
|
||||||
const TString& TRectype::get(const char* fieldname) const
|
const TString& TRectype::get(const char* fieldname) const
|
||||||
{
|
{
|
||||||
if(type( fieldname ) == _memofld )
|
const RecDes* recd = rec_des();
|
||||||
|
const int index = findfld(recd, fieldname);
|
||||||
|
if (index == FIELDERR)
|
||||||
|
{
|
||||||
|
unknown_field(fieldname);
|
||||||
|
return EMPTY_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
const RecFieldDes& fd = recd->Fd[index];
|
||||||
|
const TFieldtypes ft = TFieldtypes(fd.TypeF);
|
||||||
|
|
||||||
|
if(ft == _memofld )
|
||||||
{
|
{
|
||||||
int index( findfld( rec_des( ), ( char * )fieldname ) );
|
|
||||||
if ( _memo_data->objptr( index ) && (*_memo_dirty)[ index ] )
|
if ( _memo_data->objptr( index ) && (*_memo_dirty)[ index ] )
|
||||||
return _memo_data->row( index );
|
return _memo_data->row( index );
|
||||||
if( _memo_recno >= 0L )
|
if( _memo_recno >= 0L )
|
||||||
@ -2639,7 +2663,6 @@ const TString& TRectype::get(const char* fieldname) const
|
|||||||
|
|
||||||
int TRectype::get_int(const char* fieldname) const
|
int TRectype::get_int(const char* fieldname) const
|
||||||
{
|
{
|
||||||
|
|
||||||
return atoi(get_str(fieldname));
|
return atoi(get_str(fieldname));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2651,28 +2674,23 @@ long TRectype::get_long(const char* fieldname) const
|
|||||||
|
|
||||||
|
|
||||||
word TRectype::get_word(const char* fieldname) const
|
word TRectype::get_word(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
return (word)atoi(get_str(fieldname));
|
return (word)atoi(get_str(fieldname));
|
||||||
}
|
}
|
||||||
|
|
||||||
real TRectype::get_real(const char* fieldname) const
|
real TRectype::get_real(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
real r(get_str(fieldname));
|
real r(get_str(fieldname));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char TRectype::get_char(const char* fieldname) const
|
char TRectype::get_char(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
return *(get_str(fieldname));
|
return *(get_str(fieldname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TRectype::get_bool(const char* fieldname) const
|
bool TRectype::get_bool(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
return *(get_str(fieldname)) == 'X';
|
return *(get_str(fieldname)) == 'X';
|
||||||
}
|
}
|
||||||
@ -2702,7 +2720,6 @@ bool TRectype::get_memo(
|
|||||||
|
|
||||||
|
|
||||||
TDate TRectype::get_date(const char* fieldname) const
|
TDate TRectype::get_date(const char* fieldname) const
|
||||||
|
|
||||||
{
|
{
|
||||||
TDate d(get_str(fieldname));
|
TDate d(get_str(fieldname));
|
||||||
return d;
|
return d;
|
||||||
@ -2796,17 +2813,14 @@ void TRectype::put_str(const char* fieldname, const char* val)
|
|||||||
unknown_field(fieldname);
|
unknown_field(fieldname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const TFieldtypes ft = (TFieldtypes)recd->Fd[nf].TypeF;
|
|
||||||
|
const RecFieldDes& fd = recd->Fd[nf];
|
||||||
|
const TFieldtypes ft = TFieldtypes(fd.TypeF);
|
||||||
|
|
||||||
if (val == NULL)
|
if (val == NULL)
|
||||||
val = "";
|
val = "";
|
||||||
if (ft == _boolfld)
|
if (ft == _boolfld)
|
||||||
val = (*val && strchr("1STXY", toupper(*val)) != NULL) ? "T" : "F";
|
val = (*val && strchr("1STXY", toupper(*val)) != NULL) ? "T" : "F";
|
||||||
if (*val == '\0') // Da provare
|
|
||||||
{
|
|
||||||
TRecfield f(*this, fieldname);
|
|
||||||
if (*f.pos() == '\0') return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ft == _memofld)
|
if(ft == _memofld)
|
||||||
{
|
{
|
||||||
@ -2815,17 +2829,17 @@ void TRectype::put_str(const char* fieldname, const char* val)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
__putfieldbuff(recd->Fd[nf].Len, recd->Fd[nf].Dec, ft, val,
|
__putfieldbuff(fd.Len, fd.Dec, ft, val, _rec + fd.RecOff);
|
||||||
_rec + recd->Fd[nf].RecOff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setempty(FALSE);
|
setempty(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRectype::zero(const char* fieldname)
|
void TRectype::zero(const char* fieldname)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (_cod != NULL && strcmp(fieldname , "COD") == 0)
|
if (*_tab && strcmp(fieldname , "COD") == 0)
|
||||||
*_cod = _tab;
|
put("COD", _tab);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const RecDes * recd = rec_des();
|
const RecDes * recd = rec_des();
|
||||||
@ -2865,11 +2879,11 @@ void TRectype::zero(const char* fieldname)
|
|||||||
void TRectype::zero(char c)
|
void TRectype::zero(char c)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
memset(_rec, c, len());
|
||||||
recall();
|
recall();
|
||||||
memset(_rec + 1, c, len() - 1);
|
|
||||||
|
|
||||||
if (_cod != NULL)
|
if (*_tab)
|
||||||
*_cod = _tab;
|
put("COD", _tab);
|
||||||
|
|
||||||
if(has_memo())
|
if(has_memo())
|
||||||
init_memo( RECORD_NON_FISICO );
|
init_memo( RECORD_NON_FISICO );
|
||||||
|
@ -62,7 +62,6 @@ protected:
|
|||||||
// @cmember:(INTERNAL) Indentificatore della tabella
|
// @cmember:(INTERNAL) Indentificatore della tabella
|
||||||
char _tab[5];
|
char _tab[5];
|
||||||
// @cmember:(INTERNAL) Campo "COD" della tabella
|
// @cmember:(INTERNAL) Campo "COD" della tabella
|
||||||
TRecfield* _cod;
|
|
||||||
TBit_array* _memo_dirty;
|
TBit_array* _memo_dirty;
|
||||||
TString_array* _memo_data;
|
TString_array* _memo_data;
|
||||||
TRecnotype _memo_recno;
|
TRecnotype _memo_recno;
|
||||||
|
@ -2575,25 +2575,12 @@ KEY TFile_select::run()
|
|||||||
return good ? K_ENTER : K_ESC;
|
return good ? K_ENTER : K_ESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// CHECK_NONE Nessun controllo
|
|
||||||
// CHECK_NORMAL Se non e' vuoto deve esistere
|
|
||||||
// CHECK_REQUIRED Non puo' essere vuoto e deve esistere
|
|
||||||
// CHECK_SEARCH Puo' essere vuoto e puo' non matchare il filtro
|
|
||||||
|
|
||||||
bool TFile_select::check(CheckTime)
|
bool TFile_select::check(CheckTime)
|
||||||
{
|
{
|
||||||
bool ok = TRUE;
|
|
||||||
const CheckType ct = field().check_type();
|
|
||||||
if (ct != CHECK_NONE)
|
|
||||||
{
|
|
||||||
const TFilename name = field().get();
|
const TFilename name = field().get();
|
||||||
if (name.empty() && ct != CHECK_REQUIRED)
|
bool ok = _filter.empty() || name.match(_filter);
|
||||||
return TRUE;
|
if (ok && field().roman()) // Must exist
|
||||||
ok = _filter.not_empty() && name.match(_filter);
|
|
||||||
if (ok && ct != CHECK_SEARCH)
|
|
||||||
ok = name.exist();
|
ok = name.exist();
|
||||||
}
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -453,9 +453,6 @@ public:
|
|||||||
// @cmember Esegue il messaggio <p n>-esimo sul campo
|
// @cmember Esegue il messaggio <p n>-esimo sul campo
|
||||||
bool do_message(int n);
|
bool do_message(int n);
|
||||||
|
|
||||||
// @cmember Ritorna il messaggio <p n>-esimo del campo
|
|
||||||
TToken_string* message(int m, bool crea = FALSE);
|
|
||||||
|
|
||||||
// @cmember Controlla se il campo ha un messaggio
|
// @cmember Controlla se il campo ha un messaggio
|
||||||
virtual bool has_message() const
|
virtual bool has_message() const
|
||||||
{ return _message != NULL; }
|
{ return _message != NULL; }
|
||||||
|
@ -276,9 +276,9 @@ int TMultiple_rectype::compare(const TSortable& s) const
|
|||||||
{
|
{
|
||||||
int res = TRectype::compare(s);
|
int res = TRectype::compare(s);
|
||||||
TMultiple_rectype & m = (TMultiple_rectype &) s;
|
TMultiple_rectype & m = (TMultiple_rectype &) s;
|
||||||
for (int i = 0 ; res == 0 && i < _nfiles; i++)
|
for (int i = 0 ; res == 0 && i < _logicnums.items(); i++)
|
||||||
{
|
{
|
||||||
int logicnum = lognum(i);
|
const int logicnum = lognum(i);
|
||||||
TRecord_array & r = body(logicnum);
|
TRecord_array & r = body(logicnum);
|
||||||
TRecord_array & r1 = m.body(logicnum);
|
TRecord_array & r1 = m.body(logicnum);
|
||||||
res = r.rows() - r1.rows();
|
res = r.rows() - r1.rows();
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define XVT_INCL_NATIVE
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <fstream.h>
|
|
||||||
|
|
||||||
// skstream.h
|
// skstream.h
|
||||||
// Copyright (C) 1995, 1996 by John C. Wang. All Rights Reserved.
|
// Copyright (C) 1995, 1996 by John C. Wang. All Rights Reserved.
|
||||||
|
@ -477,7 +477,6 @@ void TFile_cache::test_firm()
|
|||||||
_last_firm = cur_firm;
|
_last_firm = cur_firm;
|
||||||
_cache.destroy();
|
_cache.destroy();
|
||||||
}
|
}
|
||||||
<<<<<<< recarray.cpp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool flush_needed = FALSE;
|
bool flush_needed = FALSE;
|
||||||
|
@ -153,7 +153,7 @@ TString& TString::set(
|
|||||||
|
|
||||||
// @mfunc Espande la stringa per altri caratteri
|
// @mfunc Espande la stringa per altri caratteri
|
||||||
int TString::make_room(
|
int TString::make_room(
|
||||||
int s) // @parm Numero di caratteri di cui si cuole aspandere la stringa
|
int s) // @parm Numero di caratteri di cui si vuole aspandere la stringa
|
||||||
|
|
||||||
// @comm La stringa viene espansa di un numero di caratteri doppio (per sicurezza) di
|
// @comm La stringa viene espansa di un numero di caratteri doppio (per sicurezza) di
|
||||||
// quello passato per parametro
|
// quello passato per parametro
|
||||||
@ -264,7 +264,7 @@ TString& TString::operator <<(const TObject& obj)
|
|||||||
ostrstream out(spark.get_buffer(), spark.size());
|
ostrstream out(spark.get_buffer(), spark.size());
|
||||||
obj.print_on(out);
|
obj.print_on(out);
|
||||||
out << ends;
|
out << ends;
|
||||||
return operator <<(spork);
|
return operator <<(spark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,8 +22,6 @@ protected:
|
|||||||
// @cmember Controlla se il campo <p fld_id> esiste
|
// @cmember Controlla se il campo <p fld_id> esiste
|
||||||
bool present(short fld_id) const { return id2pos(fld_id) >= 0; }
|
bool present(short fld_id) const { return id2pos(fld_id) >= 0; }
|
||||||
|
|
||||||
TVariable_mask() : TMask () { }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @cmember Esegue il check e i messaggi sul campo <p fld_id> della maschera
|
// @cmember Esegue il check e i messaggi sul campo <p fld_id> della maschera
|
||||||
virtual void check_field( short fld_id );
|
virtual void check_field( short fld_id );
|
||||||
@ -40,7 +38,7 @@ public:
|
|||||||
// @cmember Legge il campo da file
|
// @cmember Legge il campo da file
|
||||||
virtual TMask_field* parse_field(TScanner& scanner);
|
virtual TMask_field* parse_field(TScanner& scanner);
|
||||||
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
|
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
|
||||||
TVariable_mask( );
|
TVariable_mask();
|
||||||
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
|
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
|
||||||
TVariable_mask( const char* name, int num = 0, int max = MAX_PAGES);
|
TVariable_mask( const char* name, int num = 0, int max = MAX_PAGES);
|
||||||
// @cmember Distruttore
|
// @cmember Distruttore
|
||||||
|
@ -200,9 +200,6 @@ public:
|
|||||||
// @cmember Distruttore
|
// @cmember Distruttore
|
||||||
virtual ~TWindow();
|
virtual ~TWindow();
|
||||||
|
|
||||||
// @cmember Ritorna l'handler della finestra padre
|
|
||||||
WINDOW parent() const;
|
|
||||||
|
|
||||||
// @cmember Ritorna l'identificatore della classe finestra
|
// @cmember Ritorna l'identificatore della classe finestra
|
||||||
virtual word class_id() const;
|
virtual word class_id() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user