Patch level : 10.0

Files correlati     : ba1
Ricompilazione Demo : [ ]
Commento            :
Corretta conversione archivi con particalre attenzione alla ricostruzione indici di panapdc e multirel che ahanno cambiato posizione dalla 3.2 alla 10.0


git-svn-id: svn://10.65.10.50/trunk@17857 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-12-10 16:55:06 +00:00
parent cb69e4727a
commit ed84d58a07
6 changed files with 209 additions and 241 deletions

View File

@ -12,6 +12,7 @@
#include <urldefid.h>
#include <user.h>
#include <nditte.h>
#include <errno.h>
#include <fcntl.h>
@ -108,16 +109,14 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _mask(NULL), _firm(0), _
{
if (!fexist(Dir_file)) // controlla l'esistenza dei direttori standard (dir.gen e trc.gen)
{ // vengono creati se non esistono
TDir d;
FileDes* fd = d.filedesc();
strcpy(fd->SysName,"$dir.gen");
fd->LenR =160;
fd->EOD = fd->EOX = 1L;
fd->Flags = 0;
strcpy(fd->Des ,"Directory");
strcpy(fd->FCalc,"0");
strcpy(fd->GenPrompt,"");
FileDes fd; memset(&fd, 0, sizeof(fd));
strncpy(fd.SysName, "$dir.gen", sizeof(fd.SysName));
strncpy(fd.Des, "Directory", sizeof(fd.Des));
strncpy(fd.FCalc, "0", sizeof(fd.FCalc));
strncpy(fd.GenPrompt,"", sizeof(fd.GenPrompt));
fd.LenR =160;
fd.EOD = fd.EOX = 1L;
fd.Flags = 0;
#ifdef WIN32
int handle = sopen(Dir_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE);
@ -126,16 +125,17 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _mask(NULL), _firm(0), _
#endif
if (handle != -1)
{
if (write( handle, fd, sizeof(FileDes)) == -1)
if (write( handle, &fd, sizeof(FileDes)) == -1)
fatal_box("Impossibile scrivere il file dir.gen per dati standard: errore %d",errno);
close(handle);
}
else fatal_box("Impossibile creare il file dir.gen per dati standard: errore %d",errno);
else
fatal_box("Impossibile creare il file dir.gen per dati standard: errore %d",errno);
}
if (!fexist(Trc_file))
{
TTrec r;
RecDes* rd = r.rec();
RecDes& rd = r.rec();
#ifdef WIN32
int handle = sopen(Trc_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE);
#else
@ -143,11 +143,12 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _mask(NULL), _firm(0), _
#endif
if (handle != -1)
{
if (write( handle, (char*)rd, sizeof(RecDes)) == -1)
if (write( handle, (void*)&rd, sizeof(RecDes)) == -1)
fatal_box("Impossibile scrivere il file trc.gen per dati standard: errore %d",errno);
close(handle);
}
else fatal_box("Impossibile creare il file trc.gen per dati standard: errore %d",errno);
else
fatal_box("Impossibile creare il file trc.gen per dati standard: errore %d",errno);
}
}
@ -161,8 +162,8 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r)
TToken_string s;
TParagraph_string d("", 25);
TConfig * descr = NULL;
TTrec & rec = *r.rec();
TDir & dir = *r.dir();
const TTrec& rec = r.rec();
const TDir& dir = r.dir();
const char * descfname = r.descfname();
TString4 tab(r.tab());
const bool istab = tab.not_empty();
@ -205,7 +206,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r)
row.put(table[s.get_int()], 18);
row.put(format("%4d", s.get_int()), 38);
row.put(format("%4d", s.get_int()), 43);
row.put(format("%4d", rec.rec()->Fd[i].RecOff), 48);
row.put(format("%4d", rec.rec().Fd[i].RecOff), 48);
const char *wd = NULL;
d = "";
@ -389,7 +390,10 @@ void TManutenzione_app::open_log()
{
_print_log = false;
if (_log == NULL)
_log = new TLog_report("Conversione");
{
TString s; s << TR("Conversione") << ' ' << TDate(TODAY);
_log = new TLog_report(s);
}
}
void TManutenzione_app::write_log(const char* line, const int severity)
@ -461,21 +465,21 @@ void TManutenzione_app::insert_riga (long riga_sel, TToken_string& riga)
/* shift di uno in avanti degli elementi del direttorio partendo dall'ultimo */
for (int i=num_files; i>=logicnum; i--)
{
_browse->dir()->get (i, _nolock, _nordir, _sysdirop);
_browse->dir()->put (i + 1, _nordir, _sysdirop);
_browse->rec()->get (i);
_browse->rec()->put (i + 1);
_browse->dir().get (i, _nolock, _nordir, _sysdirop);
_browse->dir().put (i + 1, _nordir, _sysdirop);
_browse->rec().get (i);
_browse->rec().put (i + 1);
}
_browse->dir()->set(_mask->get(FLD_NOME), _mask->get_long(FLD_EOD),
_mask->get_long(FLD_FLAG), _mask->get (FLD_DESC),
_mask->get (FLD_FORMULA));
_browse->dir()->put(logicnum, _nordir, _sysdirop);
_browse->rec()->zero();
_browse->rec()->put(logicnum);
_browse->dir()->get(LF_DIR);
_browse->dir()->eod()++;
_browse->set_items(_browse->dir()->eod());
_browse->dir()->put(LF_DIR);
_browse->dir().set(_mask->get(FLD_NOME), _mask->get_long(FLD_EOD),
_mask->get_long(FLD_FLAG), _mask->get (FLD_DESC),
_mask->get (FLD_FORMULA));
_browse->dir().put(logicnum, _nordir, _sysdirop);
_browse->rec().zero();
_browse->rec().put(logicnum);
_browse->dir().get(LF_DIR);
_browse->dir().set_eod(_browse->dir().eod()+1);
_browse->set_items(_browse->dir().eod());
_browse->dir().put(LF_DIR);
}
}
@ -669,14 +673,14 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
case K_F7:
case K_ENTER:
{
strcpy (dep.SysName,_mask->get (FLD_NOME));
strcpy (dep.SysName,_mask->get(FLD_NOME));
dep.EOD = atol(_mask->get (FLD_EOD));
dep.Flags = atol(_mask->get (FLD_FLAG));
strcpy (dep.Des,_mask->get (FLD_DESC));
strcpy (dep.FCalc,_mask->get (FLD_FORMULA));
const TRecnotype eox = _mask->get_bool(FLD_EXTEND) ? _mask->get_long(FLD_EOX) : oldeox;
TDir& dir = *_browse->dir();
TDir& dir = _browse->dir();
dir.get(logicnum, _lock, _nordir, _sysdirop);
dir.set(dep.SysName, dep.EOD, dep.Flags, dep.Des, dep.FCalc);
dir.put(logicnum, _nordir, _sysdirop);
@ -692,16 +696,16 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
if (!f_name.exist()) f.build(eox);
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
_browse->dir().get(logicnum, _nolock, _nordir, _sysdirop);
}
if (tasto == K_F5 && logicnum > 1)
if (tasto == K_F5 && logicnum >= LF_USER)
{
f.packfile();
f.packindex();
// le 4 righe seguenti servono per allineare i valori di EOD ed EOX dopo una compattazione forzata
dir.get(logicnum, _lock, _nordir, _sysdirop);
dir.set(dep.SysName, dep.EOD, dep.Flags, dep.Des, dep.FCalc);
dir.set_eox(_browse->dir()->eod());
dir.set_eox(_browse->dir().eod());
dir.put(logicnum, _nordir, _sysdirop);
}
else
@ -775,18 +779,18 @@ void TManutenzione_app::delete_riga (long riga_sel)
/* shift di uno in avanti degli elementi del direttorio partendo dall'ultimo */
for (int i = logicnum + 1; i <= num_files; i++)
{
_browse->dir()->get (i, _nolock, _nordir, _sysdirop);
_browse->dir()->put (i - 1, _nordir, _sysdirop);
_browse->rec()->get (i);
_browse->rec()->put (i - 1);
_browse->dir().get (i, _nolock, _nordir, _sysdirop);
_browse->dir().put (i - 1, _nordir, _sysdirop);
_browse->rec().get (i);
_browse->rec().put (i - 1);
}
_browse->dir()->get(LF_DIR);
_browse->dir().get(LF_DIR);
r.zero();
r.put(_browse->dir()->eod());
_browse->dir()->eod()--;
_browse->set_items(_browse->dir()->eod());
_browse->dir()->put(LF_DIR);
r.put(_browse->dir().eod());
_browse->dir().set_eod(_browse->dir().eod()-1);
_browse->set_items(_browse->dir().eod());
_browse->dir().put(LF_DIR);
_browse->force_update();
}
@ -824,11 +828,11 @@ void TManutenzione_app::repair_file(int i)
save_file(n);
TExternisamfile ef(d.filename());
const RecDes* rd = ef.curr().rec_des();
const RecDes& rd = ef.curr().rec_des();
TTrec rec; rec.get(i);
const int oldreclen = rec.len();
const int recsize = sizeof(RecDes);
memcpy(rec.rec(), rd, recsize);
rec.rec() = rd;
rec.put(i);
const int reclen = rec.len();
@ -851,7 +855,7 @@ void TManutenzione_app::update_dir()
// trattasi di files PRASSI, (ad esempio i cespiti) che da noi non vengono toccati,
// in modo da evitare colpe inutili. Noi aggiorniamo solo i tracciati su dir e trc,
// ma il file fisico manco lo tocchiamo!!
TString80 s;
const TString pref(prefix().name());
const bool is_com = prefix().is_com();
@ -860,9 +864,7 @@ void TManutenzione_app::update_dir()
const int last_new_item = _dirs.last(); //quale è il numero dell'ultimo file nuovo?
TDir d ;
d.get(LF_DIR);
TDir d(LF_DIR); // equivale a d.get(LF_DIR, _nolock, _nordir, _sysdirop);
const int last_curr_item = (int)d.eod(); //quale è il numero dell'ultimo file attualmente presente
const int update_items = (last_new_item < last_curr_item) ? last_new_item : last_curr_item;
@ -893,10 +895,11 @@ void TManutenzione_app::update_dir()
const long flags = ds.flags();
d.get(i, _nolock, _nordir, _sysdirop);
const bool old_is_firm = d.is_firm();
TFilename fs = d.filename();
/* Roba incomprensibile e quindi inutile
d.get(i);
TFilename fs(d.filename());
if (strrchr(d.name(),'.') != NULL) // No extension please!
{
d.get(i, _nolock, _nordir, _sysdirop);
@ -905,14 +908,15 @@ void TManutenzione_app::update_dir()
d.set_name(ext);
d.put(i, _nordir, _sysdirop);
}
*/
if (!fs.exist())
{
if (d.eox() > 0L)
{
d.get(i, _nolock, _nordir, _sysdirop);
d.eod() = 0L;
d.eox() = 0L;
d.set_eod(0);
d.set_eox(0);
d.put(i, _nordir, _sysdirop);
}
}
@ -996,8 +1000,8 @@ void TManutenzione_app::update_dir()
FOR_EACH_TOKEN(idx_names, idx_name)
xvt_fsys_remove_file(idx_name);
d.get(i, _nolock, _nordir, _sysdirop);
d.eod() = 0L;
d.eox() = 0L;
d.set_eod(0);
d.set_eox(0);
d.put(i, _nordir, _sysdirop);
}
}
@ -1019,7 +1023,7 @@ void TManutenzione_app::update_dir()
if (to_create && !cmn_file)
{
if (flags < 10000L && flags > -1L && fexist(fs) && (fd != fs))
if (flags < 10000L && flags > -1L && fs.exist() && (fd != fs))
{
bool ok = true;
@ -1037,18 +1041,16 @@ void TManutenzione_app::update_dir()
TTrec wrd;
wrs.get(i);
wrd.get(j);
wrd = wrs;
wrd.get(j); // A cosa ca$$o serve ...
wrd = wrs; // ... visto che poi lo sbatto via?
wrd.set_num(j);
wrd.put(j);
wrd.put(j);
wrs.zero();
wrs.put(i);
TDir wds;
TDir wdd;
wds.get(i, _nolock, _nordir, _sysdirop);
wdd.get(j, _nolock, _nordir, _sysdirop);
TDir wds(i);
TDir wdd(j);
wdd.set(wds.name(), wds.eod(), wds.flags(), wds.des(), wds.expr());
wdd.set_eox(wds.eox());
@ -1067,7 +1069,7 @@ void TManutenzione_app::update_dir()
if (found)
continue;
path.rtrim(1);
if (path.not_empty() && !fexist(path))
if (path.full() && !path.exist())
ok = make_dir(path);
if (ok && fcopy(fs, fd))
{
@ -1081,7 +1083,7 @@ void TManutenzione_app::update_dir()
fdi.ext("");
if (j > 1) // Means that more indexes are in TToken_string ts
{
TString xx=fdi.name();
const TFixed_string xx(fdi.name());
if (xx.len() < 8)
fdi << ('0' + j);
else
@ -1176,17 +1178,17 @@ void TManutenzione_app::update_dir()
TDir d1((TDir &) _dirs[i]);
d1.set_len(0);
d1.eox() = 0L;
d1.eod() = 0L;
d1.flags() = 0L;
d1.set_eox(0);
d1.set_eod(0);
d1.set_flags(0);
d1.put(i, _nordir, _sysdirop); //scrive su dir.gen il nuovo file aggiunto (mettendo numero,eox,eod,flags)
}
//allinea i valori di eox ed eod (eox non può mai essere < eod!)
d.get(LF_DIR, _nolock, _nordir, _sysdirop);
d.eod() = last_new_item;
d.set_eod(last_new_item);
if (d.eox() < d.eod())
d.eox() = d.eod();
d.set_eox(d.eod());
d.put(LF_DIR, _nordir, _sysdirop);
}
@ -1199,8 +1201,7 @@ void TManutenzione_app::convert_dir()
const bool is_com = prefix().is_com();
const int last_new_item = _dirs.last();
TDir d;
d.get(LF_DIR);
TDir d(LF_DIR);
const int last_curr_item = (int)d.eod();
const int update_items = (last_new_item < last_curr_item) ? last_new_item : last_curr_item;
@ -1247,21 +1248,12 @@ void TManutenzione_app::convert_dir()
if (err != NOERR)
{
bool go_on = true;
//controllo solo all'aga
if (is_power_station())
go_on = yesno_box(FR("Il file %d non puo' essere aperto:\nErrore %d. Continuare ugualmente?"), i, err);
if (!go_on)
stop_run();
else
{
//si decide di proseguire anche se il file non può essere aperto ne tiene traccia nel log (nel caso di utonti..
//..è sempre così, perchè go_on è sempre true)
TString msg;
msg.format(TR("Il file %d non può essere aperto. Errore %d"), i, err);
write_log(msg, 2);
continue;
}
//si decide di proseguire anche se il file non può essere aperto ne tiene traccia nel log (nel caso di utonti..
//..è sempre così, perchè go_on è sempre true)
TString msg;
msg.format(TR("Il file %d non può essere aperto. Errore %d"), i, err);
write_log(msg, 2);
continue;
}
} //if (i > 2 && err != NOERR &&...
@ -1274,7 +1266,7 @@ void TManutenzione_app::convert_dir()
if (to_create && has_module(module, CHK_DONGLE))
{
TDir df; df.get(i);
const TDir df(i);
const TFilename fname(df.filename());
//crea il nuovo file in base al tracciato record nuovo!
@ -1329,23 +1321,21 @@ void TManutenzione_app::convert_dir()
} //for (int i = 2; i <= update_items...
d.get(LF_DIR, _nolock, _nordir, _sysdirop);
d.flags() = _level;
d.set_flags(_level);
d.put(LF_DIR, _nordir, _sysdirop);
put_history(pref);
}
void TManutenzione_app::load_des(const int maxfdir)
{
TWait_cursor waiter;
const TString pref(prefix().name());
_dirs.destroy();
_recs.destroy();
_level = prefix().filelevel();
TDir d;
TTrec r;
d.get(LF_DIR,_nolock, _nordir,_sysdirop);
TDir d(LF_DIR);
int items = (int)d.eod();
long flags = d.flags();
const bool standard = pref.empty();
@ -1405,9 +1395,9 @@ void TManutenzione_app::load_des(const int maxfdir)
tr.put(ln);
}
d.eod() = (long)last_newln;
d.eox() = (long)last_newln;
d.flags() = _level = flags;
d.set_eod(last_newln);
d.set_eox(last_newln);
d.set_flags(_level = flags);
prefix().set_stdlevel(flags);
d.put(LF_DIR,_nordir,_sysdirop);
}
@ -1427,7 +1417,8 @@ void TManutenzione_app::load_des(const int maxfdir)
{
p.addstatus(1);
d.get(i, _nolock, _nordir, _sysdirop);
r.get(i);
TTrec r(i);
if (standard)
{
TFilename desc_file;
@ -1521,7 +1512,6 @@ void TManutenzione_app::update()
do_events();
begin_wait();
TDir d;
d.get(LF_DIR,_nolock, _nordir, _sysdirop);
const int maxfdir = d.items();
@ -1530,11 +1520,7 @@ void TManutenzione_app::update()
prefix().set_codditta(0L);
open_log();
TString s;
s.format(FR("Conversione del %s"), (const char*)TDate(TODAY).string());
write_log(s);
write_log("");
write_log(TR("Dati comuni"));
write_log(TR("Conversione Dati comuni"));
write_log("");
update_dir();
@ -1543,35 +1529,34 @@ void TManutenzione_app::update()
TSystemisamfile ditte(LF_NDITTE);
ditte.open();
s = TR("Conversione archivi ditte.");
TProgind p(ditte.items() ? ditte.items() : 1, s, false, true);
p.setstatus(1);
TString mxs;
for (ditte.first(); !ditte.eof(); ditte.next())
const int nditte = ditte.items();
if (nditte)
{
const TRecnotype rec = ditte.recno();
const long codditta = ditte.get_long("CODDITTA");
mxs = s;
mxs << TR(" Ditta ") << codditta;
p.addstatus(1);
p.set_text(mxs);
if (codditta > _history_firm && prefix().exist(codditta))
TProgind p(nditte, TR("Conversione archivi ditte."), false, true);
TString mxs;
for (int err = ditte.first(); err == NOERR; err = ditte.next())
{
ditte.close();
set_firm(codditta);
write_log("");
write_log(mxs);
write_log("");
update_dir();
convert_dir();
ditte.open();
const TRecnotype rec = ditte.recno();
const long codditta = ditte.get_long(NDT_CODDITTA);
mxs.cut(0) << TR("Conversione Ditta") << ' ' << codditta << ' ' << ditte.get(NDT_RAGSOC);
if (!p.addstatus(1))
break;
p.set_text(mxs);
if (codditta > _history_firm && prefix().exist(codditta))
{
ditte.close();
set_firm(codditta);
write_log("");
write_log(mxs);
write_log("");
update_dir();
convert_dir();
ditte.open();
}
ditte.readat(rec);
}
ditte.readat(rec);
ditte.close();
}
ditte.close();
//chiude il log di conversione
close_log();
@ -1598,8 +1583,6 @@ void TManutenzione_app::update()
close_history();
send_campo_xml(); // Spedisce situazione via ftp
end_wait();
}
void TManutenzione_app::main_loop()

View File

@ -25,8 +25,8 @@ class TMask_field;
class TDir_sheet : public TSheet
{
TTrec *_rec;
TDir *_dir;
TTrec _rec;
TDir _dir;
FileDes _s_dir;
long _items;
@ -35,11 +35,13 @@ protected:
virtual void get_row(long n, TToken_string& r);
public:
TDir* dir() const { return _dir; }
TTrec* rec() const { return _rec; }
const TDir& dir() const { return _dir; }
TDir& dir() { return _dir; }
const TTrec& rec() const { return _rec; }
TTrec& rec(){ return _rec; }
void set_items(long items) { _items = items; }
void add();
void rebuild() { _items = _dir->items();}
void rebuild() { _items = _dir.items();}
TDir_sheet(const char* title, bool superprassi, const char* col = "N.@3R|Nome@20|EOD@7R|EOX@7R|Lung.@7R|Descrizione@43|Formula@33|Flags@7R");
virtual ~TDir_sheet();
@ -47,9 +49,9 @@ public:
class TRec_sheet : public TObject
{
TTrec *_rec;
TTrec *_rec_old;
TDir *_dir;
TTrec _rec;
TTrec _rec_old;
TDir _dir;
bool _comfile;
TConfig *_descr;
static TMask *_mask;
@ -64,11 +66,11 @@ protected:
void save();
void save_desc();
virtual long get_items() const { return _rec->fields(); }
virtual long get_items() const { return _rec.fields(); }
public:
TDir* dir() const { return _dir; }
TTrec* rec() const { return _rec; }
const TDir& dir() const { return _dir; }
const TTrec& rec() const { return _rec; }
const char* descfname() const { return _descfname;}
const char* tab() const { return _tab; }
void edit();

View File

@ -13,15 +13,15 @@ TMask* TRec_sheet::_mask = NULL;
void TDir_sheet::add()
{
_dir->get(LF_DIR, _lock, _nordir, _sysdirop);
const int nitems = (int)_dir->eod() + 1;
_dir.get(LF_DIR, _lock, _nordir, _sysdirop);
const int nitems = (int)_dir.eod() + 1;
_dir->eod() = nitems;
if (_dir->eox() < _dir->eod())
_dir->eox() += 10;
_dir->put(LF_DIR, _nordir, _sysdirop);
TDir d;
if (_dir.eox() < nitems)
_dir.set_eox(nitems + 10);
_dir.set_eod(nitems);
_dir.put(LF_DIR, _nordir, _sysdirop);
TDir d;
d.zero();
d.put(nitems, _nordir, _sysdirop);
_items = nitems;
@ -46,29 +46,25 @@ TDir_sheet::TDir_sheet(const char* title, bool superprassi, const char* colonne)
add_button(DLG_HELP, TR("Help"), K_F1, BMP_HELP);
xvt_toolbar_set_last_tool(toolbar(), DLG_QUIT);
_dir = new TDir;
_rec = new TTrec;
rebuild();
}
TDir_sheet::~TDir_sheet()
{
delete _dir;
delete _rec;
}
void TDir_sheet::get_row(long n, TToken_string& l)
{
n++;
_dir->get ((int)n,_nolock,_nordir,_sysdirop);
_dir.get ((int)n,_nolock,_nordir,_sysdirop);
l.format("%d", n); // Numero progressivo del file
l.add(_dir->name());
l.add(_dir->eod());
l.add(_dir->eox());
l.add((long)_dir->len());
l.add(_dir->des());
l.add(_dir->expr());
l.add(_dir->flags());
l.add(_dir.name());
l.add(_dir.eod());
l.add(_dir.eox());
l.add((long)_dir.len());
l.add(_dir.des());
l.add(_dir.expr());
l.add(_dir.flags());
}
@ -76,23 +72,20 @@ TRec_sheet::TRec_sheet(int logicnum, const char * tab)
: _descr(NULL), _tab(tab)
{
_external = FALSE;
_dir = new TDir;
_rec = new TTrec;
_rec_old = new TTrec;
_mask = new TMask("ba1100d");
_dir->get(logicnum, _lock, _nordir, _sysdirop);
_rec->get(logicnum);
if (_dir->len() == 0)
_rec->zero();
*_rec_old = *_rec;
_dir.get(logicnum, _lock, _nordir, _sysdirop);
_rec.get(logicnum);
if (_dir.len() == 0)
_rec.zero();
_rec_old = _rec;
_tab.lower();
if (fexist(DESCDIR))
{
if (logicnum >= LF_TABGEN && logicnum <= LF_TAB && _tab.not_empty())
_descfname.format("%s/d%s.des", DESCDIR, (const char *) _tab);
else
_descfname.format("%s/d%d.des", DESCDIR, _dir->num());
_descfname.format("%s/d%d.des", DESCDIR, _dir.num());
FILE * fd = NULL;
if (!fexist(_descfname) && (fd = fopen(_descfname, "w")) == NULL)
@ -106,31 +99,24 @@ TRec_sheet::TRec_sheet(int logicnum, const char * tab)
}
}
TRec_sheet::TRec_sheet(TExternisamfile* file)
: _descr(NULL), _tab("")
TRec_sheet::TRec_sheet(TExternisamfile* file) : _descr(NULL)
{
_external = TRUE;
_dir = new TDir;
_rec = new TTrec;
_rec_old = new TTrec;
_mask = new TMask("ba1100d");
const FileDes& d = prefix().get_filedes(file->num());
const RecDes& r = prefix().get_recdes(file->num());
memcpy(_dir->filedesc(),&d,sizeof(FileDes));
memcpy(_rec->rec(),&r,sizeof(RecDes));
if (_dir->len() == 0)
_rec->zero();
*_rec_old = *_rec;
_dir.filedesc() = d;
_rec.rec() = r;
if (_dir.len() == 0)
_rec.zero();
_rec_old = _rec;
}
TRec_sheet::~TRec_sheet()
{
if (!_external)
_dir->get(_dir->num(), _unlock, _nordir, _sysdirop);
delete _dir;
delete _rec;
delete _rec_old;
_dir.get(_dir.num(), _unlock, _nordir, _sysdirop);
delete _mask;
_mask = NULL;
if (_descr)
@ -199,76 +185,74 @@ void TRec_sheet::save_desc()
{
if (_descr)
{
TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS);
TSheet_field& f1 = _mask->sfield(F_FIELDS);
const int nfields = f1.items();
for (int i = 0; i < nfields; i++)
_descr->set(_rec->rec()->Fd[i].Name, f1.row(i).items() > 4 ?
f1.row(i).get(-2) : "");
_descr->set(_rec.rec().Fd[i].Name, f1.row(i).items() > 4 ?
f1.row(i).get(-2) : "");
delete _descr;
_descr = new TConfig(_descfname, DESCPAR);
}
}
void TRec_sheet::save()
{
if ((*_rec == *_rec_old && !_descr) ||
if ((_rec == _rec_old && !_descr) ||
!yesnocancel_box(TR("Salvare le modifiche"))) return;
if (prefix().name()[0]) // Non fare conversioni sui dati standard
{
TSystemisamfile f(_rec->num());
f.update(*_rec, true);
TSystemisamfile f(_rec.num());
f.update(_rec, true);
}
save_desc();
*_rec_old = *_rec;
_rec_old = _rec;
// modifica del 16-1-98, Augusto :
// Il bottone "salva" salva anche il trr e dir in recdesc
TFilename nf;
nf << "recdesc\\f" << _dir->num();
nf << "recdesc\\f" << _dir.num();
nf.ext("trr");
{
_rec->set_des(_descr,_tab.upper());
_rec.set_des(_descr,_tab.upper());
ofstream out(nf);
out << *_rec;
_rec->set_des();
out << _rec;
_rec.set_des();
}
nf.ext("dir");
ofstream out(nf);
out << *_dir;
out << _dir;
}
void TRec_sheet::edit()
{
bool import_dirty = FALSE;
TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS);
TSheet_field& f2 = (TSheet_field&) _mask->field(F_KEYS);
TSheet_field& f1 = _mask->sfield(F_FIELDS);
TSheet_field& f2 = _mask->sfield(F_KEYS);
if (!_external)
{
_mask->set (F_NUM, _dir->num());
_mask->set (F_DES, _dir->des());
_mask->set (F_NUM, _dir.num());
_mask->set (F_DES, _dir.des());
}
else
_mask->disable(-1);
f1.sheet_mask().field(FLD_LEN).set_handler(len_handler);
f1.set_notify(fld_notify);
f1.set_append(FALSE);
int nfields = _rec->fields();
f1.enable_column(FLD_DES - 101, _descr != NULL);
int nfields = _rec.fields();
int i;
for (i = 0; i < nfields; i++)
{
f1.row(i) = _rec->fielddef(i);
f1.row(i) = _rec.fielddef(i);
if (_descr)
f1.row(i).add(_descr->get(_rec->rec()->Fd[i].Name));
f1.row(i).add(_descr->get(_rec.rec().Fd[i].Name));
else
f1.row(i).add("");
const TFieldtypes type = (TFieldtypes) f1.row(i).get_int(1);
@ -292,8 +276,8 @@ void TRec_sheet::edit()
}
f2.set_notify(key_notify);
f2.set_append(FALSE);
int nkeys = _rec->keys();
for (i = 0; i < nkeys; i++) f2.row(i) = _rec->keydef(i);
int nkeys = _rec.keys();
for (i = 0; i < nkeys; i++) f2.row(i) = _rec.keydef(i);
f2.disable_cell(0, 1);
while (TRUE)
{
@ -311,18 +295,18 @@ void TRec_sheet::edit()
if (s.items() > 4)
s.destroy(-2);
if (s.items() > 0)
_rec->update_fielddef(nf++, s);
_rec.update_fielddef(nf++, s);
}
_rec->set_fields(nf);
_rec->rehash();
_rec.set_fields(nf);
_rec.rehash();
nkeys = f2.items();
_rec->set_keys(nkeys);
_rec.set_keys(nkeys);
for (i = 0; i < nkeys; i++)
{
TToken_string& s = f2.row(i);
_rec->update_keydef(i, s);
_rec.update_keydef(i, s);
}
_dir->set_len(_rec->len());
_dir.set_len(_rec.len());
save();
return;
}
@ -348,7 +332,7 @@ void TRec_sheet::edit()
{
TMask m("ba1100f");
TFilename nf;
nf << 'f' << _dir->num();
nf << 'f' << _dir.num();
nf.ext("trr");
m.set(F_NOMEF, nf);
if (m.run() == K_ENTER)
@ -358,14 +342,14 @@ void TRec_sheet::edit()
{
save_desc();
{
_rec->set_des(_descr,_tab.upper());
_rec.set_des(_descr,_tab.upper());
ofstream out(nf);
out << *_rec;
_rec->set_des();
out << _rec;
_rec.set_des();
}
nf.ext("dir");
ofstream out(nf);
out << *_dir;
out << _dir;
}
}
}
@ -373,7 +357,7 @@ void TRec_sheet::edit()
case K_F7:
{
TMask m("ba1100f");
TFilename nout(_dir->name());
TFilename nout(_dir.name());
nout.strip("$%");
nout.ext("trr");
@ -384,18 +368,18 @@ void TRec_sheet::edit()
if (nf.not_empty())
{
import_dirty = TRUE;
_rec->set_des(_descr,_tab.upper());
_rec.set_des(_descr,_tab.upper());
ifstream in(nf);
in >> *_rec;
nfields = _rec->fields();
in >> _rec;
nfields = _rec.fields();
fcopy(_descfname,"des.xxx"); // salva il vecchio file di descrizioni
f1.destroy(-1);
for (int i = 0; i < nfields; i++)
{
f1.row(i) = _rec->fielddef(i);
f1.row(i) = _rec.fielddef(i);
if (_descr)
f1.row(i).add(_descr->get(_rec->rec()->Fd[i].Name));
f1.row(i).add(_descr->get(_rec.rec().Fd[i].Name));
else
f1.row(i).add("");
const TFieldtypes type = (TFieldtypes) f1.row(i).get_int(1);
@ -417,10 +401,10 @@ void TRec_sheet::edit()
break;
}
}
nkeys = _rec->keys();
nkeys = _rec.keys();
f2.reset();
for (int i = 0; i < nkeys; i++)
f2.row(i) = _rec->keydef(i);
f2.row(i) = _rec.keydef(i);
f2.disable_cell(0, 1);
}
}

View File

@ -196,6 +196,7 @@ bool save_campo_xml()
// Aggiorna il file xml coi dati di installazione e lo spedisce qua
bool send_campo_xml()
{
TWait_cursor waiter;
bool ok = false;
if (save_campo_xml())
{

View File

@ -171,7 +171,7 @@ void TPackFiles_application::main_loop()
d.get(i,_nolock, _nordir,_sysdirop);
bool is_com = d.is_com();
d.get(i,_nolock, is_com ? _comdir : _nordir);
d.eod() = 0L;
d.set_eod(0);
d.put(i, is_com ? _comdir : _nordir);
if (f.pack() == NOERR)
if (f.load(d_name) == NOERR) // Reload

View File

@ -518,14 +518,12 @@ void TConversione_archivi::patch_com()
void TConversione_archivi::zero_770()
{
TDir d;
for (int i = LF_BASE ; i <= LF_DETH; i++)
{
TDir d;
d.get(i, _lock, _nordir, _sysdirop);
d.eod() = 0L;
d.eox() = 0L;
d.put(i, _nordir, _sysdirop);
d.reset_eox();
d.put(i, _nordir, _sysdirop);
}
TFilename files;
@ -727,13 +725,13 @@ void TConversione_archivi::convert_profili()
TFilename lf;
d.get(LF_FORM, _nolock, _comdir, _sysdirop);
d.eod() = 0;
d.set_eod(0);
d.put(LF_FORM, _comdir, _sysdirop);
form.pack();
lf.format("%sstd/lf0054.txt", __ptprf);
if (fexist(lf)) form.load(lf);
d.get(LF_RFORM, _nolock, _comdir, _sysdirop);
d.eod() = 0;
d.set_eod(0);
d.put(LF_RFORM, _comdir, _sysdirop);
rform.pack();
}