diff --git a/include/applicat.cpp b/include/applicat.cpp index 493535c67..825d3838c 100755 --- a/include/applicat.cpp +++ b/include/applicat.cpp @@ -7,7 +7,7 @@ #if XVT_OS == XVT_OS_WIN #include #endif - + #include #include #include @@ -159,6 +159,32 @@ long XVT_CALLCONV1 TApplication::task_eh(WINDOW win, EVENT *ep) case E_CREATE: if (_application->pre_create()) { +#ifdef _DEMO_ + { + const TString16 dname(encode("DATA")); + const TString16 hname(encode("ORA")); + TConfig c(CONFIG_STUDIO, "Main"); + TDate data(decode(c.get(dname))); + TDate oggi(TODAY); + real remaining_time(decode(c.get(hname))); + main_app()._start_time = time(NULL); + + if (data < oggi) + { + data = oggi; + c.set(dname, encode(data)); + c.set(hname, encode("120.00")); + } + else + if (data == oggi) + { + if (remaining_time <= ZERO) + exit(0); + } + else + exit(0); + } +#endif TTemp_window tw(win); TString cap; cap << prassi_spa() << " - " << main_app().get_module_name(); @@ -285,6 +311,25 @@ long TApplication::handler(WINDOW win, EVENT* ep) void TApplication::stop_run() { if (_savefirm) prefix().set_codditta(_savefirm); +#ifdef _DEMO_ + { + const TString16 hname(encode("ORA")); + TConfig c(CONFIG_STUDIO, "Main"); + real remaining_time(decode(c.get(hname))); + if (name() != "ba0100") + { + time_t wt = time(NULL); + int delay = (int) (wt - _start_time); + if (delay < 0) + remaining_time = ZERO; + else + remaining_time -= (delay / 60.0); + c.set(hname, encode(remaining_time.string())); + } + else + message_box("Questo e' un programma dimostrativo.\n Oggi ti rimangono %s minuti di utilizzo.", remaining_time.string(3, 0)); + } +#endif terminate(); xvt_app_destroy(); } @@ -342,6 +387,7 @@ HIDDEN void wake_up_caller() void TApplication::terminate() { + wake_up_caller(); close_all_dialogs(); @@ -393,14 +439,16 @@ const char* TApplication::get_module_name() const void TApplication::set_perms() -{ +{ +#ifndef _DEMO_ _dongle_aut.set(0, TRUE); for (int i = 1 ; i < ENDAUT; i++) { const int af = i - 1; const bool val = BITTEST(_int_tab0[af / 16], af % 16); _dongle_aut.set(i, val); - } + } +#endif _user_aut.set(0, TRUE); const TString& utente = user(); @@ -585,10 +633,12 @@ void TApplication::end_wait() } bool TApplication::has_module(int module, int checktype) const -{ +{ bool ok = TRUE; +#ifndef _DEMO_ if (checktype == CHK_ALL || checktype == CHK_DONGLE) ok = _dongle_aut[module]; +#endif if (ok && checktype == CHK_ALL || checktype == CHK_USER) ok = _user_aut[module]; return ok; @@ -610,6 +660,7 @@ bool TApplication::set_firm(long newfirm) { const long oldfirm = get_firm(); +#ifndef _DEMO_ if (newfirm < 1) { TMask mask("bagn002"); @@ -638,6 +689,7 @@ bool TApplication::set_firm(long newfirm) } } } +#endif if (newfirm == oldfirm || newfirm < 1) return newfirm > 0; @@ -745,6 +797,9 @@ bool TApplication::firm_change_enabled() const // @comm Praticamente controlla se e' stato lanciato da ba0 o dal program manager { +#ifdef _DEMO_ + return FALSE; +#else #if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32 static bool can = 2; if (can == 2) @@ -769,7 +824,8 @@ bool TApplication::firm_change_enabled() const #else return TRUE; #endif -} +#endif +} void TApplication::on_firm_change() {} diff --git a/include/applicat.h b/include/applicat.h index a200f8294..12c125d2c 100755 --- a/include/applicat.h +++ b/include/applicat.h @@ -32,9 +32,13 @@ class TApplication // @cmember:(INTERNAL) Numero di argomenti passati all'applicazione int __argc; // @cmember:(INTERNAL) Array di argomenti passati all'applicazione - const char** __argv; + const char** __argv; +#ifdef _DEMO_ + time_t _start_time; +#else // @cmember:(INTERNAL) Array di autorizzazione concessa della chiavi TBit_array _dongle_aut; +#endif // @cmember:(INTERNAL) Array di autorizzazione concessa all'utente TBit_array _user_aut; diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 6832547c9..20c1e458f 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -2,7 +2,7 @@ #define XVT_INCL_NATIVE #include -#include +#include #include #include #include @@ -3294,14 +3294,33 @@ bool TDate_field::on_key(KEY key) { const TString& data = get_window_data(); if (data.not_empty()) // data not empty - { + { if (!TDate::isdate(data)) { error_box("Data errata o formato non valido"); return FALSE; } else + { +#ifdef _DEMO_ + TDate d(data); + int y = d.year(); + + if (y & 0x0001) y--; + y >>= 3; + y++; + y /= 10; + if (y >= 25) + { + int m = d.month(); + if (m > 3) + d.set_month(rand() % 3 + 1); + } + set_window_data(d.string()); +#else set_window_data(data); +#endif + } } } else @@ -3322,6 +3341,23 @@ bool TDate_field::autosave(TRelation& r) if (field()) { const char* td = get(); +#ifdef _DEMO_ + { + TDate d(td); + int y = d.year(); + + y += 8; + y /= 25; + y >>= 3; + if (y >= 10) + { + int m = d.month() >> 2; + if (m > 0) + d.set_month(rand() % 3 + 1); + } + td = d.string(); + } +#endif if (right_justified()) { TDate d(td); diff --git a/include/stdtypes.cpp b/include/stdtypes.cpp index 9de90215c..282b0e3a7 100755 --- a/include/stdtypes.cpp +++ b/include/stdtypes.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32 #include @@ -16,7 +16,7 @@ #include #include #include -#include +#include extern isfdptr *openf; extern isfdptr *ext_files; @@ -40,7 +40,10 @@ static int _login_status = 0; // // @rdesc Numero di serie della chiave int get_serial_number(const char* appname) -{ +{ +#ifdef _DEMO_ + return 0; +#else if (_login_status == 0) { if (HL_LOGIN(ModAd, DONT_CARE, REFKEY, VERKEY) == STATUS_OK) @@ -79,13 +82,14 @@ int get_serial_number(const char* appname) } return SerNo; +#endif } // @doc INTERNAL // @func Inizilizza le variabili globali void init_global_vars() -{ +{ TPrefix& pref = prefix_init(); pref.set("");