Patch level : no patch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Aggiunto il modulo discoteca Laziale


git-svn-id: svn://10.65.10.50/trunk@10527 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2002-10-07 08:40:58 +00:00
parent 6e0d5b4275
commit ffe5e5c386
10 changed files with 885 additions and 0 deletions

177
dl/cat2dl.ini Executable file
View File

@ -0,0 +1,177 @@
[PARAMS]
LISTINGR = LI1
LISTVEND = LI2
OFFEINGR = OF1
OFFEVEND = OF2
[MAIN]
DECSEP =
FIELDSEP =
RECORDSEP =
RECORDSIZE = 0
SKIPLINES = 0
TYPEFIELD = -1
TYPELEN = -1
TYPEPOS = -1
[TYPE DATA]
ALIGN =
DATA = D
DECIMAL = 0
FILLER =
LENGTH = 8
PICTURE =
[TYPE ORA]
ALIGN =
DATA = D
DECIMAL = 0
FILLER =
LENGTH = 6
PICTURE =
[TYPE EURO]
ALIGN = R
DATA =
DECIMAL = 2
FILLER =
LENGTH = 9
PICTURE =
[TYPE STRINGA]
ALIGN = L
DATA = S
DECIMAL = 0
FILLER = ' '
LENGTH = 0
PICTURE =
[TYPE PERC]
ALIGN = R
DATA =
DECIMAL = 2
FILLER =
LENGTH = 4
PICTURE =
[RECORD]
NAME(0) = CTDTAG
TYPE(0) = DATA
FIELD(0) = 47->USER7
POSITION(0) = 0
LENGTH(0) = 8
NAME(1) = CTTIAG
TYPE(1) = ORA
FIELD(1) = 47->USER8
POSITION(1) = 8
LENGTH(1) = 6
NAME(2) = CTCDAR
TYPE(2) = STRINGA
FIELD(2) = 47->CODART
POSITION(2) = 14
LENGTH(2) = 15
NAME(3) = CTTITO
TYPE(3) = STRINGA
FIELD(3) = 47->USER1
POSITION(3) = 29
LENGTH(3) = 40
NAME(4) = CTARTI
TYPE(4) = STRINGA
FIELD(4) = 47->USER2
POSITION(4) = 69
LENGTH(4) = 20
NAME(5) = CTCOMP
TYPE(5) = STRINGA
FIELD(5) = 47->USER3
POSITION(5) = 89
LENGTH(5) = 20
NAME(6) = CTETIC
TYPE(6) = STRINGA
FIELD(6) = 47->USER4
POSITION(6) = 109
LENGTH(6) = 20
NAME(7) = CTTPSU
TYPE(7) = STRINGA
POSITION(7) = 129
LENGTH(7) = 2
NAME(8) = CTGENE
TYPE(8) = STRINGA
FIELD(8) = 47->GRMERC
POSITION(8) = 131
LENGTH(8) = 2
NAME(9) = CTDTEM
TYPE(9) = DATA
FIELD(9) = 47->USER5
POSITION(9) = 133
LENGTH(9) = 8
NAME(10) = CTDTFC
TYPE(10) = DATA
FIELD(10) = 47->USER6
POSITION(10) = 141
LENGTH(10) = 8
NAME(11) = CTPRIE //listino ingrosso prezzo
TYPE(11) = EURO
POSITION(11) = 158
LENGTH(11) = 9
NAME(12) = CTDIPI //offerta ingrosso dataini
TYPE(12) = DATA
POSITION(12) = 167
LENGTH(12) = 8
NAME(13) = CTDFPI //offerta ingrosso datafin
TYPE(13) = DATA
POSITION(13) = 175
LENGTH(13) = 8
NAME(14) = CTCAPE //offerta ingrosso prezzo
TYPE(14) = EURO
POSITION(14) = 192
LENGTH(14) = 9
NAME(15) = CTPRVU //listino pubblico prezzo
TYPE(15) = EURO
POSITION(15) = 210
LENGTH(15) = 9
NAME(16) = CTDIVE //campagna vendita dataini
TYPE(16) = DATA
POSITION(16) = 219
LENGTH(16) = 8
NAME(17) = CTDFVE //campagna vendita datafin
TYPE(17) = DATA
POSITION(17) = 227
LENGTH(17) = 8
NAME(18) = CTCAVU //campagna vendita prezzo
TYPE(18) = EURO
POSITION(18) = 244
LENGTH(18) = 9
NAME(19) = CTIVAV
TYPE(19) = STRINGA
FIELD(19) = 47->CODIVA
POSITION(19) = 253
LENGTH(19) = 2
NAME(20) = CTCDBR
TYPE(20) = STRINGA
POSITION(20) = 261
LENGTH(20) = 12
NAME(21) = CTLIVD
TYPE(21) = STRINGA
POSITION(21) = 273
LENGTH(21) = 1

37
dl/dl0.cpp Executable file
View File

@ -0,0 +1,37 @@
#include <xvt.h>
#include <strings.h>
#include <checks.h>
#include "dl0.h"
#define usage "Error - usage : %s -{7}"
int main(int argc,char** argv)
{
int rt = -1 ;
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
switch (r)
{
/* case 0:
rt = dl0100(argc,argv) ; break;
case 1:
rt = dl0200(argc,argv) ; break;
case 2:
rt = dl0300(argc,argv) ; break;
case 3:
rt = dl0400(argc,argv) ; break;
case 4:
rt = dl0500(argc,argv) ; break;
case 5:
rt = dl0600(argc,argv) ; break;
case 6:
rt = dl0700(argc,argv) ; break; */
case 7:
rt = dl0800(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}
return rt;
}

14
dl/dl0.h Executable file
View File

@ -0,0 +1,14 @@
#ifndef __DL0_H
#define __DL0_H
/*int dl0100(int argc, char* argv[]);
int dl0200(int argc, char* argv[]);
int dl0300(int argc, char* argv[]);
int dl0400(int argc, char* argv[]);
int dl0500(int argc, char* argv[]);
int dl0600(int argc, char* argv[]);
int dl0700(int argc, char* argv[]);*/
int dl0800(int argc, char* argv[]);
#endif // __DL0_H

7
dl/dl0.url Executable file
View File

@ -0,0 +1,7 @@
#define APPNAME campo
#define QAPPNAME "campo"
#define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url>
#include <mainmenu.url>

89
dl/dl0500.cpp Executable file
View File

@ -0,0 +1,89 @@
#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 <recarray.h>
#include <utility.h>
#include "..\mg\umart.h"
#include "..\mg\anamag.h"
#include "..\ve\condv.h"
#include "..\ve\rcondv.h"
#include "dl0.h"
#include "dl0500a.h"
class TRicerca: public TSkeleton_application
{
TMask* _msk;
TRicerca_file* _trasfile;
TString _listingr, _listvend, _offeingr, _offevend;
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void);
static bool annulla_handler(TMask_field& f, KEY k);
public:
const TMask& msk() const { return *_msk; }
TRicerca() {}
virtual ~TRicerca() {}
};
// restituisce un riferimento all' applicazione
inline TRicerca& app() { return (TRicerca&) main_app();}
// creazione dell'applicazione
bool TRicerca::create()
{
open_files(LF_ANAMAG, LF_UMART, LF_CONDV, LF_RCONDV, 0);
_msk = new TMask("dl0500a");
_msk->set(F_FILENAME,DLFILENAME);
_trasfile = NULL;
return TSkeleton_application::create();
}
// distruzione dell'applicazione
bool TRicerca::destroy()
{
delete _msk;
return TSkeleton_application::destroy();
}
// carica la maschera
void TRicerca::main_loop()
{
// Preimposta gli eventuali valori specificati sulla riga di comando
//error_box("Attenzione: manca la configurazione del trasferimento!");
KEY key = K_ENTER;
while (key != K_QUIT)
{
key = _msk->run();
if (key == K_ENTER)
transfer();
}
}
// handler per gestire la conferma dell'annullamento dei dati inseriti
// nella maschera
bool TRicerca::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
if (k == K_SPACE)
{
if (yesno_box("Vuoi veramente annullare i dati inseriti"))
m.reset();
}
return TRUE;
}
int dl0500(int argc, char* argv[])
{
TRicerca a ;
a.run(argc, argv, "Ricerca avanzata");
return 0;
}

16
dl/dl0500a.h Executable file
View File

@ -0,0 +1,16 @@
// ricerca avanzata
// definizione campi per maschera di selezione dl0500a
#define F_BARCODE 101
#define F_TIPOSUPPORTO 102
#define F_TITOLO 103
#define F_ARTISTA 104
#define F_COMPOSITORE 105
#define F_ETICHETTA 106
#define F_GENEREMUSICALE 107
#define F_DATAE_INI 108
#define F_DATAE_FIN 109
#define F_DATAV_INI 110
#define F_DATAV_FIN 111
#define F_D_TIPOSUPPORTO 112

75
dl/dl0500a.uml Executable file
View File

@ -0,0 +1,75 @@
#include "dl0500a.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 "Ricerca avanzata" -1 -1 78 20
STRING F_BARCODE 20
BEGIN
PROMPT 2 1 "Barcode "
END
STRING F_TIPOSUPPORTO 10
BEGIN
PROMPT 2 2 "Tipo supporto "
END
STRING F_TITOLO 40
BEGIN
PROMPT 2 3 "Titolo "
END
STRING F_ARTISTA 20
BEGIN
PROMPT 2 4 "Artista "
END
STRING F_COMPOSITORE 20
BEGIN
PROMPT 2 5 "Compositore "
END
STRING F_ETICHETTA 20
BEGIN
PROMPT 2 6 "Etichetta "
END
STRING F_GENEREMUSICALE
BEGIN
PROMPT 2 7 "Genere musicale "
END
DATE F_DATAE_INI
BEGIN
PROMPT 2 8 "Data emissione: da "
END
DATE F_DATAE_FIN
BEGIN
PROMPT 35 8 "a "
END
DATE F_DATAV_INI
BEGIN
PROMPT 2 9 "Data variazione da "
END
DATE F_DATAV_FIN
BEGIN
PROMPT 35 9 "a "
END
ENDPAGE
ENDMASK

431
dl/dl0800.cpp Executable file
View File

@ -0,0 +1,431 @@
#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 <recarray.h>
#include <utility.h>
#include "..\mg\umart.h"
#include "..\mg\anamag.h"
#include "..\ve\condv.h"
#include "..\ve\rcondv.h"
#include "dl0.h"
#include "dl0800a.h"
#define DLFILENAME "XCATT00F"
////////////////////////////////////////////////////////
// Classe TCat2dl_file customizzata dalla TFile_text //
////////////////////////////////////////////////////////
class TCat2dl_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
virtual int autosave(TRelation& rel, const TRecord_text& rec);
virtual bool pre_writerel(TRelation& rel,const TRecord_text& rec);
void write_supporto(const TRecord_text& rec);
void write_listini(const TRecord_text& rec);
void write_offerte(const TRecord_text& rec);
TCat2dl_file(const TString& file_name, const TString& config_name);
virtual ~TCat2dl_file() { }
};
TCat2dl_file::TCat2dl_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
int TCat2dl_file::autosave(TRelation& rel, const TRecord_text& rec)
{
const TString& type = rec.type(); //prendo il tracciato record del tipo del record_text
TTracciato_record& tr = *t_rec(type);
TArray& a_tc = tr.tracciati_campo();
const int items = a_tc.items();
TString valore;
for (int i = 0; i < items; i++)
{
const TTracciato_campo& tc = tr.get(i);
TFieldref field(tc.field());
if (field.name().not_empty())
{
if (field.file()==0)
field.set_file(rel.lfile().num());
valore = rec.row(i);
// formatta il campo del file di testo secondo le specifiche del campo su file isam
preformat_field(field,valore,rel,tr.type());
const TRectype& rel_rec = rel.curr(field.file());
TFieldtypes tipo_campo = rel_rec.type(field.name());
bool vuoto = valore.blank();
switch(tipo_campo) //in base al tipo di campo formatta i valori seguendo le specifiche del tracciato
{
case _datefld: //tipo data...
{
if (real::is_null(valore))
{
valore.cut(0);
vuoto = TRUE;
}
TDate data(valore);
format_date(data, fpicture(tc), valore);//formatta la data secondo le specifiche del tracciato
}
break;
case _realfld: //tipi numerici
case _intfld:
case _longfld:
{
const real numero(valore);
vuoto = numero.is_zero();
valore = numero.string(fpicture(tc));//formatta il numero secondo le specifiche del tracciato
int length = flength(tc,rel_rec);
if (falign(tc) == 'L')
valore.left_just(length, ffiller(tc));
else
valore.right_just(length, ffiller(tc));
}
break;
default:
valore = format_field(tc, rel.lfile().num(), valore);//formatta il campo secondo le specifiche del record
break;
}
if (!vuoto && rel.exist(field.file()))
field.write(valore, rel);//faccio una write sulla relazione del fieldref
}
}
int err = NOERR;
if (pre_writerel(rel,rec))
{
err= rel.write();
if (err == _isdupkey || err ==_isreinsert)
err = rel.rewrite();
}
return err;
}
bool TCat2dl_file::pre_writerel(TRelation& rel,const TRecord_text& rec)
{
// 1) sistema i tipi di supporto
write_supporto(rec);
// 2) legge e scrive i dati dei listini: se il listino non esiste lo crea
write_listini(rec);
// 3) legge e scrive i dati delle offerte: se l'offerta non esiste la crea
write_offerte(rec);
return TRUE;
}
//scrive il supporto dell'articolo nel campo UM del file umart (unita' di misura)
void TCat2dl_file::write_supporto(const TRecord_text& rec)
{
const TString& codart = rec.get(2);
const TString& um = rec.get(7);
if (!um.blank()) //il casino lo fa solo se ha un codice supporto non nullo
{
TLocalisamfile umart(LF_UMART); //prende il file delle unita' di misura...
umart.put(UMART_CODART, codart);
umart.put(UMART_UM, um);
umart.setkey(2); //..con chiave 2...
int err = umart.read(); //..e lo legge
if (err != NOERR) //Se non trova l'unita' di misura tra quelle gia' presenti...
{
umart.setkey(1);
umart.put(UMART_CODART, codart);
umart.put(UMART_NRIGA, 999);
err = umart.read(_isgreat);
err = umart.prev();
int nriga = 1;
if (err == NOERR && umart.get(UMART_CODART) == codart)
nriga = umart.get_int(UMART_NRIGA) + 1;
umart.zero(); //..la aggiunge come ultima unita' di misura.
umart.put(UMART_CODART, codart);
umart.put(UMART_NRIGA, nriga);
umart.put(UMART_UM, um);
umart.put(UMART_FC, 1);
umart.write();
}
}
}
//scrive i valori dei listini (prezzi e date)
void TCat2dl_file::write_listini(const TRecord_text& rec)
{
real prz_ingr = rec.get(11); //legge il prezzo listino ingrosso
prz_ingr /=100;
if (prz_ingr != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
{
TLocalisamfile condv(LF_CONDV);
condv.put(CONDV_TIPO, 'L');
TConfig config("cat2dl.ini","PARAMS");
TString4 listingr = config.get("LISTINGR");
condv.put(CONDV_COD, listingr);
int err = condv.read();
if (err != NOERR) //se il listino indicato nell'ini non esiste..
{
condv.zero(); //..se lo crea!
condv.put(CONDV_TIPO, 'L');
condv.put(CONDV_COD, listingr);
condv.write();
}
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che il listino esiste andiamo in rcondv
rcondv.put(RCONDV_TIPO, 'L');
rcondv.put(RCONDV_COD, listingr);
rcondv.put(RCONDV_TIPORIGA, 'A'); //uguale anche x le righe listino (come sopra)
rcondv.put(RCONDV_CODRIGA, rec.get(2));
rcondv.put(RCONDV_PREZZO, prz_ingr);
rcondv.write();
}
real prz_vend = rec.get(15); //legge il prezzo listino vendite e fa lo stesso procedimento del caso precedente
prz_vend /=100;
if (prz_vend != ZERO)
{
TLocalisamfile condv(LF_CONDV);
condv.put(CONDV_TIPO, 'L');
TConfig config("cat2dl.ini","PARAMS");
TString4 listvend = config.get("LISTVEND");
condv.put(CONDV_COD, listvend);
int err = condv.read();
if (err != NOERR)
{
condv.zero();
condv.put(CONDV_TIPO, 'L');
condv.put(CONDV_COD, listvend);
condv.write();
}
TLocalisamfile rcondv(LF_RCONDV);
rcondv.put(RCONDV_TIPO, 'L');
rcondv.put(RCONDV_COD, listvend);
rcondv.put(RCONDV_TIPORIGA, 'A');
rcondv.put(RCONDV_CODRIGA, rec.get(2));
rcondv.put(RCONDV_PREZZO, prz_vend);
rcondv.write();
}
}
//scrive i valori delle offerte (prezzi e date)
void TCat2dl_file::write_offerte(const TRecord_text& rec)
{
real prz_ingr = rec.get(14); //legge il prezzo offerta ingrosso
prz_ingr /=100;
if (prz_ingr != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
{
TLocalisamfile condv(LF_CONDV);
condv.put(CONDV_TIPO, 'O');
TConfig config("cat2dl.ini","PARAMS");
TString4 offeingr = config.get("OFFEINGR");
condv.put(CONDV_COD, offeingr);
int err = condv.read();
if (err != NOERR) //se l'offerta indicata nell'ini non esiste..
{
condv.zero(); //..se la crea!
condv.put(CONDV_TIPO, 'O');
condv.put(CONDV_COD, offeingr);
TDate dataini = rec.get(12);
TDate datafine = rec.get(13);
condv.put(CONDV_VALIN, dataini);
condv.put(CONDV_VALFIN, datafine);
condv.write();
}
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che l'offerta esiste andiamo in rcondv
rcondv.put(RCONDV_TIPO, 'O');
rcondv.put(RCONDV_COD, offeingr);
rcondv.put(RCONDV_TIPORIGA, 'A');
rcondv.put(RCONDV_CODRIGA, rec.get(2));
rcondv.put(RCONDV_PREZZO, prz_ingr);
rcondv.write();
}
real prz_vend = rec.get(18); //legge il prezzo offerta ingrosso
prz_vend /=100;
if (prz_vend != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
{
TLocalisamfile condv(LF_CONDV);
condv.put(CONDV_TIPO, 'O');
TConfig config("cat2dl.ini","PARAMS");
TString4 offevend = config.get("OFFEVEND");
condv.put(CONDV_COD, offevend);
int err = condv.read();
if (err != NOERR) //se l'offerta indicata nell'ini non esiste..
{
condv.zero(); //..se la crea!
condv.put(CONDV_TIPO, 'O');
condv.put(CONDV_COD, offevend);
TDate dataini = rec.get(16);
TDate datafine = rec.get(17);
condv.put(CONDV_VALIN, dataini);
condv.put(CONDV_VALFIN, datafine);
condv.write();
}
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che l'offerta esiste andiamo in rcondv
rcondv.put(RCONDV_TIPO, 'O');
rcondv.put(RCONDV_COD, offevend);
rcondv.put(RCONDV_TIPORIGA, 'A');
rcondv.put(RCONDV_CODRIGA, rec.get(2));
rcondv.put(RCONDV_PREZZO, prz_vend);
rcondv.write();
}
}
/////////////////////////////////////////////////////
// Classe TCat2dl: applicazione principale //
/////////////////////////////////////////////////////
class TCat2dl: public TSkeleton_application
{
TMask* _msk;
TCat2dl_file* _trasfile;
TString _listingr, _listvend, _offeingr, _offevend;
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void);
void transfer(void);
void inizializza_file(void);
static bool annulla_handler(TMask_field& f, KEY k);
public:
const TMask& msk() const { return *_msk; }
TCat2dl() {}
virtual ~TCat2dl() {}
};
// restituisce un riferimento all' applicazione
inline TCat2dl& app() { return (TCat2dl&) main_app();}
// creazione dell'applicazione
bool TCat2dl::create()
{
open_files(LF_ANAMAG, LF_UMART, LF_CONDV, LF_RCONDV, 0);
_msk = new TMask("dl0800a");
_msk->set(F_FILENAME,DLFILENAME);
_trasfile = NULL;
TConfig config("cat2dl.ini","PARAMS");
_listingr = config.get("LISTINGR");
_listvend = config.get("LISTVEND");
_offeingr = config.get("OFFEINGR");
_offevend = config.get("OFFEVEND");
return TSkeleton_application::create();
}
// distruzione dell'applicazione
bool TCat2dl::destroy()
{
delete _msk;
return TSkeleton_application::destroy();
}
// carica la maschera
void TCat2dl::main_loop()
{
// Preimposta gli eventuali valori specificati sulla riga di comando
//error_box("Attenzione: manca la configurazione del trasferimento!");
KEY key = K_ENTER;
while (key != K_QUIT)
{
key = _msk->run();
if (key == K_ENTER)
transfer();
}
}
// trasferimento dati da file su archivi
void TCat2dl::transfer()
{
TFilename catdlini = "cat2dl.ini";
_trasfile = new TCat2dl_file(_msk->get(F_FILENAME), catdlini);
inizializza_file();
const long dimension = fsize(_msk->get(F_FILENAME));
TProgind pi(dimension,"Acquisizione in corso...");
TRelation rel(LF_ANAMAG);
TRectype& record = rel.curr(); //record corrente della relazione
TString str; // Stringa jolly di lavoro
TRecord_text curr;
while (_trasfile->read(curr) == NOERR)
{
pi.setstatus(_trasfile->read_file()->tellg());
// read del file dell'ANAMAG
str = curr.get(2); //legge il codart
rel.curr().put(ANAMAG_CODART, str);
int err = rel.read();
if (err != NOERR)
{
rel.curr().zero();
rel.curr().put(ANAMAG_CODART, str);
}
_trasfile->autosave(rel, curr); //esegue l'effettivo passaggio dati basandosi sulla formattazione del file .ini
}
_trasfile->close();
message_box("Operazione terminata");
}
//inizializza il file di testo su cui emettere i dati
void TCat2dl::inizializza_file()
{
TFilename filect = _msk->get(F_FILENAME); //aggiungere lettura automatica nomi file
_trasfile->open(filect,'r');
}
// handler per gestire la conferma dell'annullamento dei dati inseriti
// nella maschera
bool TCat2dl::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
if (k == K_SPACE)
{
if (yesno_box("Vuoi veramente annullare i dati inseriti"))
m.reset();
}
return TRUE;
}
// gestione dei messaggi estesi nei campi
void TCat2dl_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
if (code == "_UPPERCASE")
{
valore.upper();
}
else NFCHECK("Macro non definita: %s", (const char *)code);
str = valore;
}
int dl0800(int argc, char* argv[])
{
TCat2dl a ;
a.run(argc, argv, "Importazione catalogo");
return 0;
}

4
dl/dl0800a.h Executable file
View File

@ -0,0 +1,4 @@
// importazione catalogo
// definizione campi per maschera di selezione
#define F_FILENAME 102 // nome del file da cui scaricare i dati

35
dl/dl0800a.uml Executable file
View File

@ -0,0 +1,35 @@
#include "dl0800a.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 "Importazione catalogo" -1 -1 78 20
GROUPBOX DLG_NULL 77 9
BEGIN
PROMPT 1 1 "Selezioni per l'importazione"
END
STRING F_FILENAME 52
BEGIN
PROMPT 2 2 "Nome file "
CHECKTYPE REQUIRED
VALIDATE FILENAME_FUNC
FLAGS "A"
HELP "Nome del file da cui caricare i dati"
WARNING "E' necessario specificare un nome di file"
END
ENDPAGE
ENDMASK