config.cpp Aggiustamenti minimi alla read_paragraph
config.h Aggiunta funzione get_paragraph isam.cpp Eliminato warning per null_char = (char)0xFF; relapp.cpp Aggiunto supporto per transazioni mediante .ini relapp.h Aggiunte dichiarazioni per funzioni di gestione .ini realtion.cpp Aggiunta possibilita' di leggere e scrivere i TFieldref su .ini relation.h Aggiunte dichiarazioni dei metodi suddetti rmov.h Aggiunta dichiarazione dei NUMGIO strings.cpp Aggiunto operatore di copia tra TString_array string.h Dichiarato operatore di copia di array di stringhe git-svn-id: svn://10.65.10.50/trunk@4243 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									a7d9d26979
								
							
						
					
					
						commit
						cfeded0c58
					
				@ -128,16 +128,18 @@ void TConfig::_write_file()
 | 
				
			|||||||
  ::remove(temp);          // Cancella file temporaneo
 | 
					  ::remove(temp);          // Cancella file temporaneo
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TConfig::set_paragraph(const char* section)
 | 
					bool TConfig::set_paragraph(const char* section)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  bool ok = TRUE;
 | 
				
			||||||
  if (section != NULL && _paragraph != section)
 | 
					  if (section != NULL && _paragraph != section)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    if (_dirty) 
 | 
					    if (_dirty) 
 | 
				
			||||||
      _write_file();
 | 
					      _write_file();
 | 
				
			||||||
    _paragraph = section; 
 | 
					    _paragraph = section; 
 | 
				
			||||||
    _dirty = FALSE;
 | 
					    _dirty = FALSE;
 | 
				
			||||||
    _read_paragraph();
 | 
					    ok = _read_paragraph();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// @doc EXTERNAL
 | 
					// @doc EXTERNAL
 | 
				
			||||||
 | 
				
			|||||||
@ -122,8 +122,10 @@ public:
 | 
				
			|||||||
  //          sezione indicata.
 | 
					  //          sezione indicata.
 | 
				
			||||||
  word items(const char* var, const char* section);
 | 
					  word items(const char* var, const char* section);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  // @cmember Ritorna il nome del paragrafo attivo
 | 
				
			||||||
 | 
					  const TString& get_paragraph() const { return _paragraph; }
 | 
				
			||||||
  // @cmember Setta il paragrafo passato come quello attivo
 | 
					  // @cmember Setta il paragrafo passato come quello attivo
 | 
				
			||||||
  void set_paragraph(const char* par);
 | 
					  bool set_paragraph(const char* par);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // @cmember Riempie pl con la lista dei paragrafi
 | 
					  // @cmember Riempie pl con la lista dei paragrafi
 | 
				
			||||||
  int list_paragraphs(TString_array& pl);
 | 
					  int list_paragraphs(TString_array& pl);
 | 
				
			||||||
 | 
				
			|||||||
@ -369,7 +369,7 @@ HIDDEN  int __build_key(RecDes *recd, int numkey, RecType recin, char *key, bool
 | 
				
			|||||||
{           
 | 
					{           
 | 
				
			||||||
  CHECKD(numkey > 0, "Can't build key ", numkey);
 | 
					  CHECKD(numkey > 0, "Can't build key ", numkey);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const char null_char = (char)0xFF;
 | 
					  const char null_char = -1;
 | 
				
			||||||
  key[0] = '\0';
 | 
					  key[0] = '\0';
 | 
				
			||||||
  if (numkey-- <= recd->NKeys)
 | 
					  if (numkey-- <= recd->NKeys)
 | 
				
			||||||
  { 
 | 
					  { 
 | 
				
			||||||
 | 
				
			|||||||
@ -308,6 +308,9 @@ void TRelation_application::query_mode(
 | 
				
			|||||||
    set_mode(MODE_QUERY);
 | 
					    set_mode(MODE_QUERY);
 | 
				
			||||||
    init_query_mode(*_mask);
 | 
					    init_query_mode(*_mask);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (_transaction.not_empty())  
 | 
				
			||||||
 | 
					    ini2query_mask();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -344,7 +347,11 @@ void TRelation_application::insert_mode()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  set_mode(MODE_INS);
 | 
					  set_mode(MODE_INS);
 | 
				
			||||||
  get_relation()->zero();          // Azzera tutta la relazione!
 | 
					  get_relation()->zero();          // Azzera tutta la relazione!
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  init_insert_mode(*_mask);
 | 
					  init_insert_mode(*_mask);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (_transaction == "INSERT")
 | 
				
			||||||
 | 
					    ini2insert_mask(); 
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TRelation_application::modify_mode()
 | 
					bool TRelation_application::modify_mode()
 | 
				
			||||||
@ -664,22 +671,22 @@ bool TRelation_application::relation_remove()
 | 
				
			|||||||
// @comm Se la maschera e' in MODE_MOD non e' possibile cancellare il record e viene
 | 
					// @comm Se la maschera e' in MODE_MOD non e' possibile cancellare il record e viene
 | 
				
			||||||
//   emesso un <f CHECK> di errore.
 | 
					//   emesso un <f CHECK> di errore.
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  CHECK(_mask->mode() == MODE_MOD, "You can call remove in MODE_MOD only");
 | 
					  CHECK(_mask->edit_mode(), "You can call remove in edit mode only");
 | 
				
			||||||
  TRelation *r = get_relation();
 | 
					  TRelation& r = *get_relation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  r->restore_status();
 | 
					  r.restore_status();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (protected_record(r->curr()))
 | 
					  if (protected_record(r.curr()))
 | 
				
			||||||
    return message_box("Registrazione non eliminabile");
 | 
					    return message_box("Registrazione non eliminabile");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (yesno_box("Confermare l'eliminazione"))
 | 
					  if (_transaction == "DELETE" || yesno_box("Confermare l'eliminazione"))
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    r->restore_status();
 | 
					    r.restore_status();
 | 
				
			||||||
    const bool ok = remove();
 | 
					    const bool ok = remove();
 | 
				
			||||||
    if (ok)
 | 
					    if (ok)
 | 
				
			||||||
      set_limits();
 | 
					      set_limits();
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      return error_box("Errore di cancellazione %d", r->status());
 | 
					      return error_box("Errore di cancellazione %d", r.status());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return TRUE;
 | 
					  return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -708,7 +715,13 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
  KEY k;
 | 
					  KEY k;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Provoca l'autopremimento per il messaggio di LINK
 | 
					  // Provoca l'autopremimento per il messaggio di LINK
 | 
				
			||||||
  if (_lnflag) _mask->send_key(K_AUTO_ENTER, 0);
 | 
					  if (_lnflag) 
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if (_transaction == "INSERT")      
 | 
				
			||||||
 | 
					      _mask->send_key(K_CTRL+'N', 0);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      _mask->send_key(K_AUTO_ENTER, 0);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  do
 | 
					  do
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -718,6 +731,9 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
    // Dis/abilita cambio parametri
 | 
					    // Dis/abilita cambio parametri
 | 
				
			||||||
    enable_menu_item(M_FILE_REVERT, change);
 | 
					    enable_menu_item(M_FILE_REVERT, change);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (_mask->edit_mode() && _transaction == "DELETE")
 | 
				
			||||||
 | 
					      _mask->send_key(K_CTRL+'E', 0);    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    k = _mask->run();
 | 
					    k = _mask->run();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (k)
 | 
					    switch (k)
 | 
				
			||||||
@ -739,7 +755,7 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
    case K_SAVE:
 | 
					    case K_SAVE:
 | 
				
			||||||
      if (save(FALSE))
 | 
					      if (save(FALSE))
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        if (_autoins_caller.not_empty())
 | 
					        if (_autoins_caller.not_empty() || _transaction.not_empty())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          k = K_QUIT;
 | 
					          k = K_QUIT;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -772,12 +788,14 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case K_DEL:
 | 
					    case K_DEL:
 | 
				
			||||||
      if (relation_remove())
 | 
					      if (relation_remove())
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
        query_mode();
 | 
					        query_mode();
 | 
				
			||||||
      if (_autoins_caller.not_empty())
 | 
					        if (_autoins_caller.not_empty() || _transaction.not_empty())
 | 
				
			||||||
        {    
 | 
					        {    
 | 
				
			||||||
          if (_lnflag) _recins = 0;
 | 
					          if (_lnflag) _recins = 0;
 | 
				
			||||||
          k = K_QUIT;
 | 
					          k = K_QUIT;
 | 
				
			||||||
        }  
 | 
					        }  
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case K_F9:   
 | 
					    case K_F9:   
 | 
				
			||||||
      if (_mask->query_mode() || save(TRUE))
 | 
					      if (_mask->query_mode() || save(TRUE))
 | 
				
			||||||
@ -807,8 +825,10 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
        default:
 | 
					        default:
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (err == NOERR || err == _islocked) modify_mode();
 | 
					        if (err == NOERR || err == _islocked) 
 | 
				
			||||||
        else query_mode();
 | 
					          modify_mode();
 | 
				
			||||||
 | 
					        else 
 | 
				
			||||||
 | 
					          query_mode();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -825,11 +845,31 @@ bool TRelation_application::main_loop()
 | 
				
			|||||||
    msg.send();
 | 
					    msg.send();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  if (_transaction.not_empty())
 | 
				
			||||||
 | 
					  { 
 | 
				
			||||||
 | 
					    TConfig ini(_ini, "Transaction");
 | 
				
			||||||
 | 
					    if (_recins >= 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      ini.set("Result", "OK");
 | 
				
			||||||
 | 
					      ini.set("Error", "0");
 | 
				
			||||||
 | 
					      edit_mask2ini();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {                    
 | 
				
			||||||
 | 
					      const int err = get_relation()->status();
 | 
				
			||||||
 | 
					      ini.set("Result", err == NOERR ? "CANCEL" : "ERROR");
 | 
				
			||||||
 | 
					      ini.set("Error", err);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return k != K_QUIT;
 | 
					  return k != K_QUIT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TRelation_application::filter()
 | 
					bool TRelation_application::filter()
 | 
				
			||||||
{                          
 | 
					{                          
 | 
				
			||||||
 | 
					  if (parse_command_line())
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TMailbox mail;
 | 
					  TMailbox mail;
 | 
				
			||||||
  TMessage* msg = mail.next_s(MSG_FS);
 | 
					  TMessage* msg = mail.next_s(MSG_FS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -963,7 +1003,6 @@ bool TRelation_application::filter()
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TRelation_application::set_link(TMask & m, const char * keyexpr)
 | 
					void TRelation_application::set_link(TMask & m, const char * keyexpr)
 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  CHECK(keyexpr != NULL, "Invalid expression");
 | 
					  CHECK(keyexpr != NULL, "Invalid expression");
 | 
				
			||||||
  TToken_string body(keyexpr);
 | 
					  TToken_string body(keyexpr);
 | 
				
			||||||
@ -988,3 +1027,93 @@ void TRelation_application::set_link(TMask & m, const char * keyexpr)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TRelation_application::parse_command_line() 
 | 
				
			||||||
 | 
					{         
 | 
				
			||||||
 | 
					  _ini = _transaction = "";
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  TFilename ini;
 | 
				
			||||||
 | 
					  for (int i = argc()-1; i > 0; i--)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ini = argv(i);
 | 
				
			||||||
 | 
					    ini.upper();
 | 
				
			||||||
 | 
					    if (ini.left(2) == "-F" || ini.left(2) == "/F")
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      _ini = ini.mid(2);
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  _lnflag = _ini.not_empty();
 | 
				
			||||||
 | 
					  if (_lnflag)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TConfig cnf(_ini, "Transaction");
 | 
				
			||||||
 | 
					    _transaction = cnf.get("Action");
 | 
				
			||||||
 | 
					    _transaction.upper();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return _lnflag;
 | 
				
			||||||
 | 
					}                         
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TRelation_application::ini2query_mask() 
 | 
				
			||||||
 | 
					{            
 | 
				
			||||||
 | 
					  if (_transaction.not_empty())
 | 
				
			||||||
 | 
					  {         
 | 
				
			||||||
 | 
					    TConfig ini(_ini, format("%d", get_relation()->lfile().num()));
 | 
				
			||||||
 | 
					    ini2mask(ini, *_mask, TRUE);
 | 
				
			||||||
 | 
					  }     
 | 
				
			||||||
 | 
					}      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TRelation_application::ini2insert_mask() 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (_transaction.not_empty())
 | 
				
			||||||
 | 
					  {         
 | 
				
			||||||
 | 
					    TConfig ini(_ini, format("%d", get_relation()->lfile().num()));
 | 
				
			||||||
 | 
					    ini2mask(ini, *_mask, FALSE);
 | 
				
			||||||
 | 
					  }     
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					void TRelation_application::ini2mask(TConfig& ini, TMask& m, bool query)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TString defpar = ini.get_paragraph();
 | 
				
			||||||
 | 
					  TString str;
 | 
				
			||||||
 | 
					  for (int f = m.fields()-1; f >= 0; f--)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TMask_field& campo = m.fld(f);
 | 
				
			||||||
 | 
					    if (campo.field())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (!query || campo.in_key(1))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        str = campo.field()->read(ini, defpar);
 | 
				
			||||||
 | 
					        if (str.not_empty())
 | 
				
			||||||
 | 
					          campo.set(str);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  ini.set_paragraph(defpar);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TRelation_application::edit_mask2ini() 
 | 
				
			||||||
 | 
					{            
 | 
				
			||||||
 | 
					  if (_ini.not_empty())
 | 
				
			||||||
 | 
					  {         
 | 
				
			||||||
 | 
					    TString head;
 | 
				
			||||||
 | 
					    head.format("%d", get_relation()->lfile().num());
 | 
				
			||||||
 | 
					    TConfig ini(_ini, head);
 | 
				
			||||||
 | 
					    mask2ini(*_mask, ini);
 | 
				
			||||||
 | 
					  }     
 | 
				
			||||||
 | 
					}      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TRelation_application::mask2ini(TMask& m, TConfig& ini)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TString defpar = ini.get_paragraph();
 | 
				
			||||||
 | 
					  TString str;
 | 
				
			||||||
 | 
					  for (int f = m.fields()-1; f >= 0; f--)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TMask_field& campo = m.fld(f);
 | 
				
			||||||
 | 
					    if (campo.field() && campo.shown())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      str = campo.get();
 | 
				
			||||||
 | 
					      campo.field()->write(ini, defpar, str);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -46,6 +46,11 @@ class TRelation_application : public TApplication
 | 
				
			|||||||
  // @cmember:(INTERNAL) Messaggio da passare all'utente per indicare che e' stata fatta la rinumerazione
 | 
					  // @cmember:(INTERNAL) Messaggio da passare all'utente per indicare che e' stata fatta la rinumerazione
 | 
				
			||||||
  TString _renum_message;
 | 
					  TString _renum_message;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  // @cmember:(INTERNAL) Nome del file .ini con la transazione da eseguire
 | 
				
			||||||
 | 
					  TString _ini;
 | 
				
			||||||
 | 
					  // @cmember:(INTERNAL) Azione della transazione corrente
 | 
				
			||||||
 | 
					  TString _transaction;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  // @cmember:(INTERNAL) Setta i campi fissati da <md TRelation_application::_fixed>
 | 
					  // @cmember:(INTERNAL) Setta i campi fissati da <md TRelation_application::_fixed>
 | 
				
			||||||
  bool filter();
 | 
					  bool filter();
 | 
				
			||||||
  // @cmember:(INTERNAL) Controlla se una chiave e' completa ed esiste su file
 | 
					  // @cmember:(INTERNAL) Controlla se una chiave e' completa ed esiste su file
 | 
				
			||||||
@ -185,6 +190,15 @@ protected:
 | 
				
			|||||||
  void set_search_field(short id) 
 | 
					  void set_search_field(short id) 
 | 
				
			||||||
  { _search_id = id;}  
 | 
					  { _search_id = id;}  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  bool parse_command_line();
 | 
				
			||||||
 | 
					  void ini2query_mask();
 | 
				
			||||||
 | 
					  void ini2insert_mask();
 | 
				
			||||||
 | 
					  void edit_mask2ini();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual void ini2mask(TConfig& ini, TMask& m, bool query);
 | 
				
			||||||
 | 
					  virtual void mask2ini(TMask& m, TConfig& ini);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// @access Public Member  
 | 
					// @access Public Member  
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // @cmember Ritorna la maschera corrente
 | 
					  // @cmember Ritorna la maschera corrente
 | 
				
			||||||
 | 
				
			|||||||
@ -1781,10 +1781,45 @@ void TFieldref::print_on(ostream& out) const
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char* TFieldref::read(const TRectype& rec) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
static TString buffer;
 | 
					static TString buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char* TFieldref::read(TConfig& ini, const char* defpar) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ini.set_paragraph(_id.empty() ? defpar : _id);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (!ini.exist(_name))
 | 
				
			||||||
 | 
					    return "";
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  buffer = ini.get(_name);
 | 
				
			||||||
 | 
					  if (_from > 0 || _to > 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int l = buffer.len();
 | 
				
			||||||
 | 
					    if (_to < l && _to > 0) buffer.cut(_to);
 | 
				
			||||||
 | 
					    if (_from > 0) buffer.ltrim(_from);
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return buffer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TFieldref::write(TConfig& ini, const char* defpar, const char* val) const
 | 
				
			||||||
 | 
					{              
 | 
				
			||||||
 | 
					  if ((val == NULL || *val == '\0') && !ini.exist(_name))
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const char* para = _id.empty() ? defpar : _id;
 | 
				
			||||||
 | 
					  if (_from > 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    buffer = ini.get(_name, para);
 | 
				
			||||||
 | 
					    buffer.overwrite(val, _from);
 | 
				
			||||||
 | 
					    ini.set(_name, buffer, para);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else  
 | 
				
			||||||
 | 
					  { 
 | 
				
			||||||
 | 
					    ini.set(_name, val, para);
 | 
				
			||||||
 | 
					  }  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char* TFieldref::read(const TRectype& rec) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
  if (_fileid >= CNF_GENERAL)
 | 
					  if (_fileid >= CNF_GENERAL)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TToken_string s(_name, '.');
 | 
					    TToken_string s(_name, '.');
 | 
				
			||||||
 | 
				
			|||||||
@ -536,14 +536,21 @@ public:
 | 
				
			|||||||
  { return _to; }
 | 
					  { return _to; }
 | 
				
			||||||
  // @cmember Ritorna la lunghezza del campo di <p TRectype>
 | 
					  // @cmember Ritorna la lunghezza del campo di <p TRectype>
 | 
				
			||||||
  int len(const TRectype &rec) const;
 | 
					  int len(const TRectype &rec) const;
 | 
				
			||||||
  // @cmember Cerca nella relazione il campo e ne ritorna il contenuto
 | 
					
 | 
				
			||||||
  const char* read(const TRelation&) const;
 | 
					 | 
				
			||||||
  // @cmember Cerca nel record il campo e ne ritorna il contenuto
 | 
					  // @cmember Cerca nel record il campo e ne ritorna il contenuto
 | 
				
			||||||
  const char* read(const TRectype&) const;
 | 
					  const char* read(const TRectype&) const;
 | 
				
			||||||
  // @cmember Cerca nella relazione il campo e vi scrive <p val>
 | 
					 | 
				
			||||||
  void write(const char* val, TRelation&) const;
 | 
					 | 
				
			||||||
  // @cmember Cerca nel record il campo e vi scrive <p val>
 | 
					  // @cmember Cerca nel record il campo e vi scrive <p val>
 | 
				
			||||||
  void write(const char* val, TRectype& rec) const;
 | 
					  void write(const char* val, TRectype& rec) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // @cmember Cerca nella relazione il campo e ne ritorna il contenuto
 | 
				
			||||||
 | 
					  const char* read(const TRelation&) const;
 | 
				
			||||||
 | 
					  // @cmember Cerca nella relazione il campo e vi scrive <p val>
 | 
				
			||||||
 | 
					  void write(const char* val, TRelation&) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // @cmember Cerca nel file .ini il campo e ne ritorna il valore
 | 
				
			||||||
 | 
					  const char* read(TConfig& ini, const char* defpar) const;
 | 
				
			||||||
 | 
					  // @cmember Cerca nel file .ini il campo e vi scrive <p val>
 | 
				
			||||||
 | 
					  void write(TConfig& ini, const char* defpar, const char* val) const;
 | 
				
			||||||
};                          
 | 
					};                          
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int name2log(const char* name);
 | 
					int name2log(const char* name);
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,7 @@
 | 
				
			|||||||
#define  RMV_ROWTYPE     "ROWTYPE"
 | 
					#define  RMV_ROWTYPE     "ROWTYPE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// To be removed soon
 | 
					// To be removed soon
 | 
				
			||||||
 | 
					#define  RMV_NUMGIO      "NUMGIO"
 | 
				
			||||||
#define  RMV_RCONTR      "RCONTR"
 | 
					#define  RMV_RCONTR      "RCONTR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -1349,7 +1349,7 @@ void TToken_string::add(
 | 
				
			|||||||
  // @syntax void add(int n, int pos = -1);
 | 
					  // @syntax void add(int n, int pos = -1);
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // @comm Permette, a seconda del parametro passato, di aggiungere alla Token
 | 
					  // @comm Permette, a seconda del parametro passato, di aggiungere alla Token
 | 
				
			||||||
  //       string un nuovo elemnto gi… completo del carattere di separazione
 | 
					  //       string un nuovo elemnto gia' completo del carattere di separazione
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (s == NULL || *s == '\0') s = " ";
 | 
					  if (s == NULL || *s == '\0') s = " ";
 | 
				
			||||||
  if (pos < 0)
 | 
					  if (pos < 0)
 | 
				
			||||||
@ -1484,6 +1484,17 @@ int TString_array::add(const TToken_string& s, int n)
 | 
				
			|||||||
  return n;
 | 
					  return n;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const TString_array& TString_array::operator=(const TString_array& a)
 | 
				
			||||||
 | 
					{                      
 | 
				
			||||||
 | 
					  destroy();
 | 
				
			||||||
 | 
					  for (int i = a.last(); i >= 0; i = a.pred(i))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TToken_string& s = a.row(i);
 | 
				
			||||||
 | 
					    add(s, i);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return a;  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// @doc EXTERNAL
 | 
					// @doc EXTERNAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// @mfunc Cerca una stringa nell'array
 | 
					// @mfunc Cerca una stringa nell'array
 | 
				
			||||||
 | 
				
			|||||||
@ -560,7 +560,8 @@ public:
 | 
				
			|||||||
  // @cmember Restituisce il puntatore alla stringa n dell'array (NULL se non esiste)
 | 
					  // @cmember Restituisce il puntatore alla stringa n dell'array (NULL se non esiste)
 | 
				
			||||||
  TToken_string* rowptr(int n)
 | 
					  TToken_string* rowptr(int n)
 | 
				
			||||||
  { return (TToken_string*)objptr(n); }
 | 
					  { return (TToken_string*)objptr(n); }
 | 
				
			||||||
 | 
					  // @cmember assegnamento di un array
 | 
				
			||||||
 | 
					  const TString_array& operator=(const TString_array& a);
 | 
				
			||||||
  // @cmember Aggiunge una Token string all'array (chiama <mf TArray::add>)
 | 
					  // @cmember Aggiunge una Token string all'array (chiama <mf TArray::add>)
 | 
				
			||||||
  int add(TToken_string* s, int n = -1)
 | 
					  int add(TToken_string* s, int n = -1)
 | 
				
			||||||
  { return TArray::add(s, n); }
 | 
					  { return TArray::add(s, n); }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user