Patch level : 10.0 200

Files correlati     : ba1.exe
Ricompilazione Demo : [ ]
Commento            :
0001036: installazione cd patch 180
Installando ex novo ed indicando una società esistente di dati su una cartella diversa viene segnalato l'errore ba1.exe in fase di conversione archivi, richiamando da manutenzione archivi la conversione vengono generati gli errori allegati. Nell'area ftp di Aga, cartella Ilaria allego l'area dati SIDA per il test.


git-svn-id: svn://10.65.10.50/trunk@17973 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-12-23 09:11:50 +00:00
parent a8c9e7810c
commit 97cf100315
6 changed files with 205 additions and 229 deletions

View File

@ -689,7 +689,8 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
TFilename f_name(d.name()); TFilename f_name(d.name());
f_name.ext("dbf"); f_name.ext("dbf");
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);
} }
@ -800,38 +801,38 @@ bool TManutenzione_app::recover(TSystemisamfile& f, int err)
void TManutenzione_app::repair_file(int i) void TManutenzione_app::repair_file(int i)
{ {
TString s(_MAX_PATH); TString s(_MAX_PATH + 50); // Messaggio di log
TDir d(i); TDir d(i);
const char* n = d.filename();
if (d.eod() == 0) if (d.eod() == 0)
{ {
TFilename n(d.filename());
save_file(n); save_file(n);
remove(n);
n.ext("cdx"); remove(n); TToken_string names; get_table_names(i, names, 0xF);
n.ext("fpt"); remove(n); FOR_EACH_TOKEN(names, name)
s.format(FR("File n. %d - %s : eliminato file errato"), i, (const char *)d.filename()); xvt_fsys_remove_file(name);
s.format(FR("File n. %d - %s : eliminato file errato"), i, n);
write_log(s, 2); write_log(s, 2);
} }
else else
{ {
d.get(i, _lock, _nordir, _sysdirop); d.get(i, _lock, _nordir, _sysdirop);
TFilename n(d.filename());
save_file(n); save_file(n);
TExternisamfile ef(d.filename()); TExternisamfile ef(n);
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);
rec.rec() = rd; rec.rec() = rd;
rec.put(i); rec.put(i);
const int reclen = rec.len(); const int reclen = rec.len();
d.set_len(reclen); d.set_len(reclen);
d.put(i, _nordir, _sysdirop); d.put(i, _nordir, _sysdirop);
s.format(FR("File n. %d - %s : corretto tracciato da %d a %d bytes"), i, (const char *)d.filename(), oldreclen, reclen); s.format(FR("File n. %d - %s : corretto tracciato da %d a %d bytes"), i, n, oldreclen, reclen);
write_log(s, 1); write_log(s, 1);
} }
} }
@ -849,18 +850,18 @@ void TManutenzione_app::update_dir()
// 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!!
const TString pref(prefix().name());
const bool is_com = prefix().is_com();
if (prefix().get_codditta() <= _history_firm) if (prefix().get_codditta() <= _history_firm)
return; return;
const TString pref(prefix().name());
const bool is_com = prefix().is_com();
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(LF_DIR); // equivale a d.get(LF_DIR, _nolock, _nordir, _sysdirop); 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 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;
safely_close_closeable_isamfiles(); // Serve a premettere la chiamata ad fsize() in sicurezza
TString prompt(128); TString prompt(128);
if (is_com) if (is_com)
@ -869,13 +870,12 @@ void TManutenzione_app::update_dir()
prompt << TR("Aggiornamento ditta") << ' ' << atol(pref) << '.'; prompt << TR("Aggiornamento ditta") << ' ' << atol(pref) << '.';
TProgind p(update_items ? update_items : 1, prompt, false, true); TProgind p(update_items ? update_items : 1, prompt, false, true);
p.setstatus(1);
int i; int i;
for (i = LF_USER; i <= update_items; i++) for (i = LF_USER; i <= update_items; i++)
{ {
p.addstatus(1); if (!p.setstatus(i))
break;
const TDir & ds = (const TDir &) _dirs[i]; const TDir & ds = (const TDir &) _dirs[i];
const bool is_firm = ds.is_firm(); const bool is_firm = ds.is_firm();
@ -919,84 +919,75 @@ void TManutenzione_app::update_dir()
{ {
if (old_is_firm && !moveable_file(i) && d.eod() == 0L) if (old_is_firm && !moveable_file(i) && d.eod() == 0L)
{ {
TFilename n(d.filename()); const char* n = d.filename();
save_file(n); save_file(n);
remove(n);
n.ext("cdx"); remove(n); TToken_string names; get_table_names(i, names, 0xF);
n.ext("fpt"); remove(n); FOR_EACH_TOKEN(names, name)
xvt_fsys_remove_file(name);
TString msg(_MAX_PATH); TString msg(_MAX_PATH);
msg.format(FR("File n. %d - %s : eliminato file non utilizzato"), i, (const char *)d.filename()); msg.format(FR("File n. %d - %s : eliminato file non utilizzato"), i, (const char *)d.filename());
write_log(msg, 1); write_log(msg, 1);
} }
} }
if (i > 2 && is_firm == old_is_firm) if (i > LF_USER && is_firm == old_is_firm)
{ {
FILE * f = fopen(fs, "r"); const long size = fsize(fs);
if (f != NULL) if (flags < 10000L && size > 0L && d.len() > 0)
{ {
fseek(f, 0L, SEEK_END); TSystemisamfile b(i);
const long size = ftell(f); int err = b.is_valid(true);
fclose(f); if ((err == _istrcerr || err == _ispatherr) && (d.eod() == 0) && (size < 4096))
{
bool kill = true;
//controllo solo all'aga
if (is_power_station())
kill = yesno_box(FR("Il tracciato record del file %d e' incoerente:\nSi desidera eliminare il file vuoto %s?"), i, (const char*)fs);
if (kill)
{
TToken_string names; get_table_names(i, names, 0xF);
FOR_EACH_TOKEN(names, name)
xvt_fsys_remove_file(name);
if (flags < 10000L && size > 0L && d.len() > 0) err = NOERR;
// se si decide di eliminare il file con tracciato del cazzo deve tenerne traccia nel log (nel caso di utonti..
//..è sempre così, perchè kill è sempre true)
TString msg;
msg.format(TR("Eliminato il file %d avente tracciato record incoerente"), i);
write_log(msg, 2);
}
} //if((err==_istrcerr...
if (err != NOERR && flags < 10000L)
{ {
TSystemisamfile b(i); if (err == _istrcerr || err == _isbadtrc)
int err = b.is_valid(true); {
if ((err == _istrcerr) && (d.eod() == 0) && (fsize(d.filename()) < 4096)) repair_file(i);
{ err = NOERR;
bool kill = true; }
//controllo solo all'aga
if (is_power_station())
kill = yesno_box(FR("Il tracciato record del file %d e' incoerente:\nSi desidera eliminare il file vuoto %s?"), i, d.filename());
if (kill)
{
TFilename n(d.filename());
save_file(n);
remove(n);
n.ext("cdx"); remove(n);
n.ext("fpt"); remove(n);
err = NOERR;
// se si decide di eliminare il file con tracciato del cazzo deve tenerne traccia nel log (nel caso di utonti..
//..è sempre così, perchè kill è sempre true)
TString msg;
msg.format(TR("Eliminato il file %d avente tracciato record incoerente"), n);
write_log(msg, 2);
}
} //if((err==_istrcerr...
if (err != NOERR && flags < 10000L) if (err != NOERR && flags < 10000L)
{ {
if (err == _istrcerr || err == _isbadtrc) if (!recover(b, err))
{ {
repair_file(i); TString msg(_MAX_PATH);
err = NOERR; msg.format(TR("Impossibile compattare il file %d - %s : errore n.ro %d"), i, (const char *)d.filename(), err);
} write_log(msg, 2);
if (err != NOERR && flags < 10000L) }
{
if (!recover(b, err))
{
TString msg(_MAX_PATH);
msg.format(TR("Impossibile compattare il file %d - %s : errore n.ro %d"), i, (const char *)d.filename(), err);
write_log(msg, 2);
}
}
} //if(err!=NOERR && flags<10000L..
}
else
{
if (flags < 10000L && to_create)
{
xvt_fsys_remove_file(d.filename());
TToken_string idx_names;
get_idx_names(i, idx_names);
FOR_EACH_TOKEN(idx_names, idx_name)
xvt_fsys_remove_file(idx_name);
d.get(i, _nolock, _nordir, _sysdirop);
d.set_eod(0);
d.set_eox(0);
d.put(i, _nordir, _sysdirop);
} }
} //if(err!=NOERR && flags<10000L..
}
else
{
if (flags < 10000L && to_create)
{
TToken_string names;
get_table_names(i, names, 0xF);
FOR_EACH_TOKEN(names, name)
xvt_fsys_remove_file(name);
d.get(i, _nolock, _nordir, _sysdirop);
d.reset_eox();
d.put(i, _nordir, _sysdirop);
} }
} }
} }
@ -1030,21 +1021,13 @@ void TManutenzione_app::update_dir()
if (fs == fn) if (fs == fn)
{ {
TTrec wrs; TTrec wrs(i), wrd(j);
TTrec wrd; wrd = wrs; wrd.set_num(j); // Copia e rinumera
wrs.get(i);
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.zero();
wrs.put(i); wrs.put(i);
TDir wds(i);
TDir wdd(j); TDir wds(i), wdd(j);
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());
wdd.set_len(wrd.len()); wdd.set_len(wrd.len());
@ -1068,7 +1051,7 @@ void TManutenzione_app::update_dir()
{ {
TToken_string ts(10),td(10); TToken_string ts(10),td(10);
td.cut(0); td.cut(0);
get_idx_names(i,ts); // Get index names of current file in current dir get_table_names(i,ts,0x2); // Get index names of current file in current dir
for (int j=1; j<= ts.items() && ok; j++) for (int j=1; j<= ts.items() && ok; j++)
{ {
const TFilename fsi(ts.get()); const TFilename fsi(ts.get());
@ -1168,11 +1151,9 @@ void TManutenzione_app::update_dir()
//aggiornatore degli EOX EOD ecc. dei files nuovi //aggiornatore degli EOX EOD ecc. dei files nuovi
for (i = last_curr_item + 1; i <= last_new_item; i++) for (i = last_curr_item + 1; i <= last_new_item; i++)
{ {
TDir d1((TDir &) _dirs[i]); TDir d1((const TDir&)_dirs[i]);
d1.set_len(0); d1.set_len(0);
d1.set_eox(0); d1.reset_eox();
d1.set_eod(0);
d1.set_flags(0); 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)
} }
@ -1180,8 +1161,6 @@ void TManutenzione_app::update_dir()
//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.set_eod(last_new_item); d.set_eod(last_new_item);
if (d.eox() < d.eod())
d.set_eox(d.eod());
d.put(LF_DIR, _nordir, _sysdirop); d.put(LF_DIR, _nordir, _sysdirop);
} }
@ -1215,7 +1194,7 @@ void TManutenzione_app::convert_dir()
break; break;
const TTrec& rs = (const TTrec&)_recs[i]; // Nuovo tracciato record const TTrec& rs = (const TTrec&)_recs[i]; // Nuovo tracciato record
const TDir& ds = (const TDir&)_dirs[i]; const TDir& ds = (const TDir&)_dirs[i];
const long flags = ds.flags(); const long flags = ds.flags();
if (ds.len() > 0) if (ds.len() > 0)

View File

@ -10,6 +10,16 @@ BEGIN
GROUP 1 GROUP 1
END END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -25 -1 ""
END
BUTTON DLG_NULL 2 2
BEGIN
PROMPT -1 -1 ""
END
BUTTON DLG_IMPORT 10 2 BUTTON DLG_IMPORT 10 2
BEGIN BEGIN
PROMPT -45 -1 "~Importa" PROMPT -45 -1 "~Importa"
@ -26,15 +36,7 @@ BEGIN
GROUP 1 GROUP 1
END END
BUTTON DLG_PRINT 10 2 #include <helpbar.h>
BEGIN
PROMPT -25 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -55 -1 ""
END
ENDPAGE ENDPAGE

View File

@ -31,7 +31,7 @@ TDir_sheet::TDir_sheet(const char* title, bool superprassi, const char* colonne)
: TSheet(0, 0, 0, 0, title, colonne, superprassi ? 0xC : 0x8) : TSheet(0, 0, 0, 0, title, colonne, superprassi ? 0xC : 0x8)
{ {
add_button(DLG_PRINT, TR("Tracciati"), K_F3, BMP_PRINT); add_button(DLG_PRINT, TR("Tracciati"), K_F3, BMP_PRINT);
add_button(-1, "", 0, 1); // Separatore add_button(DLG_NULL, "", 0); // Separatore
if (superprassi) if (superprassi)
{ {
@ -39,7 +39,7 @@ TDir_sheet::TDir_sheet(const char* title, bool superprassi, const char* colonne)
add_button(DLG_CONVERT, TR("Conversione"), K_F7, 156); add_button(DLG_CONVERT, TR("Conversione"), K_F7, 156);
if (is_power_station()) if (is_power_station())
add_button(DLG_ADDFILE, TR("Nuovo file"), K_F8, BMP_NEWREC); add_button(DLG_ADDFILE, TR("Nuovo file"), K_F8, BMP_NEWREC);
add_button(-1, "", 0, 1); // Separatore add_button(DLG_NULL, "", 0); // Separatore
} }
add_button(DLG_INFO, TR("Info"), K_F2, BMP_INFO); add_button(DLG_INFO, TR("Info"), K_F2, BMP_INFO);
@ -173,12 +173,13 @@ bool TRec_sheet::key_notify(TSheet_field& f, int r, KEY k)
if (k == K_INS) if (k == K_INS)
{ {
const int items = f.items(); const int items = f.items();
if (items >= 8) return FALSE; if (items >= 8)
return false;
} }
else else
if (k == K_CTRL + K_INS) if (k == K_CTRL + K_INS)
f.enable_cell(r, 1, r > 0); f.enable_cell(r, 1, r > 0);
return TRUE; return true;
} }
void TRec_sheet::save_desc() void TRec_sheet::save_desc()
@ -310,107 +311,108 @@ void TRec_sheet::edit()
save(); save();
return; return;
} }
case K_ESC: case K_ESC:
if (_descr && (_mask->dirty() || import_dirty)) if (_descr && (_mask->dirty() || import_dirty))
{
// Se viene premuto Annulla NON deve salvare le descrizioni! Altrimenti che annulla e'?
// Salva il vecchio file di descrizione con un altro nome...
if (!import_dirty)
fcopy(_descfname,"des.xxx");
// libera _descr (scrivendo il file)
delete _descr;
_descr = NULL;
// Ripristina il vecchio file e rimuove il file temporaneo
fcopy("des.xxx",_descfname);
}
remove("des.xxx");
return;
case K_ENTER:
main_app().print();
break;
case K_F6:
{
TMask m("ba1100f");
TFilename nf;
nf << 'f' << _dir.num();
nf.ext("trr");
m.set(F_NOMEF, nf);
if (m.run() == K_ENTER)
{ {
nf = m.get(F_NOMEF); // Se viene premuto Annulla NON deve salvare le descrizioni! Altrimenti che annulla e'?
if (nf.not_empty()) // Salva il vecchio file di descrizione con un altro nome...
if (!import_dirty)
fcopy(_descfname,"des.xxx");
// libera _descr (scrivendo il file)
delete _descr;
_descr = NULL;
// Ripristina il vecchio file e rimuove il file temporaneo
fcopy("des.xxx",_descfname);
}
remove("des.xxx");
return;
case K_ENTER:
main_app().print();
break;
case K_F6:
{
TMask m("ba1100f");
TFilename nf;
nf << 'f' << _dir.num();
nf.ext("trr");
m.set(F_NOMEF, nf);
if (m.run() == K_ENTER)
{ {
save_desc(); nf = m.get(F_NOMEF);
if (nf.not_empty())
{ {
_rec.set_des(_descr,_tab.upper()); save_desc();
ofstream out(nf);
out << _rec;
_rec.set_des();
}
nf.ext("dir");
ofstream out(nf);
out << _dir;
}
}
}
break;
case K_F7:
{
TMask m("ba1100f");
TFilename nout(_dir.name());
nout.strip("$%");
nout.ext("trr");
m.set(F_NOMEF, nout);
if (m.run() == K_ENTER)
{
const TFilename nf(m.get(F_NOMEF));
if (nf.not_empty())
{
import_dirty = TRUE;
_rec.set_des(_descr,_tab.upper());
ifstream in(nf);
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);
if (_descr)
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);
switch (type)
{ {
case _datefld : _rec.set_des(_descr,_tab.upper());
case _wordfld : ofstream out(nf);
case _charfld : out << _rec;
case _boolfld : _rec.set_des();
case _memofld:
f1.disable_cell(i, 2);
case _alfafld :
case _intfld :
case _longfld :
case _intzerofld :
case _longzerofld:
f1.disable_cell(i, 3);
default:
break;
} }
nf.ext("dir");
ofstream out(nf);
out << _dir;
} }
nkeys = _rec.keys();
f2.reset();
for (int i = 0; i < nkeys; i++)
f2.row(i) = _rec.keydef(i);
f2.disable_cell(0, 1);
} }
} }
break;
case K_F7:
{
TMask m("ba1100f");
TFilename nout(_dir.name());
nout.strip("$%");
nout.ext("trr");
m.set(F_NOMEF, nout);
if (m.run() == K_ENTER)
{
const TFilename nf(m.get(F_NOMEF));
if (nf.not_empty())
{
import_dirty = TRUE;
_rec.set_des(_descr,_tab.upper());
ifstream in(nf);
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);
if (_descr)
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);
switch (type)
{
case _datefld :
case _wordfld :
case _charfld :
case _boolfld :
case _memofld:
f1.disable_cell(i, 2);
case _alfafld :
case _intfld :
case _longfld :
case _intzerofld :
case _longzerofld:
f1.disable_cell(i, 3);
default:
break;
}
}
nkeys = _rec.keys();
f2.reset();
for (int i = 0; i < nkeys; i++)
f2.row(i) = _rec.keydef(i);
f2.disable_cell(0, 1);
}
}
}
break;
default:
return; // K_QUIT
} }
break;
default: break;
}
} }
} }

View File

@ -96,8 +96,9 @@ void TPackFiles_application::build_sheet()
void TPackFiles_application::search_blanks(TSystemisamfile& f) void TPackFiles_application::search_blanks(TSystemisamfile& f)
{ {
// Scorre il file corrente per record cancellando eventuali record vuoti/blank // Scorre il file corrente per record cancellando eventuali record vuoti/blank
if (f.open(_excllock, true)) const TIsam_handle h = f.open(_excllock, true);
if (h >= 0)
{ {
const long records = f.items(); const long records = f.items();
TString k; TString k;
@ -119,6 +120,7 @@ void TPackFiles_application::search_blanks(TSystemisamfile& f)
void TPackFiles_application::pack_all() void TPackFiles_application::pack_all()
{ {
TProgind p(_selsheet->checked(), TR("Compattazione in corso..."), true, true); TProgind p(_selsheet->checked(), TR("Compattazione in corso..."), true, true);
safely_close_closeable_isamfiles();
FOR_EACH_CHECKED_ROW(*_selsheet, k, row) FOR_EACH_CHECKED_ROW(*_selsheet, k, row)
{ {
if (!p.addstatus(1)) if (!p.addstatus(1))

View File

@ -345,10 +345,7 @@ bool TInstaller_mask::autoload()
TString_array& mask_rows = rows_array(); TString_array& mask_rows = rows_array();
TString http_server; TString http_server;
TFilename http_path; TFilename http_path, path, ininame;
TFilename path;
TFilename ininame;
//controla se si e' scelto un path di installazione internet o da disco //controla se si e' scelto un path di installazione internet o da disco
const bool internet = get_patches_path(path); const bool internet = get_patches_path(path);
@ -357,21 +354,15 @@ bool TInstaller_mask::autoload()
{ {
parse_internet_path(http_server, http_path); //controlla il path internet scritto nel campo sulla maschera parse_internet_path(http_server, http_path); //controlla il path internet scritto nel campo sulla maschera
make_dir(path); //crea la directory temporanaea di installazione dove depositare e scompattare gli zip //se si ritrova dei vecchi file nella directory temporanea, la pulisce per evitare casini
ininame = path; ininame.add("*.*");
TString_array list;
::list_files(ininame, list);
FOR_EACH_ARRAY_ROW(list, i, row)
xvt_fsys_remove_file(*row);
ininame = path; ininame = path;
ininame.add(TInstall_ini::default_name()); ininame.add(TInstall_ini::default_name());
//se si ritrova dei vecchi .ini nella directory temporanea->pulisce la directory temporanea x evitare casini
if (ininame.exist()) //&& yesno_box(TR("Si desidera svuotare la cache dei files scaricati dal sito?"))) domanda del cazzo!
{
TString_array list;
TFilename name = path; name.add("*.*");
::list_files(name, list);
FOR_EACH_ARRAY_ROW(list, i, row)
::remove(*row);
}
if (!ininame.exist()) if (!ininame.exist())
{ {
TFilename remote_ini = http_path; TFilename remote_ini = http_path;
@ -1177,15 +1168,15 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
return ok; return ok;
} }
bool TInstaller_mask::get_patches_path(TFilename& path) const bool TInstaller_mask::get_patches_path(TFilename& path) const
{ {
const TEdit_field& www = efield(F_WEB); const TEdit_field& www = efield(F_WEB);
path = get(F_WEB); path = www.get();
if (www.active() && path.full() && is_internet_path(path)) if (www.active() && path.full() && is_internet_path(path))
{ {
path.tempdir(); path.tempdir();
path.add("www"); path.add("www");
make_dir(path); //crea la directory temporanaea di installazione dove depositare e scompattare gli zip
return true; return true;
} }
else else

View File

@ -287,7 +287,7 @@ void TSelector_app::save_cursor_key(TCursor& cur, TConfig& ini)
TString16 para; para << curr.num(); TString16 para; para << curr.num();
ini.set_paragraph(para); ini.set_paragraph(para);
const RecDes& rd = *curr.rec_des(); const RecDes& rd = curr.rec_des();
const KeyDes& kd = rd.Ky[0]; const KeyDes& kd = rd.Ky[0];
for (int i = 0; i < kd.NkFields; i++) for (int i = 0; i < kd.NkFields; i++)
{ {