Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Aggiunto programma di statistica per comune di domicilio


git-svn-id: svn://10.65.10.50/trunk@6444 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1998-03-27 13:37:48 +00:00
parent 3bdcb94811
commit fc9427ff2f
6 changed files with 886 additions and 1 deletions

@ -4,7 +4,7 @@
#include "at3.h"
#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7}"
#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7|8}"
int main(int argc,char** argv)
{
@ -28,6 +28,8 @@ int main(int argc,char** argv)
rt = at3700(argc,argv) ; break;
case 7:
rt = at3800(argc,argv) ; break;
case 8:
rt = at3900(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}

@ -9,6 +9,7 @@ int at3500(int argc, char* argv[]);
int at3600(int argc, char* argv[]);
int at3700(int argc, char* argv[]);
int at3800(int argc, char* argv[]);
int at3900(int argc, char* argv[]);
#endif // __AT3_H

592
at/at3900.cpp Executable file

@ -0,0 +1,592 @@
#include <applicat.h>
#include <mask.h>
#include <printer.h>
#include <progind.h>
#include <real.h>
#include <relation.h>
#include <tabutil.h>
#include <urldefid.h>
#include <utility.h>
#include "at3.h"
// nomi campi maschera
#include "at3900a.h"
// nomi dei campi
#include "soggetti.h"
#include "atstats.h"
#include "sezioni.h"
#include "comuni.h"
// classe per la definizione di una riga di statistica
class TRigaSxCom : public TObject
{
TString16 _com;
TArray _valori;
protected:
const TRigaSxCom& copy(const TRigaSxCom& riga);
public:
const TString16 com() const { return _com; }
TObject* dup() const { return new TRigaSxCom(*this); }
const TRigaSxCom& operator = (const TRigaSxCom& riga);
const real& operator [] (int colonna) const;
void aggiorna_valore(int colonna, const real& numero) ;
void azzera_valori();
// costruttore
TRigaSxCom(TString16 com) {_com = com;}
// costruttore di copia
TRigaSxCom(const TRigaSxCom& riga) { copy(riga); }
virtual ~TRigaSxCom() {};
};
const TRigaSxCom& TRigaSxCom::copy(const TRigaSxCom& riga)
{
_com = riga._com;
_valori = riga._valori;
return (*this);
}
const TRigaSxCom& TRigaSxCom::operator = (const TRigaSxCom& riga)
{
copy(riga);
return (*this);
}
const real& TRigaSxCom::operator [] (int colonna) const
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
return ZERO;
else
return *valore;
}
void TRigaSxCom::aggiorna_valore(int colonna, const real& numero)
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
_valori.add(new real(numero), colonna);
else
*valore += numero;
}
void TRigaSxCom::azzera_valori()
{
_valori.destroy();
}
class TStatSogxCom : public TApplication
{
TMask* _msk;
TRelation* _rel;
TCursor* _cur;
TLocalisamfile* _sezioni;
TLocalisamfile* _comuni;
TLocalisamfile* _soggetti;
TLocalisamfile* _atstats;
TAssoc_array* _colonne;
TAssoc_array* _comprovincia;
TAssoc_array _categorie;
TArray _righe, _righetotali;
TString16 _sezini, _sotini, _sezfin, _sotfin, _provincia;
TDate _dataini, _datafin;
static bool filter_func_statxcom(const TRelation* rel);
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual TMask& get_mask() { return *_msk; }
virtual TRelation* get_relation() const { return _rel; }
int data2row(const TString16 com);
bool riepilogo();
bool stampa();
bool crea_colonne();
bool crea_righe();
void azzera_righe();
void stampa_sezione(TString16 codsez, TString16 codsot);
void stampa_totali();
void crea_intestazione();
public:
TStatSogxCom() {}
};
HIDDEN inline TStatSogxCom& app() { return (TStatSogxCom&) main_app(); }
int TStatSogxCom::data2row(const TString16 com)
{
real& indicer = (real&)_comprovincia->find((const char*) com);
return ((int) indicer.integer());
}
bool TStatSogxCom::crea_colonne()
{
_colonne->destroy();
real contatore(ZERO);
real* oggetto = new real(contatore);
const char* indice = "T"; // tutti i donatori
_colonne->add(indice,(TObject*)oggetto);
return TRUE;
}
bool TStatSogxCom::filter_func_statxcom(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(LF_SOGGETTI);
// filtro per categorie
TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0)
{
const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
return filtrato;
}
bool TStatSogxCom::crea_righe()
{
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey(2);
TString16 com = "****";
int indice = 0;
_comprovincia->destroy();
real* oggetto1 = new real(indice);
_comprovincia->add((const char*) com, (TObject*) oggetto1);
_righe.add(new TRigaSxCom(com), indice);
_righetotali.add(new TRigaSxCom(com), indice);
comuni.zero();
for (comuni.first(); !comuni.eof(); comuni.next())
{
TString provincia = comuni.get(COM_PROVCOM);
if (provincia == _provincia)
{
indice++;
com = comuni.get(COM_COM);
_righe.add(new TRigaSxCom(com), indice);
_righetotali.add(new TRigaSxCom(com), indice);
real* oggetto = new real(indice);
_comprovincia->add((const char*) com,(TObject*) oggetto);
}
}
return _righe.items()>0;
}
bool TStatSogxCom::create()
{
TApplication::create();
_msk = new TMask("at3900a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM");
_soggetti = new TLocalisamfile(LF_SOGGETTI);
_atstats = new TLocalisamfile(LF_ATSTATS);
_sezioni = new TLocalisamfile(LF_SEZIONI);
_comuni = new TLocalisamfile(LF_COMUNI);
_colonne = new TAssoc_array();
_comprovincia = new TAssoc_array();
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TStatSogxCom::destroy()
{
delete _rel;
delete _msk;
delete _soggetti;
delete _atstats;
delete _sezioni;
delete _comuni;
delete _colonne;
delete _comprovincia;
return TApplication::destroy();
}
bool TStatSogxCom::menu(MENU_TAG m)
{
TMask& msk = get_mask();
KEY tasto;
tasto = msk.run();
if (tasto == K_ENTER)
{
_sezini = _msk->get(F_SEZINI);
_sotini = _msk->get(F_SOTINI);
_sezfin = _msk->get(F_SEZFIN);
_sotfin = _msk->get(F_SOTFIN);
_provincia = _msk->get(F_PROVINCIA);
if (riepilogo())
stampa();
}
return FALSE;
}
void TStatSogxCom::crea_intestazione()
{
TPrintrow row;
TString256 sep;
sep = "STATISTICA SOGGETTI PER COMUNE DI DOMICILIO";
sep.center_just(80);
row.put(sep);
row.put("@>", 1);
row.put("Pag. @#", 70);
printer().setheaderline(2, row);
sep = "Categorie ";
sep << _msk->get(F_CAT1) << " ";
sep << _msk->get(F_CAT2) << " ";
sep << _msk->get(F_CAT3) << " ";
sep << _msk->get(F_CAT4) << " ";
sep << _msk->get(F_CAT5) << " ";
sep << _msk->get(F_CAT6) << " ";
sep.center_just(80);
row.reset();
row.put(sep);
printer().setheaderline(3, row);
sep = "";
sep << "Comune Numero";
row.reset();
row.put(sep);
printer().setheaderline(5, row);
sep = "";
sep.fill('-');
row.reset();
row.put(sep);
printer().setheaderline(6, row);
}
bool TStatSogxCom::stampa()
{
if (printer().open())
{
crea_intestazione();
TRelation* relstat = new TRelation(LF_ATSTATS);
TCursor* curstat = new TCursor(relstat, "", 1);
TString16 oldsez = "**";
TString16 oldsot = "**";
double numero;
TString16 actsez, actsot;
TString16 com;
long last = curstat->items();
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
{
actsez = curstat->curr().get(ATSS_CODSEZ);
actsot = curstat->curr().get(ATSS_CODSOT);
com = curstat->curr().get(ATSS_COM);
numero = (double)curstat->curr().get_int(ATSS_NUMERO);
if (actsez != oldsez || actsot != oldsot)
{
if (oldsez != "**" && oldsot != "**")
{
stampa_sezione(oldsez,oldsot);
azzera_righe();
}
oldsez = actsez;
oldsot = actsot;
}
if (com.empty())
com = "****";
TRigaSxCom& riga = (TRigaSxCom&)_righe[data2row(com)];
TRigaSxCom& rigatotale = (TRigaSxCom&)_righetotali[data2row(com)];
const char* indicen = "T";
real& colonnan = (real&)_colonne->find(indicen);
real n = numero;
riga.aggiorna_valore((int) colonnan.integer(),n);
rigatotale.aggiorna_valore((int) colonnan.integer(),n);
}
if (oldsez != "**" && oldsot != "**")
{
stampa_sezione(oldsez,oldsot);
if ((_sezini != _sezfin) || (_sotini != _sotfin))
stampa_totali();
}
delete curstat;
delete relstat;
printer().close();
return TRUE;
}
else
return FALSE;
}
void TStatSogxCom::azzera_righe()
{
for (int i=0; i<_righe.items(); i++)
{
TRigaSxCom& riga = (TRigaSxCom&)_righe[i];
riga.azzera_valori();
}
}
void TStatSogxCom::stampa_sezione(TString16 codsez, TString16 codsot)
{
TPrintrow row;
TString256 rigastampa;
rigastampa = "Sezione: ";
rigastampa << codsez;
if (codsot.not_empty())
{
rigastampa << "/";
rigastampa << codsot;
}
rigastampa << " ";
TLocalisamfile sezioni(LF_SEZIONI);
sezioni.setkey(1);
sezioni.zero();
sezioni.put(SEZ_CODSEZ,codsez);
sezioni.put(SEZ_CODSOT,codsot);
if (sezioni.read() == NOERR)
{
TString80 den = sezioni.get(SEZ_DENSEZ);
rigastampa << den;
den = sezioni.get(SEZ_DENSOT);
if (den.not_empty())
{
rigastampa << "/";
rigastampa << den;
}
}
rigastampa.center_just(80);
row.put(rigastampa);
printer().setheaderline(1, row);
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey(1);
TRigaSxCom rigatotali(" ");
TString16 valore;
TString16 com;
for (int i=0; i<_righe.items(); i++)
{
TRigaSxCom& riga = (TRigaSxCom&)_righe[i];
const char* indicet = "T";
real& colonnat = (real&)_colonne->find(indicet);
if (riga[(int) colonnat.integer()] != 0)
{
rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]);
row.reset();
rigastampa = "";
rigastampa << riga.com();
rigastampa << " ";
comuni.zero();
comuni.put(COM_COM,riga.com());
if (comuni.read() == NOERR)
rigastampa << comuni.get(COM_DENCOM);
int pos = 41;
valore = "";
valore.format("%8d",riga[(int) colonnat.integer()].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+8;
row.put((const char*) rigastampa);
printer().print(row);
}
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale";
int pos = 41;
const char* indicet = "T";
real& colonnat = (real&)_colonne->find(indicet);
valore = "";
valore.format("%8d",rigatotali[(int) colonnat.integer()].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+8;
row.put((const char*) rigastampa);
printer().print(row);
printer().formfeed();
}
void TStatSogxCom::stampa_totali()
{
TPrintrow row;
TString256 rigastampa;
rigastampa = "Riepilogo sezioni stampate";
rigastampa.center_just(80);
row.put(rigastampa);
printer().setheaderline(1, row);
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey(1);
TRigaSxCom rigatotali(" ");
TString16 valore;
TString16 com;
for (int i=0; i<_righe.items(); i++)
{
TRigaSxCom& riga = (TRigaSxCom&)_righetotali[i];
const char* indicet = "T";
real& colonnat = (real&)_colonne->find(indicet);
if (riga[(int) colonnat.integer()] != 0)
{
rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]);
row.reset();
rigastampa = "";
rigastampa << riga.com();
rigastampa << " ";
comuni.zero();
comuni.put(COM_COM,riga.com());
if (comuni.read() == NOERR)
rigastampa << comuni.get(COM_DENCOM);
int pos = 41;
valore = "";
valore.format("%8d",riga[(int) colonnat.integer()].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+8;
row.put((const char*) rigastampa);
printer().print(row);
}
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale";
int pos = 41;
const char* indicet = "T";
real& colonnat = (real&)_colonne->find(indicet);
valore = "";
valore.format("%8d",rigatotali[(int) colonnat.integer()].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+8;
row.put((const char*) rigastampa);
printer().print(row);
printer().formfeed();
}
bool TStatSogxCom::riepilogo()
{
if (crea_colonne() && crea_righe())
{
// cancello i risultati della elaborazione precedente
TLocalisamfile stat(LF_ATSTATS);
for (stat.first(); !stat.eof(); stat.next())
stat.remove();
stat.setkey(1);
_cur = new TCursor(_rel, "", 1);
TString256 filtro = "";
filtro = format("(13->PROVCOM == \"%s\")",(const char*)_provincia);
// filtro per sezione/sottogruppo
if (_sezini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
}
if (_sotini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
else
{
filtro << " && ";
filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
}
}
}
if (_sezfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
}
if (_sotfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
else
{
filtro << " && ";
filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
}
}
}
_cur->setfilter((const char*) filtro, TRUE);
_categorie.destroy();
const TString16 catpri = _msk->get(F_CAT1);
const TString16 catsec = _msk->get(F_CAT2);
const TString16 catter = _msk->get(F_CAT3);
const TString16 catqua = _msk->get(F_CAT4);
const TString16 catqui = _msk->get(F_CAT5);
const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok())
_categorie.add((const char*) catsec);
if (catter.not_empty() && catter.ok())
_categorie.add((const char*) catter);
if (catqua.not_empty() && catqua.ok())
_categorie.add((const char*) catqua);
if (catqui.not_empty() && catqui.ok())
_categorie.add((const char*) catqui);
if (catses.not_empty() && catses.ok())
_categorie.add((const char*) catses);
_cur->set_filterfunction(filter_func_statxcom);
TString16 codsez, codsot;
long numero;
TString16 com;
TRectype& recsog = _cur->curr();
long last = _cur->items();
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
for ( *_cur=0; _cur->pos() < last; ++(*_cur) )
{
prg.addstatus(1);
codsez = recsog.get(SOG_CODSEZ);
codsot = recsog.get(SOG_CODSOT);
com = recsog.get(SOG_DOM_CODCOM);
if (com.empty())
com = "****";
stat.zero();
stat.put(ATSS_CODSEZ, codsez);
stat.put(ATSS_CODSOT, codsot);
stat.put(ATSS_COM, com);
if (stat.read() == NOERR)
{
numero = stat.get_long(ATSS_NUMERO);
numero++;
stat.put(ATSS_NUMERO, numero);
stat.rewrite();
}
else
{
stat.put(ATSS_CODSEZ, codsez);
stat.put(ATSS_CODSOT, codsot);
stat.put(ATSS_COM, com);
numero = 1;
stat.put(ATSS_NUMERO, numero);
stat.write();
}
}
return (stat.eod() > 0);
}
else
return FALSE;
}
int at3900(int argc, char* argv[])
{
TStatSogxCom a;
a.run(argc, argv, "Statistica soggetti per comune di domicilio");
return 0;
}

26
at/at3900a.h Executable file

@ -0,0 +1,26 @@
// statistica SOGGETTI PER comune di domicilio
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_CAT1 201
#define F_D_CAT1 202
#define F_CAT2 203
#define F_D_CAT2 204
#define F_CAT3 205
#define F_D_CAT3 206
#define F_CAT4 207
#define F_D_CAT4 208
#define F_CAT5 209
#define F_D_CAT5 210
#define F_CAT6 211
#define F_D_CAT6 212
#define F_PROVINCIA 301

263
at/at3900a.uml Executable file

@ -0,0 +1,263 @@
#include "at3900a.h"
PAGE "Statistica donatori per categoria" -1 -1 78 20
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 2 "Da "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 11 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 3 " "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 11 3 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
STRING F_SEZFIN 2
BEGIN
PROMPT 41 2 "A "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN
INPUT CODSOT F_SOTFIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZFIN CODSEZ
OUTPUT F_D_SEZFIN DENSEZ
OUTPUT F_SOTFIN CODSOT
OUTPUT F_D_SOTFIN DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione finale"
END
STRING F_D_SEZFIN 25
BEGIN
PROMPT 49 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL
HELP "Sezione finale"
END
STRING F_SOTFIN 2
BEGIN
PROMPT 41 3 " "
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 3 ""
FLAGS "U"
COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN
INPUT DENSOT F_D_SOTFIN
COPY DISPLAY F_D_SEZFIN
COPY OUTPUT F_D_SEZFIN
CHECKTYPE NORMAL
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 5 "Categorie donatori"
END
STRING F_CAT1 2
BEGIN
PROMPT 2 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_CAT1 CODTAB
OUTPUT F_D_CAT1 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT1 30
BEGIN
PROMPT 8 6 ""
FLAGS "D"
END
STRING F_CAT2 2
BEGIN
PROMPT 2 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT2
COPY DISPLAY F_CAT1
OUTPUT F_CAT2 CODTAB
OUTPUT F_D_CAT2 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT2 30
BEGIN
PROMPT 8 7 ""
FLAGS "D"
END
STRING F_CAT3 2
BEGIN
PROMPT 2 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT3
COPY DISPLAY F_CAT1
OUTPUT F_CAT3 CODTAB
OUTPUT F_D_CAT3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT3 30
BEGIN
PROMPT 8 8 ""
FLAGS "D"
END
STRING F_CAT4 2
BEGIN
PROMPT 40 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT4
COPY DISPLAY F_CAT1
OUTPUT F_CAT4 CODTAB
OUTPUT F_D_CAT4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT4 30
BEGIN
PROMPT 46 6 ""
FLAGS "D"
END
STRING F_CAT5 2
BEGIN
PROMPT 40 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT5
COPY DISPLAY F_CAT1
OUTPUT F_CAT5 CODTAB
OUTPUT F_D_CAT5 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT5 30
BEGIN
PROMPT 46 7 ""
FLAGS "D"
END
STRING F_CAT6 2
BEGIN
PROMPT 40 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT6
COPY DISPLAY F_CAT1
OUTPUT F_CAT6 CODTAB
OUTPUT F_D_CAT6 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT6 30
BEGIN
PROMPT 46 8 ""
FLAGS "D"
END
STRING F_PROVINCIA 5
BEGIN
PROMPT 2 11 "Statistica per la provincia di "
FLAGS "U"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

@ -9,3 +9,4 @@
#define ATSS_CATDON "CATDON"
#define ATSS_NUMERO "NUMERO"
#define ATSS_NUMERO2 "NUMERO2"
#define ATSS_COM "COM"