Patch level :2.1 22

Files correlati     :ba0.exe ba1.exe ba1400a.msk install.ini
Ricompilazione Demo : [ ]
Commento            :corrette le modalita' di installazione


git-svn-id: svn://10.65.10.50/trunk@11949 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2004-04-08 15:42:30 +00:00
parent 829f30e2be
commit e096f5a9ec
6 changed files with 103 additions and 2153 deletions

View File

@ -66,6 +66,7 @@ protected: // TApplication
protected: protected:
void deconnect_user(); void deconnect_user();
bool dll_changed() const;
virtual void main_loop(); virtual void main_loop();
void test_temp(); void test_temp();
@ -911,6 +912,9 @@ bool TMenu_application::test_programs()
app.run(); app.run();
user() = old_user; // Ripristino utente normale user() = old_user; // Ripristino utente normale
more = TRUE; // ricontrolla more = TRUE; // ricontrolla
if (dll_changed()) //costringe ad uscire dal programma se si e' installato il modulo SY
return false;
} }
_menu.set_dangerous_modules(dangerous); _menu.set_dangerous_modules(dangerous);
return TRUE; return TRUE;
@ -980,14 +984,19 @@ void TMenu_application::deconnect_user()
} }
} }
bool TMenu_application::dll_changed() const
{
TString_array list;
list_files("*.ex_", list);
list_files("*.dl_", list);
return (list.items() > 0);
}
bool TMenu_application::destroy() bool TMenu_application::destroy()
{ {
deconnect_user(); deconnect_user();
TString_array list; if (dll_changed())
list_files("*.ex_", list);
list_files("*.dl_", list);
if (list.items() > 0)
{ {
TExternal_app ba0close("ba0close.exe"); TExternal_app ba0close("ba0close.exe");
ba0close.run(TRUE,TRUE,TRUE); // run asynchronous... ba0close.run(TRUE,TRUE,TRUE); // run asynchronous...

View File

@ -3,7 +3,7 @@
#define F_USERDESC 103 #define F_USERDESC 103
#define F_GROUP 104 #define F_GROUP 104
#define F_GROUPNAME 105 #define F_GROUPNAME 105
#define F_TEST 106 #define F_PROVA 106
#define F_APPLICAT 107 #define F_APPLICAT 107
#define F_NOWRITE 108 #define F_NOWRITE 108

View File

@ -656,7 +656,7 @@ int TSet_users::read(TMask& m)
const TString16 pwd = decode(r.get("PASSWORD")); const TString16 pwd = decode(r.get("PASSWORD"));
m.set(F_PASSWORD, pwd); m.set(F_PASSWORD, pwd);
m.set(F_TEST, pwd); m.set(F_PROVA, pwd);
build_tree(&r); build_tree(&r);
@ -758,7 +758,7 @@ int TSet_user_passwd::read(TMask& m)
const TString16 pwd =decode(r.get("PASSWORD")); const TString16 pwd =decode(r.get("PASSWORD"));
m.set(F_PASSWORD, pwd); m.set(F_PASSWORD, pwd);
m.set(F_TEST, pwd); m.set(F_PROVA, pwd);
return NOERR; return NOERR;
} }

View File

@ -61,11 +61,11 @@ BEGIN
GROUP 3 GROUP 3
END END
STRING F_TEST 8 STRING F_PROVA 8
BEGIN BEGIN
PROMPT 32 3 "Prova " PROMPT 32 3 "Prova "
FLAGS "*" FLAGS "*"
STR_EXPR #F_TEST=#F_PASSWORD STR_EXPR #F_PROVA=#F_PASSWORD
WARNING "La password ed la sua prova devono coincidere" WARNING "La password ed la sua prova devono coincidere"
GROUP 3 GROUP 3
END END

View File

@ -93,7 +93,7 @@ protected: // TSheet
virtual bool on_key(KEY key); virtual bool on_key(KEY key);
static bool quit_handler(TMask_field& f, KEY k); static bool quit_handler(TMask_field& f, KEY k);
static bool tutti_handler(TMask_field& f, KEY k); static bool tutti_handler(TMask_field& f, KEY k);
int get_module_number(const char* module) const; int get_module_number(const TString& module) const;
bool has_module(int modnumber) const; bool has_module(int modnumber) const;
bool is_zip_file(const TFilename& n) const; bool is_zip_file(const TFilename& n) const;
@ -201,7 +201,7 @@ bool TInstaller_mask::has_module(int modnumber) const
if (modnumber == SRAUT) if (modnumber == SRAUT)
{ {
char s[16]; char s[16];
if (xvt_fsys_get_campo_stp_value("Servers", s, sizeof(s))) if (xvt_fsys_get_campo_stp_value("Servers", s, sizeof(s)) || xvt_fsys_get_campo_stp_value("Sy", s, sizeof(s))) //***aggiunto il modulo sy
return atoi(s) > 0; return atoi(s) > 0;
} }
return main_app().has_module(modnumber, CHK_DONGLE); return main_app().has_module(modnumber, CHK_DONGLE);
@ -210,17 +210,19 @@ bool TInstaller_mask::has_module(int modnumber) const
int TInstaller_mask::precheck_modules(bool only_newer) int TInstaller_mask::precheck_modules(bool only_newer)
{ {
TString16 release,currrelease; TString16 release,currrelease;
TString4 cod_module;
int patchlevel,modnumber,currpatch; int patchlevel,modnumber,currpatch;
TString_array& array = rows_array(); TString_array& array = rows_array();
FOR_EACH_ARRAY_ROW_BACK(array, r, row) FOR_EACH_ARRAY_ROW(array, r, row)
{ {
TToken_string& rigar = *row; TToken_string& rigar = *row;
cod_module = rigar.get(C_CODE);
release = rigar.get(C_RELEASE); release = rigar.get(C_RELEASE);
patchlevel = rigar.get_int(C_PATCH); patchlevel = rigar.get_int(C_PATCH);
currrelease = rigar.get(C_CURRRELEASE); currrelease = rigar.get(C_CURRRELEASE);
currpatch = rigar.get_int(C_CURRPATCH); currpatch = rigar.get_int(C_CURRPATCH);
modnumber=get_module_number(rigar.get(C_CODE)); modnumber = get_module_number(cod_module);
if (modnumber >= 0 && has_module(modnumber) && if (modnumber >= 0 && has_module(modnumber) &&
!release.blank() && !release.blank() &&
((release > currrelease) || ((release > currrelease) ||
@ -229,7 +231,14 @@ int TInstaller_mask::precheck_modules(bool only_newer)
{ {
// checca il modulo o la patch se ho installata la stessa versione // checca il modulo o la patch se ho installata la stessa versione
const bool chk = rigar.get_char(C_ISPATCH) != 'X' || release == currrelease; const bool chk = rigar.get_char(C_ISPATCH) != 'X' || release == currrelease;
check(r,chk ); check(r, chk);
if (chk && only_newer && cod_module == "sy") //se viene checkato il modulo sy (sistema) deve togliere..
{ //..la possibilita' di installare altri moduli..
for (int i = 0; i < array.items(); i++)
disable_row(i); //disabilita tutte le righe dello sheet
disable(DLG_USER);
break; //..ed uscire
}
} }
} }
force_update(); // Indispensabile per vedere le righe aggiornate force_update(); // Indispensabile per vedere le righe aggiornate
@ -237,13 +246,16 @@ int TInstaller_mask::precheck_modules(bool only_newer)
} }
int TInstaller_mask::get_module_number(const char* module) const int TInstaller_mask::get_module_number(const TString& module) const
{ {
int aut = -1; int aut = -1;
if (module && * module) bool ok = FALSE;
if (module.not_empty())
{ {
if (module == "ba" || module == "sy") //moduli base e sistema: deve ritornare 0;
return 0;
TScanner scanner(AUT_FILE); TScanner scanner(AUT_FILE);
bool ok = FALSE;
for (aut = 0; scanner.line() != ""; aut++) for (aut = 0; scanner.line() != ""; aut++)
if (scanner.token().starts_with(module)) if (scanner.token().starts_with(module))
{ ok = TRUE; break; } { ok = TRUE; break; }
@ -333,16 +345,13 @@ bool TInstaller_mask::autoload()
destroy(); destroy();
force_update(); force_update();
ininame=path;
ininame.add(TInstall_ini::default_name());
TString_array modules; TString_array modules;
if (ininame.exist()) if (ininame.exist())
{ {
// Presente il file ini generale "install.ini" // Presente il file ini generale "install.ini" (moduli;immagine cd)
TInstall_ini ini(ininame); TInstall_ini ini(ininame);
ini.list_paragraphs(modules); ini.list_paragraphs(modules); //riempie modules con la lista dei paragrafi sul .ini ***
FOR_EACH_ARRAY_ROW(modules, i, row) FOR_EACH_ARRAY_ROW(modules, i, row)
{ {
@ -370,10 +379,10 @@ bool TInstaller_mask::autoload()
} }
else else
{ {
// Presenti i singoli file ini dei moduli // Presenti i singoli file .ini dei moduli (pacchi ma non patches!)
ininame = path; ininame = path;
ininame.add("??inst.ini"); ininame.add("??inst.ini");
list_files(ininame, modules); list_files(ininame, modules); //ritorna la lista dei files presenti nel .ini della patch ***
FOR_EACH_ARRAY_ROW(modules, m, row) FOR_EACH_ARRAY_ROW(modules, m, row)
{ {
TString& ininame = *row; TString& ininame = *row;
@ -385,11 +394,10 @@ bool TInstaller_mask::autoload()
add_module(ini, module, FALSE); add_module(ini, module, FALSE);
} }
} }
// add patches
modules.destroy(); modules.destroy();
if (internet) if (internet) //internet patches
{ {
http_dir(http_server, http_path, modules); http_dir(http_server, http_path, modules);
for (int i = modules.last(); i >= 0; i--) for (int i = modules.last(); i >= 0; i--)
@ -415,15 +423,36 @@ bool TInstaller_mask::autoload()
} }
modules.pack(); modules.pack();
} }
else else //normal patches
{ {
ininame = path; ininame = path;
ininame.add("??0???a.ini"); ininame.add("??0???a.ini");
list_files(ininame, modules); list_files(ininame, modules);
} }
modules.sort(); // sort to have patches in patchlevel order if (modules.items() > 0) //ordina i moduli come sull'install.ini locale (per avere SY come primo
{ //modulo e via via gli altri)
TInstall_ini installini;
TString_array paragrafi;
installini.list_paragraphs(paragrafi);
TFilename file;
FOR_EACH_ARRAY_ROW(modules, am, arow)
{
file = *arow;
file = file.name();
int pos = paragrafi.find(file.left(2));
if (pos <= 0)
pos = 10000+am;
TString8 str;
str.format("%05d", pos); //aggiunge un numero d'ordine sulla sinistra del nome del file..
arow->insert(str);
}
modules.sort(); //..cosi' che la sort (che ordina alfabeticamente) sistemi la lista moduli
FOR_EACH_ARRAY_ROW(modules, bm, brow) //rimette i nomi dei moduli a posto (toglie il numero d'ordine)
brow->ltrim(5);
}
//genera le righe dello sheet di installazione
FOR_EACH_ARRAY_ROW(modules, am, arow) FOR_EACH_ARRAY_ROW(modules, am, arow)
{ {
TString& ininame = *arow; TString& ininame = *arow;
@ -752,7 +781,7 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
return FALSE; return FALSE;
} }
} }
// *************** // ==============
// decompressione // decompressione
msg = TR("Decompressione"); msg = TR("Decompressione");
if (is_a_patch) if (is_a_patch)
@ -817,7 +846,7 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
aga_unzip(totti, tempdir); // Scompatta il file totale aga_unzip(totti, tempdir); // Scompatta il file totale
::remove(totti); ::remove(totti);
// *************** // =============
// trasferimento // trasferimento
if (ok) if (ok)
{ {
@ -1027,7 +1056,7 @@ bool TInstaller_mask::install_patches(const TString& module, const TString& last
ininame << "0???a.ini"; ininame << "0???a.ini";
modules.destroy(); modules.destroy();
list_files(ininame, modules); list_files(ininame, modules);
modules.sort(); // sort by patch number modules.sort();
FOR_EACH_ARRAY_ROW(modules, am, arow) FOR_EACH_ARRAY_ROW(modules, am, arow)
{ {
TString& ininame = *arow; TString& ininame = *arow;
@ -1081,6 +1110,9 @@ bool TInstaller_mask::path_handler(TMask_field& fld, KEY key)
void TInstaller_mask::install_selection() void TInstaller_mask::install_selection()
{ {
TString_array& arr = rows_array(); TString_array& arr = rows_array();
bool sys_installed = false;
FOR_EACH_ARRAY_ROW(arr, r, row) if (checked(r)) FOR_EACH_ARRAY_ROW(arr, r, row) if (checked(r))
{ {
@ -1148,17 +1180,36 @@ void TInstaller_mask::install_selection()
message_box(TR("Impossibile installare le patch del modulo '%s'"),(const char *)modulo); message_box(TR("Impossibile installare le patch del modulo '%s'"),(const char *)modulo);
} }
else else
{
ok = install(modulo, 0); // installa il modulo ok = install(modulo, 0); // installa il modulo
}
if (ok) if (ok)
{
_installed = TRUE; // Setta il flag di almeno un modulo installato _installed = TRUE; // Setta il flag di almeno un modulo installato
if (ok) if (modulo == "sy") //se ha installato il modulo 'sy' esce
check(r, FALSE); {
sys_installed = true;
enable_row(r); //deve abilitare la riga di system senno' non la puo' uncheckare dopo
uncheck(-1); //uncheck di tutti i moduli
break;
}
uncheck(r); //finalmente unchecka i moduli installati
}
} }
else else
check(r,FALSE); // uncheck uncheck(r); // se non ci sono patch o moduli -> uncheck
} }
force_update(); //serve per togliere il check al modulo 'sy' quando viene installato
if (installed()) if (installed())
message_box(TR("Installazione conclusa")); {
if (sys_installed)
{
warning_box("Modulo SY installato: altri moduli selezionati dovranno essere installati successivamente");
send_key(K_SPACE, DLG_QUIT);
}
else
message_box(TR("Installazione conclusa"));
}
} }
bool TInstaller_mask::install_handler(TMask_field& fld, KEY key) bool TInstaller_mask::install_handler(TMask_field& fld, KEY key)

File diff suppressed because it is too large Load Diff