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

View File

@ -25,8 +25,8 @@ class TMask_field;
class TDir_sheet : public TSheet class TDir_sheet : public TSheet
{ {
TTrec *_rec; TTrec _rec;
TDir *_dir; TDir _dir;
FileDes _s_dir; FileDes _s_dir;
long _items; long _items;
@ -35,11 +35,13 @@ protected:
virtual void get_row(long n, TToken_string& r); virtual void get_row(long n, TToken_string& r);
public: public:
TDir* dir() const { return _dir; } const TDir& dir() const { return _dir; }
TTrec* rec() const { return _rec; } TDir& dir() { return _dir; }
const TTrec& rec() const { return _rec; }
TTrec& rec(){ return _rec; }
void set_items(long items) { _items = items; } void set_items(long items) { _items = items; }
void add(); 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"); 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(); virtual ~TDir_sheet();
@ -47,9 +49,9 @@ public:
class TRec_sheet : public TObject class TRec_sheet : public TObject
{ {
TTrec *_rec; TTrec _rec;
TTrec *_rec_old; TTrec _rec_old;
TDir *_dir; TDir _dir;
bool _comfile; bool _comfile;
TConfig *_descr; TConfig *_descr;
static TMask *_mask; static TMask *_mask;
@ -64,11 +66,11 @@ protected:
void save(); void save();
void save_desc(); void save_desc();
virtual long get_items() const { return _rec->fields(); } virtual long get_items() const { return _rec.fields(); }
public: public:
TDir* dir() const { return _dir; } const TDir& dir() const { return _dir; }
TTrec* rec() const { return _rec; } const TTrec& rec() const { return _rec; }
const char* descfname() const { return _descfname;} const char* descfname() const { return _descfname;}
const char* tab() const { return _tab; } const char* tab() const { return _tab; }
void edit(); void edit();

View File

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

View File

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

View File

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