212 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//AB2100.CPP: Ricezione-Trasferimetno tabelle
 | 
						|
#include <xvt.h>
 | 
						|
#include <checks.h>
 | 
						|
#include <string.h>
 | 
						|
#include "ab2100a.h"
 | 
						|
#include "ab2.h"
 | 
						|
#include "ab2100.h"
 | 
						|
#include "caradd.h" 
 | 
						|
#include "colldich.h"
 | 
						|
                    
 | 
						|
 | 
						|
/* ********************************************************************************************************* */
 | 
						|
/* TTrasfer                                                                                                 */
 | 
						|
/*********************************************************************************************************** */
 | 
						|
 | 
						|
TObject_reception *TRicezione::set_transfer(int tipo_ricezione ,const TFilename & percorso, const TString & config_name)
 | 
						|
{
 | 
						|
  if (_rice != NULL)
 | 
						|
    delete _rice;
 | 
						|
  switch (tipo_ricezione)
 | 
						|
  {
 | 
						|
    case RICEZIONE_INTERNA:
 | 
						|
      _rice = new TObject_reception(percorso);
 | 
						|
      break; 
 | 
						|
    case RICEZIONE_AS400:
 | 
						|
      _rice = new TRicezione_AS400(percorso);
 | 
						|
      break; 
 | 
						|
    case RICEZIONE_USER_DEFINED:
 | 
						|
      _rice = new TRicezione_userdef(config_name,percorso);
 | 
						|
      break; 
 | 
						|
  }
 | 
						|
  return _rice; 
 | 
						|
}
 | 
						|
 | 
						|
int ab2100(int argc, char **argv)
 | 
						|
{
 | 
						|
  char *rt = argv[2]+1;  //Leggo se è richiesta la ricezine (r/R) o il trasferimento (t/T)
 | 
						|
  *rt=toupper(*rt);
 | 
						|
 | 
						|
  switch (*rt)
 | 
						|
  {
 | 
						|
  case 'R': //Ricezione
 | 
						|
  
 | 
						|
    { 
 | 
						|
      ab2101(argc,argv);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  case 'T': //Trasferimento
 | 
						|
    {        
 | 
						|
      ab2102(argc,argv);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    default:
 | 
						|
      error_box ("Sintassi: \n -0 -R -<utente> per ricezione \n -0 -T -<utente> per trasferimetno");
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
TAdditional_car::TAdditional_car() :
 | 
						|
  TRectype(LF_CARADD)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void TAdditional_car::put_str(const char* fieldname, const char* val)
 | 
						|
{
 | 
						|
  if (strcmp(fieldname,ABCA_ID)==0)
 | 
						|
  {
 | 
						|
    static TString16 id;
 | 
						|
    CHECK(length(ABCA_ID)<=16,"ID in CARADD deve essere max lungo 16");
 | 
						|
    id = val;
 | 
						|
    id.right_just(length(ABCA_ID));
 | 
						|
    TRectype::put_str(fieldname, (const char *)id);
 | 
						|
  } else
 | 
						|
    TRectype::put_str(fieldname, val);
 | 
						|
}
 | 
						|
 | 
						|
bool TAdditional_car::same_as(real other_id)
 | 
						|
{
 | 
						|
  bool r;       
 | 
						|
  //TLocalisamfile ca(LF_CARADD);            
 | 
						|
  TAdditional_cars ca;
 | 
						|
  
 | 
						|
  ca.put(ABCA_ID,other_id);
 | 
						|
  ca.read();
 | 
						|
  real id=get(ABCA_ID);
 | 
						|
  put(ABCA_ID,ca.get(ABCA_ID));
 | 
						|
  r= (*this == ca.curr());
 | 
						|
  put(ABCA_ID,id);
 | 
						|
  return r;
 | 
						|
}
 | 
						|
  
 | 
						|
TAdditional_cars::TAdditional_cars(TFilelock lockmode) :
 | 
						|
  TLocalisamfile (LF_CARADD)
 | 
						|
{
 | 
						|
  set_curr(new TAdditional_car());
 | 
						|
  if (lockmode==_excllock)
 | 
						|
  {
 | 
						|
    lock();  //Il file è già aperto: gli faccio un lock
 | 
						|
    if (last()==NOERR)
 | 
						|
      _lastid=get_long(ABCA_ID);
 | 
						|
    else    
 | 
						|
      _lastid=0;
 | 
						|
  } else
 | 
						|
    _lastid=-1;
 | 
						|
}
 | 
						|
 | 
						|
long TAdditional_cars::lastid()
 | 
						|
{
 | 
						|
  if (_lastid>=0)
 | 
						|
  {
 | 
						|
    return _lastid;
 | 
						|
  } else {
 | 
						|
    TLocalisamfile ca(LF_CARADD);
 | 
						|
    if (ca.last()==NOERR)
 | 
						|
      return atol(get(ABCA_ID));
 | 
						|
    else 
 | 
						|
      return 0;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int TAdditional_cars::write()
 | 
						|
{   
 | 
						|
  int err;
 | 
						|
  if (_lastid>=0)
 | 
						|
  {
 | 
						|
    curr().put(ABCA_ID,++_lastid);
 | 
						|
    err=TLocalisamfile::write();
 | 
						|
  } else  {
 | 
						|
    do {
 | 
						|
      curr().put(ABCA_ID,lastid()+1);
 | 
						|
      err=TLocalisamfile::write();
 | 
						|
    } while (err==_isdupkey);
 | 
						|
  }
 | 
						|
  return err;
 | 
						|
}  
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/***********************/
 | 
						|
TAdditional_col::TAdditional_col() :
 | 
						|
  TRectype(LF_COLLDICH)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
   
 | 
						|
long TAdditional_cols::_lastid = 0;
 | 
						|
 | 
						|
TAdditional_cols::TAdditional_cols() :
 | 
						|
  TLocalisamfile (LF_COLLDICH)
 | 
						|
{
 | 
						|
  set_curr(new TAdditional_col());
 | 
						|
  if (_lastid == 0)
 | 
						|
  {
 | 
						|
    if (last()==NOERR)
 | 
						|
      _lastid=get_long(ABCD_ID);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/*long TAdditional_cols::lastid()
 | 
						|
{
 | 
						|
  if (_lastid>=0)
 | 
						|
  {
 | 
						|
    return _lastid;
 | 
						|
  } else {
 | 
						|
    TLocalisamfile ca(LF_COLLDICH);
 | 
						|
    if (ca.last()==NOERR)
 | 
						|
      return atol(get(ABCD_ID));
 | 
						|
    else 
 | 
						|
      return 0;
 | 
						|
  }
 | 
						|
} */
 | 
						|
 | 
						|
 | 
						|
int TAdditional_cols::write()
 | 
						|
{   
 | 
						|
  int err = NOERR;
 | 
						|
  bool scrivo = FALSE;
 | 
						|
 | 
						|
  for (int i = curr().items(); (i > 1) && (!scrivo); i--) //Estraggo il campo
 | 
						|
  {                                    
 | 
						|
    const char * name_field = curr().fieldname(i);
 | 
						|
    const char * str = "";
 | 
						|
    if (name_field) //Inizializzo la stringa solo se il puntatore non è nullo
 | 
						|
       str = curr().get(name_field);
 | 
						|
    if (strlen(str) > 0) //Se la stringa è stata inizilizzata a qualcosa entro per controllare
 | 
						|
    {
 | 
						|
      for (int ii = 0; str[ii]; ii++)
 | 
						|
      {//scorro il contenuto del campo per controllare se è vuoto
 | 
						|
        if ((str[ii] != ' ') && (str[ii] != '0'))
 | 
						|
        {
 | 
						|
          scrivo = TRUE; //se trovo qualcosa di "non vuoto" setto il flag di scrittura
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (scrivo)
 | 
						|
  {
 | 
						|
    do {
 | 
						|
      curr().put(ABCD_ID,++_lastid);
 | 
						|
      err=TLocalisamfile::write();
 | 
						|
    } while (err==_isdupkey);
 | 
						|
    err=TLocalisamfile::write();
 | 
						|
  }
 | 
						|
  else
 | 
						|
    curr().put(ABCD_ID,0);    //Il record non è stato scritto ma devo inserire nella chiave del rocord
 | 
						|
                              //l'indice (=0) poichè questo andrà inserito in RELANA
 | 
						|
  return err;
 | 
						|
} |