1994-08-12 10:52:49 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#define __STDTYPES_CPP
|
|
|
|
|
|
|
|
#include <extcdecl.h>
|
|
|
|
#include <conf.h>
|
|
|
|
#include <modaut.h>
|
1997-12-02 11:57:26 +00:00
|
|
|
#include <isamrpc.h>
|
1994-08-12 10:52:49 +00:00
|
|
|
|
1997-06-02 10:16:10 +00:00
|
|
|
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
|
1994-08-12 10:52:49 +00:00
|
|
|
#include <dos.h>
|
|
|
|
#include <hlapi_c.h>
|
|
|
|
#endif
|
|
|
|
|
1997-06-03 13:51:20 +00:00
|
|
|
#include <applicat.h>
|
1994-08-12 10:52:49 +00:00
|
|
|
#include <isam.h>
|
1994-12-07 11:10:57 +00:00
|
|
|
#include <prefix.h>
|
1997-12-02 11:57:26 +00:00
|
|
|
#include <codeb.h>
|
1994-08-12 10:52:49 +00:00
|
|
|
|
1995-07-03 07:49:30 +00:00
|
|
|
extern isfdptr *openf;
|
1997-07-22 09:49:11 +00:00
|
|
|
extern isfdptr *ext_files;
|
1995-03-22 09:07:04 +00:00
|
|
|
HIDDEN long _stdlevel = 0;
|
|
|
|
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc INTERNAL
|
1996-01-31 17:19:02 +00:00
|
|
|
|
|
|
|
// @func Ritorna il livello degli archivi
|
1995-03-22 09:07:04 +00:00
|
|
|
long get_std_level()
|
|
|
|
{ return _stdlevel; }
|
1994-08-12 10:52:49 +00:00
|
|
|
|
1997-06-12 15:55:14 +00:00
|
|
|
// @func Setta il livello degli archivi
|
|
|
|
void set_std_level(const long l)
|
|
|
|
{ _stdlevel = l; }
|
|
|
|
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc INTERNAL
|
|
|
|
|
1997-06-03 13:51:20 +00:00
|
|
|
static int _login_status = 0;
|
|
|
|
|
1996-01-31 17:19:02 +00:00
|
|
|
// @func Ritorna il numero di serie della chiave
|
|
|
|
//
|
|
|
|
// @rdesc Numero di serie della chiave
|
1997-06-03 13:51:20 +00:00
|
|
|
int get_serial_number(const char* appname)
|
1997-12-02 11:57:26 +00:00
|
|
|
{
|
|
|
|
#ifdef _DEMO_
|
|
|
|
return 0;
|
|
|
|
#else
|
1998-01-09 09:53:03 +00:00
|
|
|
|
1997-06-03 13:51:20 +00:00
|
|
|
if (_login_status == 0)
|
|
|
|
{
|
|
|
|
if (HL_LOGIN(ModAd, DONT_CARE, REFKEY, VERKEY) == STATUS_OK)
|
|
|
|
{
|
|
|
|
_login_status = 1;
|
|
|
|
getser();
|
|
|
|
}
|
|
|
|
}
|
1998-01-09 09:53:03 +00:00
|
|
|
|
1997-06-03 13:51:20 +00:00
|
|
|
if (_login_status != 1)
|
|
|
|
{
|
|
|
|
if (_login_status == 2)
|
|
|
|
{
|
|
|
|
rpc_UserLogout();
|
|
|
|
SerNo = 0xFFFF;
|
|
|
|
}
|
|
|
|
|
1998-01-09 09:53:03 +00:00
|
|
|
TConfig ini(CONFIG_INSTALL, "Server");
|
|
|
|
const char* server = ini.get("Dongle");
|
1997-06-03 13:51:20 +00:00
|
|
|
const char* guest = "******";
|
|
|
|
const char* utente = (!xvt_running() && !stricmp(appname, "ba0100")) ? guest : user();
|
|
|
|
|
|
|
|
if (rpc_UserLogin(server, utente, guest, appname))
|
|
|
|
{
|
|
|
|
_login_status = 2;
|
|
|
|
SerNo = rpc_DongleNumber();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_login_status = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_login_status)
|
|
|
|
{
|
1998-01-27 10:25:05 +00:00
|
|
|
case 1 : CGetAut(1) != 0; break;
|
|
|
|
case 2 : rpc_DongleModules(_int_tab0); break;
|
|
|
|
default: memset(_int_tab0, 0, sizeof(_int_tab0)); break;
|
1997-06-03 13:51:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return SerNo;
|
1997-12-02 11:57:26 +00:00
|
|
|
#endif
|
1994-12-07 11:10:57 +00:00
|
|
|
}
|
|
|
|
|
1998-01-27 10:25:05 +00:00
|
|
|
|
|
|
|
bool test_assistance_year()
|
|
|
|
{
|
|
|
|
int dongle_year = TDate(TODAY).year();
|
|
|
|
if (SerNo > 0)
|
|
|
|
{
|
|
|
|
switch(_login_status)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
{
|
|
|
|
int data[4];
|
|
|
|
HL_READ(60, data);
|
|
|
|
HL_CODE(data, HLBLOCK);
|
|
|
|
dongle_year = int(data[0]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
dongle_year = rpc_DongleYear();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int app_year, dum1, dum2, dum3;
|
|
|
|
bool ok = TApplication::get_version_info(app_year, dum1, dum2, dum3);
|
|
|
|
if (ok)
|
|
|
|
ok = app_year <= dongle_year;
|
|
|
|
return ok;
|
|
|
|
}
|
|
|
|
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc INTERNAL
|
|
|
|
|
1996-01-31 17:19:02 +00:00
|
|
|
// @func Inizilizza le variabili globali
|
1994-08-12 10:52:49 +00:00
|
|
|
void init_global_vars()
|
1997-12-02 11:57:26 +00:00
|
|
|
{
|
1995-03-22 09:07:04 +00:00
|
|
|
TPrefix& pref = prefix_init();
|
1994-11-15 11:23:24 +00:00
|
|
|
|
1995-03-22 09:07:04 +00:00
|
|
|
pref.set("");
|
|
|
|
_stdlevel = pref.filelevel();
|
1994-09-27 10:12:15 +00:00
|
|
|
|
|
|
|
FileDes d;
|
|
|
|
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
|
|
|
|
|
|
|
long maxfdir = d.EOX;
|
1995-03-22 09:07:04 +00:00
|
|
|
pref.set("DEF");
|
1994-09-27 10:12:15 +00:00
|
|
|
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
|
|
|
if (d.EOD > maxfdir) maxfdir = d.EOD;
|
1994-08-12 10:52:49 +00:00
|
|
|
|
|
|
|
isjournal = FALSE;
|
|
|
|
|
1994-09-27 10:12:15 +00:00
|
|
|
openf = new isfdptr[maxfdir];
|
|
|
|
openrec = new TRectype*[maxfdir];
|
1997-07-22 09:49:11 +00:00
|
|
|
ext_files = new isfdptr[maxfdir];
|
1994-09-27 10:12:15 +00:00
|
|
|
|
|
|
|
for (long i = 0; i < maxfdir; i++)
|
|
|
|
{
|
|
|
|
openf[i] = NULL;
|
|
|
|
openrec[i] = NULL;
|
1997-07-22 09:49:11 +00:00
|
|
|
ext_files[i] = NULL;
|
1994-09-27 10:12:15 +00:00
|
|
|
}
|
|
|
|
|
1995-07-03 07:49:30 +00:00
|
|
|
DB_init();
|
1994-08-12 10:52:49 +00:00
|
|
|
}
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc INTERNAL
|
1994-08-12 10:52:49 +00:00
|
|
|
|
1996-01-31 17:19:02 +00:00
|
|
|
// @func Dealloca le variabili globali
|
1994-08-12 10:52:49 +00:00
|
|
|
void free_global_vars()
|
1994-12-07 11:10:57 +00:00
|
|
|
{
|
1997-06-02 10:16:10 +00:00
|
|
|
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
|
1997-06-03 13:51:20 +00:00
|
|
|
if (_login_status == 2)
|
|
|
|
rpc_UserLogout();
|
|
|
|
else
|
|
|
|
HL_LOGOUT();
|
1994-08-12 10:52:49 +00:00
|
|
|
#endif
|
1997-06-03 13:51:20 +00:00
|
|
|
|
1995-03-22 09:07:04 +00:00
|
|
|
if (openf != NULL)
|
1994-12-07 11:10:57 +00:00
|
|
|
{
|
|
|
|
delete openf;
|
|
|
|
delete openrec;
|
1997-07-22 09:49:11 +00:00
|
|
|
delete ext_files;
|
1995-03-22 09:07:04 +00:00
|
|
|
prefix_destroy();
|
1994-12-07 11:10:57 +00:00
|
|
|
}
|
1998-01-09 09:53:03 +00:00
|
|
|
// DB_exit();
|
1994-08-12 10:52:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#ifndef FOXPRO
|
|
|
|
#include <xvt.h>
|
|
|
|
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc EXTERNAL
|
|
|
|
|
1996-01-31 17:19:02 +00:00
|
|
|
// @func Operatore per la creazione di un oggetto (sostituisce operatore C++)
|
|
|
|
//
|
|
|
|
// @rdesc Ritorna il puntatore all'oggetto creato
|
1994-08-12 10:52:49 +00:00
|
|
|
void* operator new(size_t size)
|
1996-01-31 17:19:02 +00:00
|
|
|
|
|
|
|
// @comm Per maggiori informazioni fare riferimento all'omonimo comando sull'help
|
1996-05-08 11:09:13 +00:00
|
|
|
// in linea del C++.
|
1996-01-31 17:19:02 +00:00
|
|
|
// <nl>Questa funzione viene implementata se non si opera in ambiante FoxPro.
|
|
|
|
|
1995-01-19 14:00:04 +00:00
|
|
|
{
|
1996-06-27 07:15:21 +00:00
|
|
|
void* mem = (void*)malloc(size);
|
1994-08-12 10:52:49 +00:00
|
|
|
if (mem == NULL)
|
|
|
|
fatal_box("Out of memory: can't allocate %u bytes", size);
|
1995-11-17 10:29:45 +00:00
|
|
|
|
1994-09-27 10:12:15 +00:00
|
|
|
return mem;
|
1994-08-12 10:52:49 +00:00
|
|
|
}
|
1996-02-05 19:00:53 +00:00
|
|
|
// @doc EXTERNAL
|
1994-08-12 10:52:49 +00:00
|
|
|
|
1996-01-31 17:19:02 +00:00
|
|
|
// @func Operatore per la distruzione di un oggetto (sostituisce operatore C++)
|
|
|
|
void operator delete(
|
|
|
|
void* ptr) // @parm Puntatore all'oggetto da distruggere
|
|
|
|
|
|
|
|
// @comm Per maggiori informazioni fare riferimento all'omonimo comando sull'help
|
1996-05-08 11:09:13 +00:00
|
|
|
// in linea del C++.
|
1996-01-31 17:19:02 +00:00
|
|
|
// <nl>Nel caso venga passato un puntatore NULL viene emesso un <f CKECK>.
|
|
|
|
// <nl>Questa funzione viene implementata se non si opera in ambiante FoxPro.
|
|
|
|
|
1994-08-12 10:52:49 +00:00
|
|
|
{
|
1995-01-19 14:00:04 +00:00
|
|
|
CHECK(ptr, "Can't delete a NULL pointer");
|
|
|
|
free(ptr);
|
1994-08-12 10:52:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif // FOXPRO
|
1995-01-24 08:52:49 +00:00
|
|
|
|
|
|
|
|