Patch level : no patch per roberto

Files correlati     : si0.exe
Ricompilazione Demo : [ ]
Commento            :
MOdulo personalizzazioni Ass. Agricoltori di Ravenna


git-svn-id: svn://10.65.10.50/trunk@9968 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2001-12-17 22:59:39 +00:00
parent 7a6ba70158
commit d6ca44f622
14 changed files with 2500 additions and 0 deletions

18
si/art.ini Executable file
View File

@ -0,0 +1,18 @@
[MAIN]
FIELDSEP =
RECORDSEP =
RECORDSIZE =
SKIPLINES =
TYPEFIELD = -1
[RECORD]
FIELD(0) = CODART
FIELD(1) = DESCR
LENGTH(0) = 10
LENGTH(1) = 50
NAME(0) = Codice Articolo
NAME(1) = Descrizione
POSITION(0) = 0
POSITION(1) = 10
USE = 47

47
si/cli.ini Executable file
View File

@ -0,0 +1,47 @@
[MAIN]
FIELDSEP =
RECORDSEP =
RECORDSIZE = 0
SKIPLINES = 0
TYPEFIELD = -1
[RECORD]
FIELD(0) =
FIELD(1) = CODCF
FIELD(2) = RAGSOC
FIELD(3) = INDCF
FIELD(4) = CAPCF
FIELD(5) =
FIELD(6) = COFI
FIELD(7) = PAIV
FIELD(8) = LOCALITACF
LENGTH(0) = 1
LENGTH(1) = 6
LENGTH(2) = 50
LENGTH(3) = 51
LENGTH(4) = 5
LENGTH(5) = 2
LENGTH(6) = 16
LENGTH(7) = 11
LENGTH(8) = 20
NAME(0) =
NAME(1) = Codice
NAME(2) = Ragione sociale
NAME(3) = Indirizzo
NAME(4) = CAP
NAME(5) =
NAME(6) = Codice fiscale
NAME(7) = Partita IVA
NAME(8) = Loacalita'
POSITION(0) = 0
POSITION(1) = 1
POSITION(2) = 7
POSITION(3) = 57
POSITION(4) = 108
POSITION(5) = 113
POSITION(6) = 115
POSITION(7) = 131
POSITION(8) = 142
POSITION(9) = 0
USE = 20

42
si/pag.ini Executable file
View File

@ -0,0 +1,42 @@
[MAIN]
FIELDSEP =
RECORDSEP =
RECORDSIZE =
SKIPLINES =
TYPEFIELD = -1
[RECORD]
FIELD(0) =
FIELD(1) = NDOC
FIELD(2) = CODART
FIELD(3) = QTA
FIELD(4) = PREZZO
FIELD(5) =
FIELD(6) =
FIELD(7) =
LENGTH(0) = 1
LENGTH(1) = 6
LENGTH(2) = 10
LENGTH(3) = 4
LENGTH(4) = 13
LENGTH(5) = 2
LENGTH(6) = 1
LENGTH(7) = 1
NAME(0) =
NAME(1) = N. documento
NAME(2) = Codice articolo, codice spesa o codice prestazione
NAME(3) = Quantita'
NAME(4) = Prezzo o valore
NAME(5) =
NAME(6) =
NAME(7) =
POSITION(0) = 0
POSITION(1) = 1
POSITION(2) = 7
POSITION(3) = 17
POSITION(4) = 21
POSITION(5) = 34
POSITION(6) = 36
POSITION(7) = 37
USE = 34

24
si/si0.cpp Executable file
View File

@ -0,0 +1,24 @@
#include <xvt.h>
#include "si0.h"
int main( int argc, char** argv )
{
int rt = -1;
const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1;
switch (r)
{
case 2:
rt = si0200( argc, argv ); // Stampe varie
break;
case 3:
rt = si0300( argc, argv ); // per realplast
break;
default:
rt = si0100( argc, argv ); // Ricezione dati
break;
}
exit(rt);
return rt;
}

9
si/si0.h Executable file
View File

@ -0,0 +1,9 @@
#ifndef __SI0_H
#define __SI0_H
int si0100(int argc, char* argv[]); // Ricezione dati
int si0200(int argc, char* argv[]); // Stampe varie
int si0300(int argc, char* argv[]); // temp
#endif // __SI0_H

3
si/si0.url Executable file
View File

@ -0,0 +1,3 @@
#include <default.url>
#include <mainmenu.url>

398
si/si0100.cpp Executable file
View File

@ -0,0 +1,398 @@
#include <applicat.h>
#include <filetext.h>
#include <form.h>
#include <mask.h>
#include <relation.h>
#include <tabutil.h>
#include <printer.h>
#include <progind.h>
#include <utility.h>
#include <lffiles.h>
#include "..\ve\velib.h"
#include "si0100a.h"
/////////////////////////////////////////////////////
// Classe TPag_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TPag_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TPag_file(const TString& file_name, const TString& config_name);
virtual ~TPag_file() { }
};
// gestione dei messaggi estesi nei campi
void TPag_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TPag_file::TPag_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
/////////////////////////////////////////////////////
// Classe TCli_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TCli_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TCli_file(const TString& file_name, const TString& config_name);
virtual ~TCli_file() { }
};
// gestione dei messaggi estesi nei campi
void TCli_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TCli_file::TCli_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
/////////////////////////////////////////////////////
// Classe TArt_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TArt_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TArt_file(const TString& file_name, const TString& config_name);
virtual ~TArt_file() { }
};
// gestione dei messaggi estesi nei campi
void TArt_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TArt_file::TArt_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
class TImport: public TSkeleton_application
{
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void) ;
void transfer(void);
bool check_seq(TConfig & c);
bool localita2comune(const TString & cap, const TString & localita, TString & codice);
void update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli);
void update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart);
void update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
const char * tiporiga, const char * codiva);
virtual const char * extra_modules() const { return "BA"; }
public:
TImport() {}
virtual ~TImport() {}
};
// restituisce un riferimento all' applicazione
inline TImport& app() { return (TImport&) main_app();}
// creazione dell'applicazione
bool TImport::create()
{
open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART,
LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
return TSkeleton_application::create();
}
// distruzione dell'applicazione
bool TImport::destroy()
{
return TSkeleton_application::destroy();
}
// carica la maschera
void TImport::main_loop()
{
transfer();
}
// trasferimento dati su file per ct bo
void TImport::transfer()
{
TMask msk("si0100a");
TConfig c(CONFIG_STUDIO, "sipag");
msk.set(F_FILESEQ, c.get("FileSeq"));
msk.set(F_FILEPAG, c.get("FilePag"));
msk.set(F_FILECLI, c.get("FileCli"));
msk.set(F_FILEART, c.get("FileArt"));
while (msk.run() != K_QUIT)
{
c.set("FileSeq", msk.get(F_FILESEQ));
c.set("FilePag", msk.get(F_FILEPAG));
c.set("FileCli", msk.get(F_FILECLI));
c.set("FileArt", msk.get(F_FILEART));
if (check_seq(c))
{
TRecord_text rec;
TProgind p(3L, "Trasferimento da AS/400");
TFilename clisrc(msk.get(F_FILECLI));
if (clisrc.exist())
{
TCli_file clifile(clisrc, "cli.ini");
TLocalisamfile clienti(LF_CLIFO);
clifile.open(clisrc,'r');
while (clifile.read(rec) == NOERR)
update_cli(clifile, rec, clienti);
clifile.close();
}
p.addstatus(1L);
TFilename artsrc(msk.get(F_FILEART));
if (artsrc.exist())
{
TArt_file artfile(artsrc, "art.ini");
TLocalisamfile articoli(LF_ANAMAG);
TLocalisamfile umart(LF_UMART);
artfile.open(artsrc,'r');
while (artfile.read(rec) == NOERR)
update_art(artfile, rec, articoli, umart);
artfile.close();
}
p.addstatus(1L);
TFilename pagsrc(msk.get(F_FILEPAG));
if (pagsrc.exist())
{
TPag_file pagfile(pagsrc, "pag.ini");
TDocumento doc;
TString codnum(c.get("CodNum"));
TString tipodoc(c.get("TipoDoc"));
TString tiporiga(c.get("TipoRiga"));
TString codiva(c.get("CodIva"));
pagfile.open(pagsrc,'r');
while (pagfile.read(rec) == NOERR)
update_doc(pagfile, rec, doc, codnum, tipodoc, tiporiga, codiva);
pagfile.close();
}
p.addstatus(1L);
message_box("Operazione terminata");
}
}
}
//inizializza il cursore
bool TImport::check_seq(TConfig & c)
{
TScanner seq(c.get("FileSeq"));
const int expected_seq = c.get_int("Seq") + 1;
const int seqnum = seq.integer();
if (expected_seq != seqnum)
return error_box("Il numero di sequenza trovato %d\nnon coincide con quello atteso %d", seqnum, expected_seq);
c.set("Seq", seqnum);
return TRUE;
}
int si0100(int argc, char* argv[])
{
TImport a ;
a.run(argc, argv, "Ricezione da AS/400");
return 0;
}
bool TImport::localita2comune(const TString & caporig, const TString & localita, TString & codice)
{
TLocalisamfile comuni (LF_COMUNI);
TString16 cap = caporig;
bool found = FALSE;
if (cap.mid(2,1) == "1")
{
cap = cap.left(3);
cap << "00";
}
comuni.setkey(3);
comuni.zero();
comuni.put("CAPCOM", cap);
TRectype com (comuni.curr());
codice = "";
for (comuni.read(_isgteq); !comuni.eof() && !found; comuni.next())
{
if (comuni.curr() != com)
break;
found = localita.left(3) == comuni.get("DENCOM").left(3);
if (found)
codice = comuni.get("COM");
}
return found;
}
void TImport::update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli)
{
cli.zero();
cli.put("TIPOCF", "C");
cli.put("CODCF", in.get_field(r, 1));
bool newrec = cli.read() != NOERR;
if (newrec)
{
cli.zero();
cli.put("TIPOCF", "C");
cli.put("CODCF", in.get_field(r, 1));
}
cli.put("RAGSOC", in.get_field(r, 2));
TString80 ind(in.get_field(r, 3));
TString80 loc;
int p = ind.find('-');
if (p > 0)
{
loc = ind.mid(p+1);
loc.strip("-");
loc.trim();
ind.cut(p);
ind.trim();
}
p = ind.rfind(',');
if (p > 0)
{
cli.put("INDCF", ind.left(p));
cli.put("CIVCF", ind.mid(p+1));
}
else
cli.put("INDCF", ind.left(35));
TString16 cap(in.get_field(r, 4));
cli.put("CAPCF", cap);
cli.put("COFI", in.get_field(r, 6));
cli.put("PAIV", in.get_field(r, 7));
TString80 localita(in.get_field(r, 8));
TString16 codice;
if (localita2comune(cap, localita, codice) == TRUE)
localita = "";
localita.insert(loc);
cli.put("COMCF", codice);
cli.put("LOCALITACF", localita);
if (newrec)
cli.write();
else
cli.rewrite();
}
void TImport::update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart)
{
art.zero();
art.put("CODART", in.get_field(r, 0));
bool newrec = art.read() != NOERR;
if (newrec)
{
art.zero();
art.put("CODART", in.get_field(r, 0));
}
art.put("DESCR", in.get_field(r, 1));
if (newrec)
{
art.write();
umart.zero();
umart.put("CODART", in.get_field(r, 0));
umart.put("NRIGA", "1");
umart.put("UM", "N.");
umart.put("FC", "1.00");
umart.write();
}
else
art.rewrite();
}
void TImport::update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
const char * tiporiga, const char * codiva)
{
doc.zero();
const bool newdoc = doc.read('D', TDate(TODAY).year(), codnum, atol(in.get_field(r, 1))) != NOERR;
const TDate oggi(TODAY);
if (newdoc)
{
doc.zero();
TDocumento::set_key(doc, 'D', oggi.year(), codnum, atol(in.get_field(r, 1)));
doc.set_tipo(tipodoc);
doc.put("TIPOCF", "C");
doc.put("CODCF", in.get_field(r, 1));
doc.put("DATADOC", oggi);
doc.put("DATACONS", oggi);
}
TRiga_documento & riga = doc.new_row(tiporiga);
const TString & cod = in.get_field(r, 2);
riga.put("CODART", cod);
riga.put("CODARTMAG", cod);
TString80 descr = cache().get(LF_ANAMAG, cod, "DESCR");
riga.put("DESCR", descr);
riga.put("CHECKED", "X");
doc.put("DATACONS", oggi);
real qta(in.get_field(r, 3));
if (qta == ZERO)
qta = 1.00;
riga.put("UMQTA", "N.");
riga.put("QTA", qta);
const real prezzo(in.get_field(r, 4));
riga.put("PREZZO", prezzo);
riga.put("CODIVA", codiva);
if (newdoc)
doc.write();
else
doc.rewrite();
}

5
si/si0100a.h Executable file
View File

@ -0,0 +1,5 @@
#define F_FILESEQ 101
#define F_FILEPAG 102
#define F_FILECLI 103
#define F_FILEART 104

61
si/si0100a.uml Executable file
View File

@ -0,0 +1,61 @@
#include "si0100a.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Ricezione dati da AS/400" -1 -1 78 20
GROUPBOX DLG_NULL 77 11
BEGIN
PROMPT 1 1 "Selezioni per la ricezione"
END
STRING F_FILESEQ 52
BEGIN
PROMPT 2 3 "Nome file sequenza "
CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
WARNING "E' necessario specificare un nome di file"
END
STRING F_FILEPAG 52
BEGIN
PROMPT 2 5 "Nome file pagamenti "
CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
WARNING "E' necessario specificare un nome di file"
END
STRING F_FILECLI 52
BEGIN
PROMPT 2 7 "Nome file clienti "
CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
WARNING "E' necessario specificare un nome di file"
END
STRING F_FILEART 52
BEGIN
PROMPT 2 9 "Nome file servizi "
CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
WARNING "E' necessario specificare un nome di file"
END
ENDPAGE
ENDMASK

1543
si/si0200.cpp Executable file

File diff suppressed because it is too large Load Diff

29
si/si0200.h Executable file
View File

@ -0,0 +1,29 @@
#define F_CODNUM 101
#define F_ANNO 102
#define F_PROVV 103
#define F_NCOPIE 104
#define F_DATA_O_NUM 105
#define F_DA_NDOC 106
#define F_A_NDOC 107
#define F_DA_DATADOC 108
#define F_A_DATADOC 109
#define F_TIPOCF 110
#define F_CODFR 111
#define F_CODTO 112
#define F_SELECTED 113
#define BUT_SEL 114
#define BUT_ANN 115
#define F_SELVAL 116
#define F_VALUTA 117
#define F_DETTAGLIO 118
#define F_DESCR_CLI 119
#define F_SHEETNUMS 201
#define GROUP_PRICES 29
#define GROUP_QTA 30
#define GROUP_IMPORTI 31

6
si/si0200a.h Executable file
View File

@ -0,0 +1,6 @@
// trasferimento dati a CT Bologna
// definizione campi per maschera di selezione
//#define F_TRASFERIMENTO 101 // trasferimento totale o parziale
#define F_DATAINI 101 // data inizio modifiche per trasferimento parziale
#define F_FILENAME 102 // nome del file dove scaricare i dati

237
si/si0200a.uml Executable file
View File

@ -0,0 +1,237 @@
TO "" 0 -3 0 2
ST 30 70 50
BE
PR 2 -3 "Profilo "
PSELECT
GR 1
EN
BU 24 10 2
BE
PR -12 -1 "~Stampa"
ME EXIT,13
EN
BU 2 10 2
BE
PR -22 -1 ""
EN
EN
PA "Stampe Pagamenti" -1 2 80 20
NU 102 4 0
BE
PR 2 1 "Anno "
FLAG "P"
CH REQUIRED
EN
LI 103 12
BE
PR 25 1 "Tipo numerazione "
IT "D|Definitiva"
IT "P|Provvisoria"
FLAG "P"
EN
SPREADSHEET 201 78 4
BE
PR 1 2 ""
IT "Cod. num."
IT "Stato 1"
IT "Stato 2"
IT "Stato 3"
IT "Stato 4"
IT "Stato 5"
IT "Stato 6"
EN
LI 110 1 9
BE
PR 2 7 "Tipo "
IT "C|Clienti"
IT "F|Fornitori"
EN
NU 111 6
BE
PR 68 8 ""
FL "B"
EN
NU 112 6
BE
PR 68 9 ""
FL "B"
EN
ST 119 50 50
BE
PR 2 8 "Dal Cliente "
US 20 KE 2
IN TIPOCF 110
IN RAGSOC 119
DI "Ragione Sociale@50" RAGSOC
DI "Codice " CODCF
OU 111 CODCF
OU 119 RAGSOC
EN
ST 120 50 50
BE
PR 2 9 "Al Cliente "
US 20 KE 2
IN TIPOCF 110
IN RAGSOC 120
DI "Ragione Sociale@50" RAGSOC
DI "Codice " CODCF
OU 112 CODCF
OU 120 RAGSOC
EN
ST 121 20
BE
PR 2 10 "Dal Servizio "
US 47 KE 1
IN CODART 121
DI "Codice " CODART
DI "Descrizione@50" DESCR
OU 121 CODART
EN
ST 122 20
BE
PR 2 11 "Al Servizio "
US 47 KE 1
IN CODART 122
DI "Codice " CODART
DI "Descrizione@50" DESCR
OU 122 CODART
EN
DA 108
BE
PR 2 12 "Dalla Data "
EN
DA 109
BE
PR 27 12 "Alla Data "
EN
ST 113 5
BE
PR 25 16 "Scelte n. "
FL "DR"
EN
BU 114 10 2
BE
PR 45 16 "~Selezione"
PI 115
EN
BU 115 10
BE
PR 45 18 "A~zzera"
EN
RA 116 20
BE
PR 2 15 "Stampa documenti"
IT "1|Valuta ditta"
ME CLEAR,117
IT "2|In valuta"
ME ENABLE,117
IT "3|Tutti"
ME CLEAR,117
EN
ST 117 3
BE
PR 25 17 "Cod. val. "
FL "U"
US %VAL
IN CODTAB 117
DI "Codice" CODTAB
DI "Descrizione@50" S0
OU 117 CODTAB
CH REQUIRED
EN
BO 118
BE
PR 25 18 "Dettaglio righe"
EN
EN
ENDMASK
PA "" -1 -1 75 10
ST 101 4
BE
PR 1 1 "Codice numerazione "
FLAG "U"
US %NUM
IN CODTAB 101
DI "Cod. Num." CODTAB
DI "Descrizione@50" S0
OU 101 CODTAB
CH NORMAL
EN
ST 102 1
BE
PR 1 3 "Stato 1 "
US %STD
IN CODTAB 102
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 102 CODTAB
CH NORMAL
EN
ST 103 1
BE
PR 1 4 "Stato 2 "
US %STD
IN CODTAB 103
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 103 CODTAB
CH NORMAL
EN
ST 104 1
BE
PR 1 5 "Stato 3 "
US %STD
IN CODTAB 104
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 104 CODTAB
CH NORMAL
EN
ST 105 1
BE
PR 1 6 "Stato 4 "
US %STD
IN CODTAB 105
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 105 CODTAB
CH NORMAL
EN
ST 106 1
BE
PR 1 7 "Stato 5 "
US %STD
IN CODTAB 106
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 106 CODTAB
CH NORMAL
EN
ST 107 1
BE
PR 1 8 "Stato 6 "
US %STD
IN CODTAB 107
DI "Stato" CODTAB
DI "Descrizione@50" S0
OU 107 CODTAB
CH NORMAL
EN
BU 1 9 2
BE
PR -12 -1 ""
EN
BU 2 9 2
BE
PR -22 -1 ""
EN
EN
ENDMASK

78
si/si0300.cpp Executable file
View File

@ -0,0 +1,78 @@
//////////////////////////////////////////////////////////////
// Stampa documenti
//////////////////////////////////////////////////////////////
#include <applicat.h>
#include <config.h>
#include <defmask.h>
#include <form.h>
#include <msksheet.h>
#include <printer.h>
#include <progind.h>
#include <sheet.h>
#include "si0200.h"
class TAggart_application: public TSkeleton_application
{
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
virtual const char * extra_modules() const { return "BA"; }
public:
TAggart_application() {};
virtual ~TAggart_application() {};
};
inline TAggart_application& app() { return (TAggart_application&) main_app(); }
bool TAggart_application::create()
{
return TSkeleton_application::create();
}
bool TAggart_application::destroy()
{
return TApplication::destroy();
}
void TAggart_application::main_loop()
{
TRelation * r = new TRelation(LF_ANAMAG);
TCursor c(r);
const long items = c.items();
for (c = 0L; c.pos() < items; ++c)
{
TRectype & rec = c.curr();
TString descr = rec.get("DESCRAGG");
descr.trim();
if (descr.not_empty())
{
const int p= descr.find("ST/");
if (p > 0)
{
TString stampo(descr.mid(p+3));
rec.put("USER2", stampo);
descr.cut(p);
}
else
rec.put("USER2", "");
rec.put("USER1", descr);
rec.put("DESCRAGG", "");
rec.rewrite(r->lfile());
}
}
}
// Do all the work!
int si0300(int argc, char* argv[])
{
TAggart_application a;
a.run(argc, argv, "modifica descr");
return (0);
}