diff --git a/ba/ba0101.cpp b/ba/ba0101.cpp index 5d40cc0f6..f2d3a6f26 100755 --- a/ba/ba0101.cpp +++ b/ba/ba0101.cpp @@ -190,7 +190,7 @@ bool TMenuitem::create(const char* t) // Controlla lo stato di aggiornamento if (_enabled && is_program()) - _enabled = !menu().is_dangerous(_action); + _enabled = !menu().is_dangerous(_action) && !menu().is_vanished(_action); return visible; } @@ -333,14 +333,6 @@ bool TMenuitem::perform_program() const if (ok) { TCurrency::force_cache_update(); // Chiude cache valute - - // Anti TASSAN - if (_action.starts_with("lv") && is_tassan()) - { - ((TString&)_action) = "lv"; - ((TString&)_caption) << " lavanderie"; - } - TExternal_app a(_action); const bool install_app = _action.starts_with("ba1 -6", true); @@ -584,6 +576,9 @@ bool TMenu::read(const char* name, TString& root) bool TMenu::read(const char* name) { + Tdninst dninst; + dninst.find_killed(_vanished); + TString root; bool ok = read(name, root); if (ok && _current == NULL) @@ -781,8 +776,12 @@ void TMenu::reload_images() bool TMenu::has_module(const char* mod) { - const word module = dongle().module_name2code(mod); - return main_app().has_module(module); + TDongle& donkey = dongle(); + const word module = donkey.module_name2code(mod); + bool yes = module == BAAUT; + if (!yes && donkey.active(module)) + yes = main_app().has_module(module) && !is_vanished(mod); + return yes; } bool TMenu::is_dangerous(const char* mod) @@ -791,21 +790,28 @@ bool TMenu::is_dangerous(const char* mod) return _dangerous.get_pos(code) >= 0; } +bool TMenu::is_vanished(const TString& app) +{ + if (_vanished.empty() || app.starts_with("ba")) + return false; + + if (_vanished.find('*') >= 0) + return true; + + bool yes = _vanished.get_pos(app) >= 0; + if (!yes && app[0] != '7' && isdigit(app[0])) + { + TString4 mod; mod << app[0] << app[1]; + const int cod = dongle().module_name2code(mod); + mod = dongle().module_code2name(cod); + yes = _vanished.get_pos(mod) >= 0; + } + return yes; +} + + TMenu::TMenu() : _current(NULL), _item(0), _mask_mode(0) { } TMenu::~TMenu() { } - - -bool is_tassan() -{ - bool yes = false; - if (dongle().number() == 202) - { - const TDate morte(07, 01, 2010); // Giorno della morte del programma - const TDate oggi(TODAY); - yes = oggi >= morte; - } - return yes; -} \ No newline at end of file diff --git a/ba/ba0101.h b/ba/ba0101.h index 9f3c7650f..75d492a26 100755 --- a/ba/ba0101.h +++ b/ba/ba0101.h @@ -1,10 +1,6 @@ #ifndef __BA0101_H #define __BA0101_H -#ifndef __ASSOC_H -#include -#endif - #ifndef __COLORS_H #include #endif @@ -13,15 +9,10 @@ #include #endif -#ifndef __SCANNER_H -#include -#endif - #ifndef __STACK_H #include #endif - class TSubmenu; class TMenu; @@ -132,7 +123,7 @@ class TMenu : public TAssoc_array TAssoc_array _images; - TToken_string _dangerous; + TToken_string _dangerous, _vanished; TString _last_search; TAssoc_array _ignore_list; @@ -169,6 +160,7 @@ public: bool has_module(const char* mod); bool is_dangerous(const char* mod); + bool is_vanished(const TString& app); void set_dangerous_modules(const TToken_string& mod) { _dangerous = mod; } @@ -182,6 +174,5 @@ public: void set_installing_flag(); bool installing(); -bool is_tassan(); #endif diff --git a/ba/ba0103.cpp b/ba/ba0103.cpp index 688d07072..3f0425d50 100755 --- a/ba/ba0103.cpp +++ b/ba/ba0103.cpp @@ -243,10 +243,6 @@ void TBook_window::set_page_caption(short page, const TString& caption, int icon xvt_notebk_set_tab_title(_ctrl, page, caption); // Titolo dell'orecchio xvt_notebk_set_tab_icon(_ctrl, page, icon); // Icona dell'orecchio xvt_notebk_set_page_title(_ctrl, page, caption); // Titolo della finestra - - // Anti TASSAN - if (caption.find("avand") > 0 && is_tassan()) - set_logo("lv00"); } } diff --git a/ba/ba1500.cpp b/ba/ba1500.cpp index 356841066..3e1f12b2b 100755 --- a/ba/ba1500.cpp +++ b/ba/ba1500.cpp @@ -141,13 +141,13 @@ void TRequest_form::update_serno(const TString& num) const TDate today(TODAY); TForm_item& data = find_field('H', odd_page, FF_DATARICH); data.set(today.string()); - switch (::dongle().hardware() ) + const char* hw = ""; + switch (::dongle().hardware()) { - case _dongle_hardlock: - find_field('H',odd_page,FF_DONGLE_HW).set("HARDLOCK"); break; - default: - find_field('H',odd_page,FF_DONGLE_HW).set("EUTRON"); break; + case _dongle_hardlock: hw = "HARDLOCK"; break; + default: hw = "EUTRON"; break; } + find_field('H',odd_page,FF_DONGLE_HW).set(hw); TForm_item& serno = find_field('H', odd_page, FF_DONGLE_SN); serno.set(num); } @@ -157,8 +157,7 @@ void TRequest_form::update_dongle() const TDongle& d = dongle(); TForm_item& year = find_field('H', odd_page, FF_YEAR); - TString16 str; - str << "31-12-" << (int)d.year_assist(); + TString16 str; str << d.year_assist(); year.set(str); TForm_item& user = find_field('H', odd_page, FF_NUTENTI); @@ -168,14 +167,8 @@ void TRequest_form::update_dongle() void TRequest_form::update_os() { - const char* stros = NULL; - switch (xvt_sys_get_os_version()) - { - case XVT_WS_LINUX : stros = "Linux"; break; - case XVT_WS_WIN_95: stros = "Windows 95"; break; - case XVT_WS_WIN_98: stros = "Windows 98"; break; - default : stros = "Windows NT/2000/XP"; break; - } + char stros[256]; + xvt_sys_get_version(stros, NULL, sizeof(stros)); TForm_item& os = find_field('H', odd_page, FF_OS); os.set(stros); @@ -252,7 +245,6 @@ protected: void print_request(); void print_answer(); void print_status(); - //void print_listino(); public: virtual void print(); @@ -261,159 +253,7 @@ public: virtual ~TAttivazione_moduli() { } }; - -HIDDEN TAttivazione_moduli& app() { return (TAttivazione_moduli &)main_app(); } - -int round_price(int val) -{ - if (val>50000) - val=int((val+9)/10000)*10000; - else - val=int((val+9)/10)*10; - return val; -} - -bool TAttivazione_moduli::sh_nposti_handler(TMask_field& fld, KEY key) -{ - if (key == K_TAB && fld.focusdirty()) - { - // default - int posti = atoi(fld.get()); - if (posti<=1) - return true; - int val = fld.mask().get_int(F_ACQ1); - switch (posti) - { - case 2: - val = int(val * .30); break; - case 3: - val = int(val * .20); break; - case 5: - val = int(val * .15); break; - case 9: - val = int(val * .10); break; - case 30: - val = int(val * .05); break; - default: - val=0; - } - val = round_price(val); - if (fld.mask().field(fld.dlg()+1).empty()) - fld.mask().field(fld.dlg()+1).set(val) ; // costo di acquisto - val=fld.mask().get_int(fld.dlg()+1); - val = int (val * .35); - val = round_price(val); - fld.mask().field(fld.dlg()+2).set(val) ; // costo di aggiornamento - } - return true; -} - -bool TAttivazione_moduli::sh_acquisto_handler(TMask_field& fld, KEY key) -{ - return true; -} -bool TAttivazione_moduli::sh_aggiornamento_handler(TMask_field& fld, KEY key) -{ - if (key == K_TAB && fld.empty()) - { - } - - return true; -} - - -void TAttivazione_moduli::update_listino() -{ - TMask msklistino("ba1500b") ; - TMask &smask = msklistino.sfield(F_MODULILIST).sheet_mask(); - for (int c=0; c<6; c++) - { - smask.set_handler(F_POSTI1+3*c, sh_nposti_handler ); - smask.set_handler(F_ACQ1+3*c, sh_acquisto_handler ); - smask.set_handler(F_AGG1+3*c, sh_aggiornamento_handler); - } - load_masklistino(msklistino); - if (msklistino.run()==K_ENTER) - { - save_masklistino(msklistino); - } -} - -void TAttivazione_moduli::load_masklistino(TMask &msklistino) -{ - TWait_cursor hourglass; - TInstall_ini ini; - TDate dt(ini.get("Listino","Main")); - if (!dt.empty()) - msklistino.set(F_DATALIST,dt); - - TSheet_field& sf = msklistino.sfield(F_MODULILIST); - for (int i = 0; i < sf.items(); i++) - { - const TString16 modname(_im->get_name_by_order(i)); - if (modname.empty()) - break; - - TToken_string& riga = sf.row(i); - riga=modname; - - const TFixed_string d(_im->get_description_by_order(i)); - riga.add(d); - riga.trim(); - riga.add("1"); // prima colonna = monoutenza - - TString_array prices; - ini.set_paragraph(modname); - ini.list_variables(prices, true,modname,true); // get array sorted by var name - FOR_EACH_ARRAY_ROW(prices, v, key) - { - const TFixed_string price(key->get(0)); - if (price.compare("Prezzo", 6, true) == 0) - { - TString16 colonna(price.sub(7,price.len()-1)); - if (atoi(colonna) != 1) - riga.add(colonna); - TToken_string valori(key->get(1),','); - riga.add(valori.get(0)); - riga.add(valori.get(1)); - } - } - sf.check_row(i); - } -} - -void TAttivazione_moduli::save_masklistino(TMask &msklistino) -{ - TWait_cursor hourglass; - TInstall_ini ini; - ini.set_paragraph("Main"); - ini.set("Listino",msklistino.get(F_DATALIST)); - TSheet_field& sf = (TSheet_field&)msklistino.field(F_MODULILIST); - const int items=sf.items(); - for (int i = 0; i < items; i++) - { - TToken_string& riga = sf.row(i); - TString tmpstr(riga.get(0)); - ini.set_paragraph(tmpstr); - - int nposti; - for (int col=0; col < 6; col++) - { - const char * p=riga.get(3*col+2); - if (p==NULL || (nposti=atoi(p))==0 ) - break; - tmpstr = riga.get(3*col+3); - if (tmpstr.blank()) - continue; - tmpstr << ',' << riga.get(3*col+4); - TString16 varname("Prezzo"); - varname << '(' << nposti << ')'; - ini.set(varname,tmpstr); - if (ini.new_paragraph()) - ini.set("Descrizione",riga.get(1)); - } - } -} +HIDDEN TAttivazione_moduli& app() { return (TAttivazione_moduli&)main_app(); } int TAttivazione_moduli::build_sheet(bool on) { @@ -738,15 +578,6 @@ bool TAttivazione_moduli::print_handler(TMask_field& fld, KEY key) return true; } -/* -bool TAttivazione_moduli::printlist_handler(TMask_field& fld, KEY key) -{ - if (key == K_SPACE) - app().print_listino(); - return true; -} -*/ - bool TAttivazione_moduli::aga_handler(TMask_field& fld, KEY key) { if (key == K_SPACE) @@ -850,47 +681,6 @@ bool TAttivazione_moduli::k_notify(TSheet_field& f, int r, KEY k) return true; } - -bool TAttivazione_moduli::modifica_listino_handler(TMask_field& fld, KEY key) -{ - if (key == K_SPACE) - app().update_listino(); - return true; -} -bool TAttivazione_moduli::aggiorna_listino_handler(TMask_field& fld, KEY key) -{ - bool ok = true; - if (key == K_SPACE) - { - TInstall_ini ini; - TFilename name = ini.get("DiskPath"); - name.add(ini.default_name()); - while (!name.exist()) - { - TMask msk(TR("Aggiornamento listino"), 1, -1, -1, 60, 4); - msk.add_string(DLG_USER, 0, PR("Percorso "), 1, 1, 50); - msk.add_button(DLG_CANCEL, 0, "", -12, -1, 10, 2); - msk.add_button(DLG_OK, 0, "", -22, -1, 10, 2); - msk.set(DLG_USER, name); - if (msk.run() == K_ENTER) - name = msk.get(DLG_USER); - else - { - ok = false; - break; - } - } - if (ok) - { - if (ok = ini.update_prices(name)) - message_box(TR("Listino aggiornato")); - else - message_box(TR("Listino già aggiornato")); - } - } - return ok; -} - void TAttivazione_moduli::print_request() { TRequest_form form("ba1500a"); @@ -1147,13 +937,6 @@ bool TAttivazione_moduli::create() return error_box(TR("Questo programma non puo' funzionare mentre e' in funzione il server di autorizzazioni")); ok = TApplication::test_assistance_year(); -#ifdef DBG - // Backdoor nascosta per la cifratura del dninst.zip - // Mettere nella cartella dei programi il file dninst.txt ... - // ... e nascera' in automagico il file dninst.zip per Luca - if (ok && argc() > 2 && strcmp(argv(2), "-dninst") == 0) - ok = false; -#endif if (!ok) { ok = update_assistance_year(); diff --git a/ba/ba1501.cpp b/ba/ba1501.cpp index bcddf784d..da3c56db5 100755 --- a/ba/ba1501.cpp +++ b/ba/ba1501.cpp @@ -1,75 +1,16 @@ #include #include +#include +#include #include #include #include "ba1500.h" -HIDDEN void build_key(char* dninst_key) -{ - for (int i = 0; i < 8; i++) - dninst_key[i] = 'A'+ rand() % 26; -} - -HIDDEN void decode_string(char* dninst_key, char* data) -{ - build_key(dninst_key); - char tmp[1024]; - int i; - for (i = 0; data[i]; i++) - tmp[i] = data[i] - (i < 8 ? dninst_key[i] : tmp[i - 8]); - tmp[i] = '\0'; - strcpy(data, tmp); -} - -#ifdef DBG - -HIDDEN void encode_string(char* dninst_key, char* data) -{ - build_key(dninst_key); - - char tmp[1024]; - int i; - for (i = 0; data[i]; i++) - tmp[i] = data[i] + (i < 8 ? dninst_key[i] : data[i - 8]); - tmp[i] = '\0'; - strcpy(data, tmp); -} - -HIDDEN bool build_dninst() -{ - ifstream inf("dninst.txt", ios::in); - if (inf.good()) - { - char dninst_key[8] = ""; - - ofstream ouf("dninst.zip", ios::out | ios::binary); - char line[256]; - inf.getline(line, sizeof(line)); - const int year = atoi(line); - CHECKD(year >= 2091 && year <= 3000, "Anno errato:", year); - srand(883); // Inizializza generatore numeri casuali per l'anno - encode_string(dninst_key, line); - ouf << line << '\n'; - srand(year); // Inizializza generatore numeri casuali per i moduli - - while (!inf.eof()) - { - inf.getline(line, sizeof(line)); - encode_string(dninst_key, line); - ouf << line << '\n'; - } - return true; - } - return false; -} - -#endif - const char* split_ass(const int ass_year) { int year = ass_year, number = 0; - if (ass_year > 2008) + if (ass_year >= 2009) { year = (ass_year/1000)*1000 + (ass_year%1000)/10; number = ass_year%10; @@ -82,7 +23,6 @@ const char* split_ass(const int ass_year) return tmp; } - HIDDEN bool show_error(const char* str) { int app_year, dum1, dum2, dum3; @@ -97,14 +37,6 @@ HIDDEN bool show_error(const char* str) // Copia il file dninst.zip dal CD/server alla cartella corrente bool update_dninst(bool force) { -#ifdef DBG - if (force && main_app().argc() > 2 && strcmp(main_app().argv(2), "-dninst") == 0) - { - build_dninst(); - return true; - } -#endif - //legge dal diskpath di install.ini la directory da cui aggiornarsi;se il dninst.zip di tale.. //..directory e' piu' nuovo di quello in locale -> lo copia in locale const TFilename local_name = "setup/dninst.zip"; @@ -134,59 +66,50 @@ bool update_dninst(bool force) bool update_assistance_year() { - if (dongle().hardware() == _dongle_network) - { - show_error(TR("Il server di autorizzazioni deve essere disattivato")); - return false; - } + TDongle& donkey = dongle(); + if (donkey.hardware() == _dongle_network) + return show_error(TR("Il server di autorizzazioni deve essere disattivato")); update_dninst(true); - const TFilename dninst = "setup/dninst.zip"; - if (dninst.exist()) + Tdninst dninst; + const int dninst_year = dninst.assist_year(); + if (dninst_year > 0) { - char dninst_key[8] = ""; - - TScanner keys(dninst); - TString& anno = keys.line(); - srand(883); - decode_string(dninst_key, anno.get_buffer()); - const int ass_year = atoi(anno); //se l'anno di assistenza della versione (dninst.zip) e' piu' grande di quello attualmente registrato sulla... //...chiavetta controlla se il serialnumber della chiavetta e' presente nella lista dei codici... //...validi dentro il dninst.zip - if (ass_year > dongle().year_assist()) + if (dninst_year > donkey.year_assist()) { const int serno = get_serial_number(); - srand(ass_year); - while (!keys.eof()) + TToken_string to_be_killed; + if (dninst.find_killed(to_be_killed)) { - TString& line = keys.line(); - if (line.empty()) - break; - decode_string(dninst_key, line.get_buffer()); - const int sn = atoi(line); - if (sn == serno || line[0] == '*') + donkey.set_year_assist(dninst_year); + FOR_EACH_TOKEN(to_be_killed, mod) { - dongle().set_year_assist(ass_year); - if (dongle().burn()) + if (strlen(mod) == 2) { - return true; //Complimenti,la chiavetta e' presente nella lista e sara' aggiornato l'anno di assistenza + const word aut = donkey.module_name2code(mod); + if (aut > BAAUT && aut < ENDAUT) + donkey.deactivate(aut); } - else - { - show_error(FR("Errore di scrittura sulla chiave di protezione")); - return false; - } //if(dongle().burn... - } //if(sn==serno... - } //while(!keys.eof()... - //Non e' riuscito a trovare la chiavetta nell'elenco, non puo' aggiornare automaticamente - show_error(TR("Il numero di serie di questa postazione non è presente sul database")); + } + if (donkey.burn()) + return true; // Complimenti,la chiavetta e' presente nella lista e sara' aggiornato l'anno di assistenza + else + return show_error(FR("Errore di scrittura sulla chiave di protezione")); + } //if(sn==serno... + else + { + //Non e' riuscito a trovare la chiavetta nell'elenco, non puo' aggiornare automaticamente + show_error(TR("Il numero di serie di questa postazione non è presente sul database")); + } } else //if(ass_year>dongle... { //Se l'anno di assistenza sulla chiave e' maggiore di quello sul dninst segnala l'incongruenza e poi? - if (ass_year < dongle().year_assist()) + if (dninst_year < donkey.year_assist()) show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione")); //Se l'anno di assistenza coincide con quello sulla chiave -> la chiave ha gia' l'assistenza... //...corretta abilitata e puo' proseguire l'aggiornamento diff --git a/ba/ba1600.cpp b/ba/ba1600.cpp index 6d5630274..9a7c7e527 100755 --- a/ba/ba1600.cpp +++ b/ba/ba1600.cpp @@ -1931,7 +1931,10 @@ long TFascicolator_mask::find_signature(const TFilename& filename, const char* s if (car == signature[compare]) { if (compare == 0) - position = infile.tellg()-1L; + { + position = infile.tellg(); + position--; + } compare++; if (signature[compare] == '\0') { diff --git a/ba/ba1700.cpp b/ba/ba1700.cpp index 207a350dc..14148c037 100755 --- a/ba/ba1700.cpp +++ b/ba/ba1700.cpp @@ -194,7 +194,7 @@ bool TInstaller_mask::is_visible_patch(TConfig& ini) const // Pezza temporanea: assegno OEM noti switch (mod) { - case LVAUT: oem = "2,4"; break; + case LVAUT: oem = "2"; break; case PEAUT: oem = "3"; break; case COAUT: oem = "5"; break; default: break; @@ -427,9 +427,16 @@ bool TInstaller_mask::autoload() //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); + const int cache_files = ::list_files(ininame, list); + if (cache_files > 0) + { + TProgind pi(cache_files, TR("Azzeramento cache"), false, true); + FOR_EACH_ARRAY_ROW(list, i, row) + { + pi.addstatus(1); + xvt_fsys_remove_file(*row); + } + } ininame = path; ininame.add(TInstall_ini::default_name()); @@ -437,9 +444,25 @@ bool TInstaller_mask::autoload() { TFilename remote_ini = http_path; remote_ini << TInstall_ini::default_name(); + + if (remote_ini.full()) // dummy test { TTimerind contacting(30*1000, TR("Connessione al server HTTP..."), false, false); http_get(http_server, remote_ini, ininame); + + // Cerca di prelevare anche dninst.zip + const char* const local_dninst = "setup/dninst.zip"; + TFilename remote_dninst = http_path; + remote_dninst << local_dninst; + if (!http_get(http_server, remote_dninst, local_dninst)) + { + // Se non aggiorno da release riprovo con l'indirizzo dell'OEM + remote_dninst = http_default_path(); + remote_dninst << local_dninst; + const int slash = remote_dninst.find('/'); + if (slash > 0) + http_get(remote_dninst.left(slash), remote_dninst.mid(slash), local_dninst); + } } } } //if(internet... diff --git a/ba/ba1800.cpp b/ba/ba1800.cpp index da3f913e6..2e8d2fac4 100755 --- a/ba/ba1800.cpp +++ b/ba/ba1800.cpp @@ -509,16 +509,16 @@ TFields_sheet::~TFields_sheet() bool TWizard_mask::file_open(TFilename& fname) const { DIRECTORY dir; - FILE_SPEC fs; + xvt_fsys_get_dir(&dir); // Save dir - xvt_fsys_get_dir(&dir); - xvt_fsys_get_dir(&fs.dir); + FILE_SPEC fs; + fs.dir = dir; strcpy(fs.type, fname.ext()); strcpy(fs.name, fname); strcpy(fs.creator, "WIZ"); const bool good = xvt_dm_post_file_open(&fs, TR("Selezionare il file ...")) == FL_OK; - xvt_fsys_set_dir(&dir); + xvt_fsys_set_dir(&dir); // Restore dir if (good) fname = fs.name;