campo-sirio/m770/771230.cpp
nik 66c50f0249 Stampa base a parte
git-svn-id: svn://10.65.10.50/trunk@3568 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-09-12 10:39:42 +00:00

930 lines
23 KiB
C++
Executable File

// 771230.cpp - Quadri C, D, D1, E, E1, E2
#include <relapp.h>
#include <config.h>
#include <msksheet.h>
#include <sort.h>
#include <tabutil.h>
#include <progind.h>
#include "caus77.h"
#include "77lib.h"
#include "scperc.h"
#include "rpag.h"
#include "perc.h"
#include "prospe1.h"
#include "defmask.h"
#include "771230a.h"
#include "774200.h"
class TQuadroC_E2 : public TRelation_application
{
private:
TString _quadro; // Codice del quadro in gestione
bool _registra; // Se TRUE fa i riporti
struct righe_pag
{
char tipoa;
char codan[6];
char codcau[3];
char perc[7]; //3 + 2decimali + la virgola
real somme;
real impo;
real rite;
real comp;
bool acim;
bool bInps;
real inps;
};
righe_pag* _rig;
TRelation* _rel;
TMask* _msk[2];
TSort* _sort;
long _codanagr;
char _tipoa, _tipoq;
int _nproga;
int _mode;
int _anno_dic; // anno dichiarazione
TLocalisamfile* _per, *_scper, *_rpag, *_qd;
TTable* _ca7;
TRiporti _rip;
long _codditta;
int _file;
private:
static bool nprog_handler (TMask_field& f, KEY key);
static bool codanagr_handler(TMask_field& f, KEY key);
static bool genera_handler (TMask_field& f, KEY key);
static bool codditta_hnd (TMask_field& f, KEY key);
static bool setta_nprog (TMask_field& f);
static bool imponibile_hnd (TMask_field& f, KEY key);
bool QuadroC() const { return _tipoq == 'C'; }
bool QuadroD() const { return _tipoq == 'D'; }
bool QuadroD1() const { return _tipoq == '1'; }
bool QuadroE() const { return _tipoq == 'E'; }
bool QuadroE1() const { return _tipoq == '2'; }
bool QuadroE2() const { return _tipoq == '3'; }
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual int rewrite(const TMask& m);
virtual int write (const TMask& m);
virtual bool remove();
virtual TRelation* get_relation() const { return _rel; }
virtual TMask* get_mask(int mode);
virtual bool changing_mask(int mode);
virtual void init_query_mode (TMask&);
virtual void init_query_insert_mode (TMask&);
virtual void on_config_change();
TMask* load_mask(int n);
bool generazione();
bool azzera_quadro();
void riempi_record(char,long,int,const real&,const real&,
const real&,const real&,const real&,bool,
const real& inps_perc, bool bCinps=FALSE);
void init_sort();
void leggi_sort(TProgind&);
TRectype& look_causali(int c);
int anno_dic() const { return _anno_dic; }
bool scrivi_dati_per(TRectype& rec);
void genera_prospetto(int,real&,real&,real&);
public:
TQuadroC_E2(char tipo);
virtual ~TQuadroC_E2() {};
};
inline TQuadroC_E2& app() { return (TQuadroC_E2&) main_app(); }
TQuadroC_E2::TQuadroC_E2(char tipo): _rel(NULL), _mode(0), _tipoq(tipo)
{
memset(_msk, 0, sizeof(_msk));
}
bool TQuadroC_E2::changing_mask(int mode)
{
if (mode == MODE_QUERY)
return _mode != MODE_QUERY;
else
return TRUE;
}
TMask* TQuadroC_E2::get_mask(int mode)
{
const int m = (mode == MODE_QUERY) ? 0 : 1;
_mode = mode;
return load_mask(m);
}
TMask* TQuadroC_E2::load_mask(int n)
{
if (_msk[n] != NULL)
return _msk[n];
TFilename name("771230");
if (n == 0)
{
switch (_tipoq)
{
case 'C':
name << 'd';
break;
case 'D':
name << 'a';
break;
case '1':
name << 'e';
break;
case 'E' :
name << 'g';
break;
case '2' :
name << 'i';
break;
case '3':
name = "77qe2a";
break;
default:
break;
}
}
else
{
switch (_tipoq)
{
case 'C':
name << 'f';
break;
case 'D':
name << 'b';
break;
case '1':
name << 'c';
break;
case 'E':
name << 'h';
break;
case '2' :
name << 'l';
break;
case '3':
name = "77qe2b";
break;
default:
break;
}
}
TMask* m = new TMask(name);
switch (n)
{
case 0:
if (m)
{
m->set_handler(F_CODDITTA, codditta_hnd);
m->set_handler(F_NPROG, nprog_handler);
m->set_handler(F_CODANAGRCOM, codanagr_handler);
m->set_handler(F_CODANAGRPERC, codanagr_handler);
if (_quadro != "E2")
m->set_handler(F_GENERA, genera_handler);
}
break;
case 1:
if (m)
{
m->set_handler(F_IMPONIBILE, imponibile_hnd);
m->set_handler(F_PERC, imponibile_hnd);
}
break;
default:
break;
}
m->disable(DLG_FINDREC);
return _msk[n] = m;
}
// Ricerca e output dell'ultimo nprog del percipiente scelto
bool TQuadroC_E2::setta_nprog(TMask_field& f)
{
long nprog = 0L;
const char tipoa = f.mask().get(F_TIPOA)[0];
const long codanagr = atol(f.get());
const long codditta = get_firm_770();
TLocalisamfile quad(app()._file);
quad.zero();
quad.put("CODDITTA", codditta);
quad.put("TIPOA", tipoa);
quad.put("CODANAGR", codanagr);
TRectype rec(quad.curr());
quad.read();
if (quad.curr() > rec)
{
f.mask().set(F_NPROG, nprog+1);
return TRUE;
}
for ( ; !quad.eof(); quad.next())
{
if (quad.curr() > rec) break;
nprog = quad.get_long("NPROG");
}
//app()._last_scheda = nprog;
f.mask().set(F_NPROG, nprog+1);
return TRUE;
}
bool TQuadroC_E2::codditta_hnd(TMask_field& f, KEY k)
{
if (k == K_TAB && !f.mask().is_running())
{
TString16 codditta; codditta << app()._codditta;
if (codditta != "0")
{
f.set(codditta);
f.check();
}
}
return TRUE;
}
bool TQuadroC_E2::imponibile_hnd(TMask_field& f, KEY k)
{
if (k == K_TAB)
{
if (f.dlg() == F_PERC)
{
real perc (f.get());
if (perc == ZERO)
{
int causale = f.mask().get_int(F_CODCAUS);
TRectype& cau = app().look_causali(causale);
real aliquota = cau.get_real(rPERC_RAC);
f.mask().set(F_PERC, aliquota.string());
}
}
real imponibile (f.mask().get(F_IMPONIBILE));
real aliquota (f.mask().get(F_PERC));
real importo = ZERO;
importo = imponibile * (aliquota/100);
f.mask().set(app()._tipoq == 'C' ? F_RITENUTE : F_IMPORTO, importo.string());
}
return TRUE;
}
void TQuadroC_E2::init_sort()
{
_rig = new righe_pag;
_sort = new TSort(sizeof(righe_pag));
_sort->addsortkey ((char*)&(_rig->tipoa) - (char*)&(_rig->tipoa), 1);
_sort->addsortkey ((char*)&(_rig->codan) - (char*)&(_rig->tipoa), 5);
_sort->addsortkey ((char*)&(_rig->codcau) - (char*)&(_rig->tipoa), 2);
_sort->addsortkey ((char*)&(_rig->perc) - (char*)&(_rig->tipoa), 6);
_sort->init();
}
void TQuadroC_E2::riempi_record(char t,long ca,int cc,const real& p,
const real& so,const real& im,
const real& ri,const real& co,bool acim,
const real& inps, bool bInps)
{
_rig->tipoa = t;
sprintf(_rig->codan, "%5ld", ca);
sprintf(_rig->codcau, "%02d", cc);
// 22.5.96 Cambiato il formato @@@,@@ con @.@@@,@@
// Ci vuole anche il punto delle migliaia se real::string() sbaglia
// a calcolare il numero di decimali.
// TString16 pp(p.string("@.@@@,@@"));
double ppd = atof(p.string());
sprintf(_rig->perc, "%.2f", ppd);
_rig->somme = so;
_rig->impo = im;
_rig->rite = ri;
_rig->comp = co;
_rig->acim = acim;
_rig->inps = inps;
_rig->bInps = bInps;
_sort->sort((const char*)_rig);
}
bool TQuadroC_E2::genera_handler(TMask_field& f , KEY k)
{
if (k == K_SPACE)
{
app().generazione();
app()._registra = TRUE; // Genera i riporti alla fine
}
return TRUE;
}
TRectype& TQuadroC_E2::look_causali(int codc)
{
TString16 dep;
_ca7->zero();
dep.format("%02d", codc);
_ca7->put("CODTAB", dep);
_ca7->read();
if (_ca7->bad())
_ca7->zero();
return _ca7->curr();
}
bool TQuadroC_E2::generazione()
{
if (!yesno_box("Conferma la generazione ?"))
return FALSE;
init_sort();
TToken_string exp;
exp.add("CODDITTA=CODDITTA");
exp.add("TIPOA=TIPOA");
exp.add("CODANAGR=CODANAGR");
exp.add("NPROG=NPROG");
TRelation rel (LF_SCPERC);
rel.add(LF_RPAG, exp, 1);
TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
TCursor cur (&rel,filt,1);
azzera_quadro();
TLocalisamfile& scperc = rel.lfile();
TLocalisamfile& rpag = rel.lfile(LF_RPAG);
cur = 0L;
const long nitems = cur.items();
TProgind p(nitems ? nitems : 1, "Generazione in corso...", FALSE, TRUE, 70);
long codan, codditta;
char tipoa;
int codcaus, nprog;
TString16 qua;
TDate datapag;
real perc=ZERO,spesa=ZERO,impo=ZERO,rite=ZERO,comp=ZERO,inps=ZERO;
for (; cur.pos() < nitems; ++cur)
{
p.addstatus(1);
codditta = scperc.get_long(SPR_CODDITTA);
tipoa = scperc.get(SPR_TIPOA)[0];
codan = scperc.get_long(SPR_CODANAGR);
codcaus = scperc.get_int(SPR_CODCAUS);
nprog = scperc.get_int(SPR_NPROG);
TRectype cau = look_causali(codcaus);
TString16 qua = cau.get(bCODICE_QUADRO);
bool acc_imp = cau.get_bool(bSOMME_ASSOG_RAC);
bool bContrInps = cau.get_bool(bCONTRIBUTO_INPS);
if (_tipoq == 'D' && qua != "D") continue;
if (_tipoq == 'C' && qua != "C") continue;
if (_tipoq == '1' && qua != "D1") continue;
if (_tipoq == 'E' && qua != "E") continue;
if (_tipoq == '2' && qua != "E1") continue;
if (cur.is_first_match(LF_RPAG))
{
TRecnotype nrec = rpag.recno();
rpag.zero();
rpag.setkey(1);
rpag.put(PAG_CODDITTA, (long)codditta);
rpag.put(PAG_TIPOA, tipoa);
rpag.put(PAG_CODANAGR, (long)codan);
rpag.put(PAG_NPROG, nprog);
TRectype recc (rpag.curr());
for (rpag.read(_isgteq); !rpag.eof() ;rpag.next())
{
TRectype rec (rpag.curr());
if (rec > recc) break;
datapag = rpag.get(PAG_DATAPAG);
if (datapag.year() != _anno_dic)
continue;
//codtrib = cau.get_int("I0");
perc = rpag.get_real(PAG_PERC);
spesa = rpag.get_real(PAG_SPESA);
rite = rpag.get_real(PAG_RITENUTA);
impo = rpag.get_real(PAG_IMPONIBILE);
comp = rpag.get_real(PAG_COMPENSO);
inps = rpag.get_real(PAG_INPSPERC);
if (perc==ZERO && comp==ZERO && rite==ZERO && impo==ZERO
&& spesa==ZERO)
continue;
riempi_record(tipoa,codan,codcaus,perc,spesa,impo,rite,comp,acc_imp,inps,bContrInps);
}
rpag.readat(nrec);
}
}
_sort->endsort();
leggi_sort(p);
delete _rig;
delete _sort;
return TRUE;
}
bool TQuadroC_E2::azzera_quadro()
{
const char* title;
if (_tipoq == 'C')
title = "Azzeramento quadro C";
else
if (_tipoq == 'D')
title = "Azzeramento quadro D";
else
if (_tipoq == '1')
title = "Azzeramento quadro D1";
else
if (_tipoq == 'E')
title = "Azzeramento quadro E";
else
title = "Azzeramento quadro E1";
// Tutto cio' solo per contare gli items e far andare correttamente
// il "termometro" (sic..)
TRelation rel (_file);
TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
TCursor cur (&rel,filt,1);
// TLocalisamfile& quadro = rel.lfile();
TLocalisamfile quadro(_file);
cur = 0L;
const long nitems = cur.items();
TProgind prog(nitems, title, FALSE, TRUE);
quadro.zero();
quadro.put("CODDITTA", (long)get_firm_770());
TRectype dep(quadro.curr());
for (quadro.read(); !quadro.eof(); quadro.next())
{
prog.addstatus(1);
if (quadro.curr() > dep) break;
quadro.read(_isequal, _lock);
quadro.remove();
}
if (_tipoq == '2')
{
TLocalisamfile quadro(LF_PROSPE1);
TProgind prog(quadro.items(), "Azzeramento prospetto del quadro E1", FALSE, TRUE);
quadro.zero();
quadro.put("CODDITTA", (long)get_firm_770());
TRectype dep(quadro.curr());
for (quadro.read(); !quadro.eof(); quadro.next())
{
prog.addstatus(1);
if (quadro.curr() > dep) break;
quadro.read(_isequal, _lock);
quadro.remove();
}
}
return TRUE;
}
void TQuadroC_E2::genera_prospetto(int cau, real& comp, real& impo, real& rite)
{
TLocalisamfile pr (LF_PROSPE1);
pr.setkey(1);
pr.zero();
pr.put(PRE_CODDITTA, (long)get_firm_770());
pr.put(PRE_CODCAUS, cau);
if (pr.read() == NOERR)
{
comp += pr.get_real(PRE_COMPENSO);
impo += pr.get_real(PRE_IMPONIBILE);
rite += pr.get_real(PRE_RITENUTA);
pr.put(PRE_COMPENSO, comp);
pr.put(PRE_IMPONIBILE, impo);
pr.put(PRE_RITENUTA, rite);
pr.rewrite();
}
else
{
pr.put(PRE_CODDITTA, (long)get_firm_770());
pr.put(PRE_CODCAUS, cau);
pr.put(PRE_COMPENSO, comp);
pr.put(PRE_IMPONIBILE, impo);
pr.put(PRE_RITENUTA, rite);
pr.write();
}
}
void TQuadroC_E2::leggi_sort(TProgind& p)
{
TLocalisamfile qd(_file);
const char* buf;
TString16 keyp, key, perc, perc_p;
char tipoa, tipoa_p;
long codanag, codanag_p;
int codcaus_p, codcaus, nprog;
real tot_somme=ZERO,tot_impo=ZERO,tot_rite=ZERO,tot_comp=ZERO, rQCInps=ZERO;
real rTotQCInps = ZERO;
bool esiste_record=FALSE, bAssoggettateRacc=FALSE,bFattoProspetto=FALSE;
struct righe_pag* rp;
keyp = key = "";
nprog = 1;
tot_somme = tot_impo = tot_rite = tot_comp = ZERO;
while ((buf = _sort->retrieve()) != NULL)
{
p.addstatus(1);
esiste_record = TRUE;
rp = (struct righe_pag*)buf;
tipoa = rp->tipoa;
codanag = atol(rp->codan);
codcaus = atoi(rp->codcau);
perc = rp->perc;
bAssoggettateRacc = rp->acim;
// non frega un tubo bInps = rp->bInps; // se la riga aveva il contributo inps nella caus.
rQCInps = rp->inps;
if (QuadroE1() && !bAssoggettateRacc)
{
genera_prospetto(codcaus,rp->comp,rp->impo,rp->rite);
bFattoProspetto = TRUE;
}
else
{
key.format("%c%5ld%2d%s", tipoa, codanag, codcaus, (const char*)perc);
if ( (key != keyp) && (keyp != "") )
{
bFattoProspetto = FALSE;
qd.zero();
qd.put("CODDITTA", (long)get_firm_770());
qd.put("TIPOA", tipoa_p);
qd.put("CODANAGR", (long)codanag_p);
qd.put("CODCAUS", codcaus_p);
qd.put("NPROG", nprog++);
// 12.6.96 aggiunto contributo inps
if (QuadroC())
qd.put("CONTSSN", rTotQCInps);
if (QuadroD() || QuadroC() || QuadroE())
qd.put("SOMME", tot_somme + tot_comp - tot_impo);
else
if (QuadroD1())
{
qd.put("QUOTAPRO", tot_comp - tot_impo);
qd.put("SPESEANT", tot_somme);
}
else
if (QuadroE1())
qd.put("SOMME", tot_comp);
if (QuadroE1())
qd.put("AMMONTARE", tot_impo);
else
qd.put("IMPONIBILE", tot_impo);
if (QuadroC())
qd.put("RITENUTE", tot_rite);
else
qd.put("IMPORTO", tot_rite);
qd.put("PERC", perc_p);
if (!QuadroE() && !QuadroE1())
qd.put("TOTALE", tot_comp + tot_somme);
if (QuadroC())
qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
if (QuadroE1())
qd.put("NETTO", tot_comp - tot_rite);
else
qd.put("NETTO", tot_impo - tot_rite);
qd.write();
rTotQCInps = tot_impo = tot_somme = tot_rite = tot_comp = ZERO;
}
tot_somme += rp->somme;
tot_rite += rp->rite;
tot_impo += rp->impo;
tot_comp += rp->comp;
rTotQCInps += rQCInps;
if (tipoa_p != tipoa || codanag != codanag_p)
nprog = 1;
tipoa_p = tipoa;
codanag_p = codanag;
codcaus_p = codcaus;
perc_p = perc;
keyp.format("%c%5ld%2d%s", tipoa_p, codanag_p, codcaus_p, (const char*)perc_p);
}
} // while (retrieve() != NULL)
if (esiste_record || bFattoProspetto)
{
qd.zero();
qd.put("CODDITTA", (long)_codditta);
qd.put("TIPOA", tipoa_p);
qd.put("CODANAGR", (long)codanag_p);
qd.put("CODCAUS", codcaus_p);
qd.put("NPROG", nprog++);
if (QuadroD() || QuadroC() || QuadroE())
qd.put("SOMME", tot_somme + tot_comp - tot_impo);
else
if (QuadroD1())
{
qd.put("QUOTAPRO", tot_comp - tot_impo);
qd.put("SPESEANT", tot_somme);
}
else
if (QuadroE1())
qd.put("SOMME", tot_comp);
if (QuadroE1())
qd.put("AMMONTARE", tot_impo);
else
qd.put("IMPONIBILE", tot_impo);
if (QuadroC())
qd.put("RITENUTE", tot_rite);
else
qd.put("IMPORTO", tot_rite);
qd.put("PERC", perc_p);
// 12.6.96 aggiunto contributo inps
if (QuadroC())
qd.put("CONTSSN", rTotQCInps);
if (!QuadroE() && !QuadroE1())
qd.put("TOTALE", tot_comp + tot_somme);
if (QuadroC())
qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
if (QuadroE1())
qd.put("NETTO", tot_comp - tot_rite);
else
qd.put("NETTO", tot_impo - tot_rite);
qd.write();
}
}
bool TQuadroC_E2::codanagr_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
const long codanagr = atol(f.get());
const char tipoa = m.get(F_TIPOA)[0];
// 12.6.96 Non lascia andare avanti se il perc. non esiste
if (!esiste_perc(tipoa, codanagr))
return f.warning_box("Percipiente inesistente");
if (app()._quadro != "E2")
f.mask().disable(F_GENERA);
TString16 dummy(f.get());
if (dummy.not_empty())
setta_nprog(f);
}
return TRUE;
}
// Passa al modo inserimento/modifica.
bool TQuadroC_E2::nprog_handler(TMask_field& f, KEY key)
{
if (!f.mask().is_running()) return TRUE;
if (key == K_TAB)
{
const int nprog = atoi(f.get());
if (nprog==0) return TRUE;
f.mask().stop_run(K_AUTO_ENTER); // entra in modo modifica (se il record che ha chiave specificata esiste gia') oppure
// inserimento (se trova che non esiste)
}
return TRUE;
}
bool TQuadroC_E2::scrivi_dati_per(TRectype& rec)
{
TLocalisamfile dati_per(LF_PERC);
const long codditta = rec.get_long("CODDITTA");
char tipoa = rec.get_char("TIPOA");
const long codanagr = rec.get_long("CODANAGR");
dati_per.zero();
dati_per.put("CODDITTA", codditta);
dati_per.put("TIPOA", tipoa);
dati_per.put("CODANAGR", codanagr);
const bool preesistente = (dati_per.read() == NOERR);
if (!preesistente)
{
dati_per.zero();
dati_per.put("CODDITTA", codditta);
dati_per.put("TIPOA", tipoa);
dati_per.put("CODANAGR", codanagr);
dati_per.write();
}
return preesistente;
}
int TQuadroC_E2::rewrite(const TMask& m)
{
m.autosave(_rel);
const int err = _rel->rewrite();
scrivi_dati_per(_rel->curr());
_registra = TRUE;
return err;
}
int TQuadroC_E2::write(const TMask& m)
{
m.autosave(_rel);
const int err = _rel->write();
scrivi_dati_per(_rel->curr());
_registra = TRUE;
return err;
}
bool TQuadroC_E2::remove()
{
_registra = TRUE;
return TRelation_application::remove();
}
bool TQuadroC_E2::user_create()
{
switch (_tipoq)
{
case 'C':
_file = LF_QUAC;
_quadro = "C";
break;
case 'D':
_file = LF_QUAD;
_quadro = "D";
break;
case '1':
_file = LF_QUAD1;
_quadro = "D1";
break;
case 'E':
_file = LF_QUAE;
_quadro = "E";
break;
case '2':
_file = LF_QUAE1;
_quadro = "E1";
break;
case '3':
_file = LF_QUAE2;
_quadro = "E2";
break;
default:
break;
}
_qd = new TLocalisamfile(_file);
_rel = new TRelation(_file);
_rpag = new TLocalisamfile(LF_RPAG);
_ca7 = new TTable ("%CA7");
_codditta = get_firm_770();
set_search_field(F_CODANAGRPERC);
_registra = FALSE;
load_mask(0);
return TRUE;
}
bool TQuadroC_E2::user_destroy()
{
if (_msk[1] != NULL) delete _msk[1];
if (_msk[0] != NULL) delete _msk[0];
TString16 quadro = "";
switch (_tipoq)
{
case 'C':
quadro << "C";
break;
case 'D':
quadro << "D";
break;
case '1':
quadro << "D1";
break;
case 'E':
quadro << "E";
break;
case '2':
quadro << "E1";
break;
case '3':
quadro << "E2";
break;
default:
break;
}
if (_registra)
_rip.set(quadro);
delete _rel;
delete _qd;
delete _rpag;
delete _ca7;
return TRUE;
}
void TQuadroC_E2::on_config_change()
{
TConfig conf(CONFIG_STUDIO);
_anno_dic = (int)conf.get_long(ANNO_SEL, NULL);
}
void TQuadroC_E2::init_query_mode(TMask& m)
{
m.set(F_ANNODIC, _anno_dic);
if (_quadro != "E2")
m.enable(F_GENERA);
// forza il ricalcolo dell'ultimo numero disponibile
TString16 dummy(m.get(F_NPROG));
if (dummy.not_empty())
setta_nprog(m.field(F_NPROG));
m.send_key(K_SHIFT+K_CTRL+'h', -1); // nasconde (hide) group 1 - Scelta ANAGR
m.send_key(K_SHIFT+K_CTRL+'s', -2); // abilita (show) group 2 - Ricerca su DATI PERC
}
void TQuadroC_E2::init_query_insert_mode(TMask& m)
{
m.set(F_ANNODIC, _anno_dic);
m.send_key(K_SHIFT+K_CTRL+'h', -2); // group 3 Nasconde ricerca su PERC
m.send_key(K_SHIFT+K_CTRL+'s', -1); // group 1 Ricerca su ANAGR
}
int quadriC_E2(int argc, char* argv[])
{
const char tipo = toupper(*argv[2]);
const char* title = "Quadro D";
TQuadroC_E2 a(tipo);
switch (tipo)
{
case '1':
title = "Quadro D1";
break;
case 'C':
title = "Quadro C";
break;
case 'E':
title = "Quadro E";
break;
case '2':
title = "Quadro E1";
break;
case '3':
title = "Quadro E2";
break;
default:
break;
}
a.run(argc, argv, title);
return TRUE;
}