diff --git a/ba/ba1100.cpp b/ba/ba1100.cpp index b64c5ca70..664efd299 100755 --- a/ba/ba1100.cpp +++ b/ba/ba1100.cpp @@ -12,10 +12,6 @@ #include #include -#include - -#include -#include #ifdef WIN32 #include @@ -63,7 +59,7 @@ protected: virtual void print(); virtual void do_print(TPrinter & p, TRec_sheet & r); const char* dumpfilename(const FileDes& dep) const; - void load_des(const int maxfidr = 0); + void load_des(); void open_history(); void put_history(const char* firm); void close_history(); @@ -74,7 +70,6 @@ protected: void open_log(); void write_log(const char* line, const int severity = 0); void close_log(); - bool moveable_file(int file) const; public: @@ -805,11 +800,9 @@ bool TManutenzione_app::recover(TSystemisamfile& f, int err) void TManutenzione_app::repair_file(int i) { - TDir d; TString s(_MAX_PATH); - d.get(i, _nolock, _nordir, _sysdirop); - + TDir d(i); if (d.eod() == 0) { TFilename n(d.filename()); @@ -1215,29 +1208,38 @@ void TManutenzione_app::convert_dir() s << atol (pref) << ".\n"; } - TProgind p(update_items ? update_items : 1, s, false, true); - p.setstatus(1); - + TProgind p(update_items ? update_items : 1, s, is_power_station()); for (int i = LF_USER; i <= update_items; i++) { - const TTrec & rs = (const TTrec &) _recs[i]; - const TDir & ds = (const TDir &) _dirs[i]; + if (!p.addstatus(1)) + break; + + const TTrec& rs = (const TTrec&)_recs[i]; // Nuovo tracciato record + const TDir& ds = (const TDir&)_dirs[i]; const long flags = ds.flags(); if (ds.len() > 0) { if (flags >= 0L && flags < 10000L) { - TSystemisamfile f(i); - TString msg = s; msg << prefix().get_filename(i); + d.get(i, _nolock, _nordir, _sysdirop); + + TString msg = s; msg << d.filename(); p.set_text(msg); const int module = abs((int)ds.flags()); + TSystemisamfile f(i); int err = f.is_valid(true); - if (err == -60 || err == -64) + switch (err) + { + case -64: + case -60: err = NOERR; // verif. + break; + default: + break; + } - d.get(i, _nolock, _nordir, _sysdirop); if (i > LF_USER && err != NOERR && ((is_com && d.is_com()) || (!is_com && d.is_firm()))) { if (err == _istrcerr || err == _isbadtrc) @@ -1250,7 +1252,6 @@ void TManutenzione_app::convert_dir() { //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; @@ -1316,8 +1317,6 @@ void TManutenzione_app::convert_dir() d.put(i, _nordir, _sysdirop); r.put(i); } //else di if(ds.len()>0... - p.addstatus(1); - } //for (int i = 2; i <= update_items... d.get(LF_DIR, _nolock, _nordir, _sysdirop); @@ -1326,7 +1325,7 @@ void TManutenzione_app::convert_dir() put_history(pref); } -void TManutenzione_app::load_des(const int maxfdir) +void TManutenzione_app::load_des() { TWait_cursor waiter; const TString pref(prefix().name()); @@ -1405,11 +1404,13 @@ void TManutenzione_app::load_des(const int maxfdir) items = (int) d.eod(); TString80 s; - if (standard) s = TR("Caricamento descrizioni archivi standard"); + if (standard) + s = TR("Caricamento descrizioni archivi standard"); else + { if (prefix().is_com()) s << TR("Caricamento descrizioni archivi comuni"); else s << TR("Caricamento descrizioni archivi della ditta ") << atol (pref); - + } TProgind p(items ? items : 1, s, false, true); p.setstatus(1); @@ -1435,8 +1436,7 @@ void TManutenzione_app::load_des(const int maxfdir) if (!fexist(descfname)) { - FILE * fd = fopen(descfname, "w"); - + FILE* fd = fopen(descfname, "w"); if (fd != NULL) fclose(fd); } @@ -1512,51 +1512,39 @@ void TManutenzione_app::update() do_events(); - TDir d; - d.get(LF_DIR,_nolock, _nordir, _sysdirop); - const int maxfdir = d.items(); prefix().set(""); - load_des(maxfdir); + load_des(); prefix().set_codditta(0L); open_log(); write_log(TR("Conversione Dati comuni")); write_log(""); - + + TPointer_array ditte; // Evita di aprire LF_NDITTE + const int nditte = prefix().firms(ditte); + TProgind p(nditte+1, TR("Conversione archivi ditte."), is_power_station()); + + p.addstatus(1); update_dir(); convert_dir(); - - TSystemisamfile ditte(LF_NDITTE); - ditte.open(); - - const int nditte = ditte.items(); - if (nditte) + + for (int i = 0; i < nditte; i++) { - TProgind p(nditte, TR("Conversione archivi ditte."), false, true); - TString mxs; - for (int err = ditte.first(); err == NOERR; err = ditte.next()) + if (!p.addstatus(1)) + break; + const long codditta = ditte.get_long(i); + TString mxs; mxs << TR("Conversione Ditta") << ' ' << codditta; + p.set_text(mxs); + if (codditta > _history_firm && prefix().exist(codditta) && set_firm(codditta)) { - 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); + write_log(""); + write_log(mxs); + write_log(""); + update_dir(); + convert_dir(); } - ditte.close(); } + //chiude il log di conversione close_log(); @@ -1588,8 +1576,8 @@ void TManutenzione_app::update() void TManutenzione_app::main_loop() { TToken_string riga; - long riga_selezionata; - bool done = false; + long riga_selezionata; + bool done = false; _browse->rebuild(); diff --git a/ba/ba1300.cpp b/ba/ba1300.cpp index 4f276a94d..9ed468099 100755 --- a/ba/ba1300.cpp +++ b/ba/ba1300.cpp @@ -5,64 +5,85 @@ #include #include #include +#include +#include #include #include "ba1.h" -class TPackFiles_application:public TSkeleton_application +/////////////////////////////////////////////////////////// +// TSel_sheet +/////////////////////////////////////////////////////////// + +class TSel_sheet : public TArray_sheet { - TArray_sheet * _selsheet; - long _firm; +public: + TSel_sheet(); +}; + +TSel_sheet::TSel_sheet() + : TArray_sheet(-1, -1, -4, -4, TR("Selezione files"), + HR("@1|N.@5|Nome@20|EOD@7|EOX@7|Lunghezza|Descrizione@43|Flags@7"), 0x8) +{ + if (is_power_station()) + add_button(DLG_EDIT, PR("Salva TXT"), K_SAVE, BMP_ARCHIVE); + add_button(-1, "", 0, 1); // Separatore + add_button(DLG_INFO, TR("Info"), K_F2, BMP_INFO); + add_button(DLG_HELP, TR("Help"), K_F1, BMP_HELP); + xvt_toolbar_set_last_tool(toolbar(), DLG_QUIT); +} + +/////////////////////////////////////////////////////////// +// TPackFiles_application +/////////////////////////////////////////////////////////// + +class TPackFiles_application : public TSkeleton_application +{ + TSel_sheet* _selsheet; + long _firm; protected: virtual void main_loop(); virtual bool create () ; virtual bool destroy(); - virtual bool extended_firm() const { return TRUE; } - void build_sheet(); - void search_blanks(TSystemisamfile & f); + virtual bool extended_firm() const { return true; } + public: + void build_sheet(); + void search_blanks(TSystemisamfile& f); + void pack_all(); + void save_all(); + TPackFiles_application() : _selsheet(NULL), _firm(0) {} - ~TPackFiles_application() {}; }; bool TPackFiles_application::create() // initvar e arrmask - { _firm = get_firm(); if (!set_firm()) - return FALSE; - const bool is_prassi = user() == ::dongle().administrator(); - _selsheet = new TArray_sheet(-1, -1, -4, -4, TR("Selezione files"), - is_prassi ? - HR("@1|N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Flags@7") : - HR("N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Flags@7"), - is_prassi ? 0 : 0x10); + return false; + _selsheet = new TSel_sheet; return TSkeleton_application::create(); } bool TPackFiles_application::destroy() - { if (_firm) set_firm(_firm); - if (_selsheet != NULL) delete _selsheet; + if (_selsheet != NULL) delete _selsheet; return TSkeleton_application::destroy() ; } void TPackFiles_application::build_sheet() { _selsheet->destroy(); - TDir cdir; - cdir.get(LF_DIR,_nolock,_nordir,_sysdirop); - const bool is_prassi = user() == ::dongle().administrator(); + TDir cdir(LF_DIR); const int nitems = (int)cdir.eod(); - for (int i = 0; i < nitems; i++) // fill sheet + TToken_string riga; + for (int i = LF_USER; i <= nitems; i++) // fill sheet { - TToken_string riga(128); - cdir.get(i+1,_nolock,_nordir,_sysdirop); - if (is_prassi) - riga.add(""); - riga.add(i+1); + cdir.get(i, _nolock, _nordir, _sysdirop); + riga = " "; + riga.add(i); riga.add(cdir.name()); riga.add(cdir.eod()); riga.add(cdir.eox()); @@ -75,23 +96,142 @@ void TPackFiles_application::build_sheet() void TPackFiles_application::search_blanks(TSystemisamfile& f) { - // Scorre il file corrente per record cancellando eventuali record vuoti/blank - - f.open(_excllock, TRUE); - const long records = f.items(); - TString k; - - for (long i = 0; f.status() == NOERR && i < records; i++) + // Scorre il file corrente per record cancellando eventuali record vuoti/blank + if (f.open(_excllock, true)) { - f.readat(i + 1); // Legge per numero di record, evitando falli di indice... - k = f.curr().key(); // Chiave 1; non puo' essere vuota (anche perche' no si puo' scrivere un record vuoto) - if (f.curr().empty() || k.trim().empty()) // Teoricamente ce ne sarebbe uno solo... - { // ma se l'indice e' rovinato possono esserci piu' records vuoti - f.curr().discard(); // che vanno cmq eliminati; le pack() successive completano l'opera. - f.rewriteat(i + 1); + const long records = f.items(); + TString k; + TRectype& curr = f.curr(); + for (long i = 0; f.status() == NOERR && i < records; i++) + { + f.readat(i + 1); // Legge per numero di record, evitando falli di indice... + k = curr.key(); // Chiave 1; non puo' essere vuota (anche perche' no si puo' scrivere un record vuoto) + if (curr.empty() || k.blank()) // Teoricamente ce ne sarebbe uno solo... + { // ma se l'indice e' rovinato possono esserci piu' records vuoti + curr.discard(); // che vanno cmq eliminati; le pack() successive completano l'opera. + f.rewriteat(i + 1); + } + } + f.close(); + } +} + +void TPackFiles_application::pack_all() +{ + TProgind p(_selsheet->checked(), TR("Compattazione in corso..."), true, true); + FOR_EACH_CHECKED_ROW(*_selsheet, k, row) + { + if (!p.addstatus(1)) + break; + const int i = row->get_int(1); + TDir d(i); + if (d.len() == 0) + continue; // Skip files with flags over 10000 + const TString pref(prefix().name()); + prefix().set(""); + const TDir ds(i); + prefix().set(pref); + const long flags = ds.flags(); + if (flags >= 10000L) + continue; // Skip files with flags over 10000 + + TFilename f_name = d.filename(); + f_name.ext("dbf"); + p.set_text(f_name); + bool retry = FALSE; + const bool present = f_name.exist(); + int status = NOERR; + TSystemisamfile f(i); + do + { + status = NOERR; + if (present && flags < 10000L) // Se il file c'e' prova a compattarlo + { + search_blanks(f); + if (f.packfile() == NOERR) + f.packindex(); + status = f.status(); + if (status == -60) // Se ritorna -60 allora il file e' aperto da qualcuno + retry = yesno_box(FR("Il file %s non puo' essere compattato perche' aperto da altre applicazioni. Riprovare?"),(const char*) f_name); + } + } while (retry); // Ci riprovo ! + + if (!present || status == -60) + { + // if (!present && d.len() > 0 && has_module(module,CHK_DONGLE))// Se il file non esiste lo costruisce + // f.build(0L); + + continue; // Se il file non esiste e non si ha il modulo abilitato evita inutili controlli + } // Se le pack() hanno ritornato -60 ma il file esiste, allora prosegue con il prossimo + if (status != NOERR && + yesno_box(FR("Rilevato l'errore %d cercando di compattare il file %s. Si desidera scaricarlo e ricaricarlo?"),status,(const char*)f_name)) + { + // Dump the file, Zap it and Reload it. + TFilename d_name; d_name.temp("fdump"); + if (f.dump(d_name,0) == NOERR) // Dump + { + // Zap + d.get(i,_nolock, _nordir,_sysdirop); + bool is_com = d.is_com(); + d.get(i,_nolock, is_com ? _comdir : _nordir); + d.set_eod(0); + d.put(i, is_com ? _comdir : _nordir); + if (f.pack() == NOERR) + if (f.load(d_name) == NOERR) // Reload + d_name.fremove(); + else + error_box(FR("Impossibile ricaricare %s. Errore %d"),(const char*) d_name, f.status()); + else + error_box(FR("Impossibile azzerare %s. Errore %d"),(const char*) f_name, f.status()); + } + else + error_box(FR("Impossibile scaricare %s. Errore %d"),(const char*) d_name, f.status()); + } + } +} + +void TPackFiles_application::save_all() +{ + TFilename cartella; cartella.tempdir(); + TString8 firm; firm.format("%05ldA", get_firm()); + cartella.add(firm); + if (!cartella.exist()) + xvt_fsys_mkdir(cartella); + + DIRECTORY dir; xvt_fsys_convert_str_to_dir(cartella, &dir); + xvt_fsys_save_dir(); + xvt_fsys_set_dir(&dir); + const int ret = xvt_dm_post_dir_sel(&dir); + xvt_fsys_restore_dir(); + + if (ret == FL_OK) + { + xvt_fsys_convert_dir_to_str(&dir, cartella.get_buffer(), cartella.size()); + if (!cartella.ends_with(firm)) + cartella.add(firm); + xvt_fsys_mkdir(cartella); + + TProgind p(_selsheet->checked(), TR("Salvataggio in corso..."), true, true); + FOR_EACH_CHECKED_ROW(*_selsheet, k, row) + { + if (!p.addstatus(1)) + break; + const TIsam_handle logic = row->get_int(1); + const TDir d(logic); + if (d.len() > 0) + { + TSystemisamfile f(logic); + if (f.is_valid(false) == NOERR) + { + TFilename fname = cartella; + TString16 name; row->get(2, name); name.ltrim(1); + fname.add(name); + fname.ext("txt"); + f.dump(fname); + } + } } } - f.close(); } void TPackFiles_application::main_loop() @@ -103,94 +243,18 @@ void TPackFiles_application::main_loop() tasto = _selsheet->run(); switch(tasto) { - case K_ENTER: - if (_selsheet->checked()>0) - { - int status; - const long items = _selsheet->items(); - bool retry,present; - TFilename f_name,d_name; - TString cmd; - TDir d; - TDir ds; - TProgind p(items, TR("Compattazione in corso..."), TRUE, TRUE ); - for (long i = 2; i<=items; i++) // Skip LF_DIR - { - p.setstatus(i); - if (p.iscancelled()) - break; - if (!_selsheet->checked(i-1)) - continue; - d.get(i); - if (d.len() == 0) - continue; // Skip files with flags over 10000 - const TString pref(prefix().name()); - prefix().set(""); - ds.get(i); - prefix().set(pref); - const long flags = ds.flags(); -// const int module = abs((int)flags); non piu usato verificare - if (flags >= 10000L) - continue; // Skip files with flags over 10000 - TSystemisamfile f(i); - - f_name = d.name(); - f_name.ext("dbf"); - retry = FALSE; - present = f_name.exist(); - do - { - status = NOERR; - if (present && flags < 10000L) // Se il file c'e' prova a compattarlo - { - search_blanks(f); - if (f.packfile() == NOERR) - f.packindex(); - status = f.status(); - if (status == -60) // Se ritorna -60 allora il file e' aperto da qualcuno - retry = yesno_box(FR("Il file %s non puo' essere compattato perche' aperto da altre applicazioni. Riprovare?"),(const char*) f_name); - } - } while (retry); // Ci riprovo ! - - if (!present || status == -60) - { -// if (!present && d.len() > 0 && has_module(module,CHK_DONGLE))// Se il file non esiste lo costruisce -// f.build(0L); - - continue; // Se il file non esiste e non si ha il modulo abilitato evita inutili controlli - } // Se le pack() hanno ritornato -60 ma il file esiste, allora prosegue con il prossimo - if (status != NOERR && - yesno_box(FR("Rilevato l'errore %d cercando di compattare il file %s. Si desidera scaricarlo e ricaricarlo?"),status,(const char*)f_name)) - { - // Dump the file, Zap it and Reload it. - d_name = ""; - d_name.temp("fdump"); - if (f.dump(d_name,0) == NOERR) // Dump - { - // Zap - d.get(i,_nolock, _nordir,_sysdirop); - bool is_com = d.is_com(); - d.get(i,_nolock, is_com ? _comdir : _nordir); - d.set_eod(0); - d.put(i, is_com ? _comdir : _nordir); - if (f.pack() == NOERR) - if (f.load(d_name) == NOERR) // Reload - remove_file(d_name); - else - error_box(FR("Impossibile ricaricare %s. Errore %d"),(const char*) d_name, f.status()); - else - error_box(FR("Impossibile azzerare %s. Errore %d"),(const char*) f_name, f.status()); - } - else - error_box(FR("Impossibile scaricare %s. Errore %d"),(const char*) d_name, f.status()); - } - } - } - else - warning_box(TR("Nessun file selezionato")); - break; - default: - break; + case K_ENTER: + if (_selsheet->one_checked()) + pack_all(); + else + warning_box(TR("Nessun file selezionato")); + break; + case K_SAVE: + if (_selsheet->one_checked()) + save_all(); + break; + default: + break; } } } diff --git a/ba/ba1700.cpp b/ba/ba1700.cpp index b0398b4d9..0343cf384 100755 --- a/ba/ba1700.cpp +++ b/ba/ba1700.cpp @@ -458,7 +458,7 @@ bool TInstaller_mask::autoload() for (int i = modules.last(); i >= 0; i--) { TString& str = modules.row(i); - if (str.match("??????A.INI") || str.match("??????a.ini")) + if (str.match("??????A.INI", true)) { TFilename remote = http_path; remote << str; diff --git a/ba/ba7300.cpp b/ba/ba7300.cpp index 57b9caa16..0bc7570ce 100755 --- a/ba/ba7300.cpp +++ b/ba/ba7300.cpp @@ -74,7 +74,7 @@ bool TFile_selector::on_field_event(TOperable_field& o, TField_event e, long jol } TLocalisamfile f(nfile); - const RecDes& rd = *f.curr().rec_des(); + const RecDes& rd = f.curr().rec_des(); TToken_string codes, items; for (i = 1; i <= rd.NKeys; i++) { @@ -93,7 +93,7 @@ bool TFile_selector::on_field_event(TOperable_field& o, TField_event e, long jol if (nfile >= LF_USER && nkey > 0) { TLocalisamfile f(nfile); - const RecDes& rd = *f.curr().rec_des(); + const RecDes& rd = f.curr().rec_des(); const KeyDes& kd = rd.Ky[nkey-1]; TToken_string str("", '+'); for (int i = 0; i < kd.NkFields; i++) @@ -436,8 +436,7 @@ TRecord_selector::TRecord_selector(const TFile_selector& fm) : TAutomask("ba7300 _relation = new TRelation(logicnum); _cursor = new TCursor(_relation, "", nkey+1); - const RecDes& rd = *_relation->curr().rec_des(); - + const RecDes& rd = _relation->curr().rec_des(); const KeyDes& kd = rd.Ky[nkey]; int i; @@ -508,7 +507,7 @@ void TMail_flood_app::fill_key(const TRectype& curr, TConfig& ini) const ini.set_paragraph(para); ini.remove_all(); - const RecDes& rd = *curr.rec_des(); + const RecDes& rd = curr.rec_des(); const KeyDes& kd = rd.Ky[0]; for (int i = 0; i < kd.NkFields; i++) { @@ -570,7 +569,7 @@ void TMail_flood_app::fill_rows(const TRectype& parent, int logicnum, TConfig& i TString16 numfield; - const RecDes& rd = *rec.rec_des(); + const RecDes& rd = rec.rec_des(); const KeyDes& kd = rd.Ky[0]; for (int i = 0; i < kd.NkFields; i++) {