se e' attiva una eventuale connessione in rete. In tal modo si libera il posto sull'HL-SERVER: prima infatti ad ogni exec() effettuava un HL_LOGIN supplementare, riempiendo cosi' la tabella sul server di rete. In realta' il funzionamento corretto dovrebbe prevedere un solo HL_LOGIN per ogni stazione. A tal proposito sono stati modificati anche stdtypes.cpp e stdtypes.h, spostando la definizione di CAMPOKEY e REFKEY git-svn-id: svn://10.65.10.50/trunk@2943 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <stdlib.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#define __STDTYPES_CPP
 | 
						|
 | 
						|
#include <extcdecl.h>
 | 
						|
#include <conf.h>
 | 
						|
#include <modaut.h>
 | 
						|
 | 
						|
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_NT
 | 
						|
#include <dos.h>
 | 
						|
#include <hlapi_c.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#include <checks.h>
 | 
						|
#include <isam.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <codeb.h>
 | 
						|
 | 
						|
extern isfdptr *openf;
 | 
						|
HIDDEN long _stdlevel = 0;
 | 
						|
 | 
						|
// @doc INTERNAL
 | 
						|
 | 
						|
// @func Ritorna il livello degli archivi
 | 
						|
long get_std_level()
 | 
						|
{ return _stdlevel; }
 | 
						|
 | 
						|
// @doc INTERNAL
 | 
						|
 | 
						|
// @func Ritorna il numero di serie della chiave
 | 
						|
//
 | 
						|
// @rdesc Numero di serie della chiave
 | 
						|
int get_serial_number()
 | 
						|
{
 | 
						|
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_NT
 | 
						|
  const int status = HL_LOGIN(ModAd, DONT_CARE, REFKEY, VERKEY);
 | 
						|
  if (status != STATUS_OK)
 | 
						|
    return -1;
 | 
						|
#endif           
 | 
						|
  return getser();
 | 
						|
}
 | 
						|
 | 
						|
// @doc INTERNAL
 | 
						|
 | 
						|
// @func Inizilizza le variabili globali
 | 
						|
void init_global_vars()
 | 
						|
{
 | 
						|
  TPrefix& pref = prefix_init();
 | 
						|
  
 | 
						|
  pref.set("");
 | 
						|
  _stdlevel = pref.filelevel();
 | 
						|
  
 | 
						|
  FileDes       d;
 | 
						|
  CGetFile(LF_DIR, &d, _nolock, NORDIR);
 | 
						|
  
 | 
						|
  long maxfdir = d.EOX;
 | 
						|
  pref.set("DEF");
 | 
						|
  CGetFile(LF_DIR, &d, _nolock, NORDIR);
 | 
						|
  if (d.EOD > maxfdir) maxfdir = d.EOD;
 | 
						|
 | 
						|
  isjournal = FALSE;
 | 
						|
  
 | 
						|
  openf = new isfdptr[maxfdir];
 | 
						|
  openrec = new TRectype*[maxfdir];
 | 
						|
  
 | 
						|
  for (long i = 0; i < maxfdir; i++)
 | 
						|
  {
 | 
						|
    openf[i] = NULL;
 | 
						|
    openrec[i] = NULL;
 | 
						|
  }
 | 
						|
  
 | 
						|
#if XVT_OS == XVT_OS_SCOUNIX
 | 
						|
  const bool muflag = CGetAut(MUAUT);
 | 
						|
  if (SerNo && !muflag)
 | 
						|
    fatal_box("Abnormal termination: check protection or serial number\n");
 | 
						|
#endif
 | 
						|
  DB_init();
 | 
						|
}
 | 
						|
// @doc INTERNAL
 | 
						|
 | 
						|
// @func Dealloca le variabili globali
 | 
						|
void free_global_vars()
 | 
						|
{                
 | 
						|
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_NT
 | 
						|
  HL_LOGOUT();
 | 
						|
#endif
 | 
						|
  if (openf != NULL)
 | 
						|
  {
 | 
						|
    delete openf;
 | 
						|
    delete openrec;
 | 
						|
    prefix_destroy();
 | 
						|
  }  
 | 
						|
  DB_exit();
 | 
						|
}
 | 
						|
 | 
						|
#ifndef FOXPRO
 | 
						|
#include <xvt.h>
 | 
						|
 | 
						|
// @doc EXTERNAL
 | 
						|
 | 
						|
// @func Operatore per la creazione di un oggetto (sostituisce operatore C++)
 | 
						|
//
 | 
						|
// @rdesc Ritorna il puntatore all'oggetto creato
 | 
						|
void* operator new(size_t size)
 | 
						|
 | 
						|
// @comm Per maggiori informazioni fare riferimento all'omonimo comando sull'help
 | 
						|
//   in linea del C++.
 | 
						|
//       <nl>Questa funzione viene implementata se non si opera in ambiante FoxPro.
 | 
						|
 | 
						|
{ 
 | 
						|
  void* mem = (void*)malloc(size);
 | 
						|
  if (mem == NULL)
 | 
						|
    fatal_box("Out of memory: can't allocate %u bytes", size);
 | 
						|
 | 
						|
  return mem;
 | 
						|
}
 | 
						|
// @doc EXTERNAL
 | 
						|
 | 
						|
// @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
 | 
						|
//   in linea del C++.
 | 
						|
//       <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.
 | 
						|
 | 
						|
{
 | 
						|
  CHECK(ptr, "Can't delete a NULL pointer");
 | 
						|
  free(ptr);
 | 
						|
}
 | 
						|
 | 
						|
#endif // FOXPRO
 | 
						|
 | 
						|
 |