Aggiunte a ba1 le seguenti funzioni :
- Stampa - Esportazione - Importazione - Editing dei file (incorporando ba1300 in ba1100) (ba1300 -> ba1102) git-svn-id: svn://10.65.10.50/trunk@14 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2bf6f6adf5
commit
da54026c24
402
ba/ba1100.cpp
402
ba/ba1100.cpp
@ -1,3 +1,4 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#include <xvtility.h>
|
#include <xvtility.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
@ -15,9 +16,10 @@
|
|||||||
|
|
||||||
class BA1100_application : public TApplication
|
class BA1100_application : public TApplication
|
||||||
{
|
{
|
||||||
TDir_sheet * _browse;
|
TDir_sheet * _browse;
|
||||||
TMask * _mask;
|
TMask * _mask;
|
||||||
long _firm;
|
long _firm;
|
||||||
|
TRec_sheet* _rec;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool menu (MENU_TAG);
|
virtual bool menu (MENU_TAG);
|
||||||
@ -30,33 +32,96 @@ virtual bool extended_firm() const { return TRUE; }
|
|||||||
void update();
|
void update();
|
||||||
void update_dir();
|
void update_dir();
|
||||||
void convert_dir();
|
void convert_dir();
|
||||||
|
virtual void print();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BA1100_application() : _browse(NULL) {}
|
BA1100_application() : _browse(NULL), _rec(NULL) {}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void BA1100_application::print()
|
||||||
|
|
||||||
|
{
|
||||||
|
if (_rec == NULL) return;
|
||||||
|
const char* table[] = {"", "Alfanumerico", "Intero", "Intero Lungo",
|
||||||
|
"Reale", "Data", "Intero", "Carattere",
|
||||||
|
"Booleano", "Intero Zerofilled",
|
||||||
|
"Intero Lungo Zerofilled"};
|
||||||
|
TPrinter& p = printer();
|
||||||
|
TPrintrow row;
|
||||||
|
TToken_string s;
|
||||||
|
|
||||||
|
p.open();
|
||||||
|
p.headerlen(6);
|
||||||
|
p.footerlen(4);
|
||||||
|
row.reset();
|
||||||
|
row.put(format("Lista tracciato %s (%s)", _rec->dir()->des(),
|
||||||
|
_rec->dir()->name()), 2);
|
||||||
|
row.put("Pag. @#", 66);
|
||||||
|
p.setheaderline(2, row);
|
||||||
|
row.reset();
|
||||||
|
row.put("Nome", 7);
|
||||||
|
row.put("Tipo", 18);
|
||||||
|
row.put("Lunghezza", 45);
|
||||||
|
row.put(" Decimali", 55);
|
||||||
|
row.put("Posizione", 65);
|
||||||
|
p.setheaderline(4, row);
|
||||||
|
p.setbackground("l[1,6,75,6]");
|
||||||
|
for (int i = 0; i < _rec->rec()->fields(); i ++)
|
||||||
|
{
|
||||||
|
row.reset();
|
||||||
|
s = _rec->rec()->fielddef(i);
|
||||||
|
row.put(format("%3d", i + 1), 2);
|
||||||
|
row.put(s.get(), 7);
|
||||||
|
row.put(table[s.get_int()], 18);
|
||||||
|
row.put(format(" %4d", s.get_int()), 45);
|
||||||
|
row.put(format(" %4d", s.get_int()), 55);
|
||||||
|
row.put(format(" %4d", _rec->rec()->rec()->Fd[i].RecOff), 65);
|
||||||
|
p.print(row);
|
||||||
|
}
|
||||||
|
p.formfeed();
|
||||||
|
row.reset();
|
||||||
|
row.put("Espressione chiave", 7);
|
||||||
|
row.put("Duplicabile", 68);
|
||||||
|
p.setheaderline(4, row);
|
||||||
|
for (i = 0; i < _rec->rec()->keys(); i ++)
|
||||||
|
{
|
||||||
|
row.reset();
|
||||||
|
s = _rec->rec()->keydef(i);
|
||||||
|
row.put(format("%3d", i + 1), 2);
|
||||||
|
row.put(s.get(), 7);
|
||||||
|
row.put(*s.get() == 'X' ? "Si" : "No", 68);
|
||||||
|
p.print(row);
|
||||||
|
}
|
||||||
|
p.formfeed();
|
||||||
|
p.close();
|
||||||
|
}
|
||||||
|
|
||||||
bool BA1100_application::create() // initvar e arrmask
|
bool BA1100_application::create() // initvar e arrmask
|
||||||
|
|
||||||
{
|
{
|
||||||
_firm = get_firm();
|
_firm = get_firm();
|
||||||
_mask = new TMask ("ba1100a");
|
_mask = new TMask ("ba1100a");
|
||||||
set_firm();
|
set_firm();
|
||||||
_browse = new TDir_sheet ("Manutenzione file di sistema") ;
|
set_printer(new TPrinter());
|
||||||
_browse->add_button(DLG_INSFILE, "Inserisce", K_F4);
|
_browse = new TDir_sheet ("Manutenzione file di sistema") ;
|
||||||
_browse->add_button(DLG_CONVERT, "Converte", K_F7);
|
_browse->add_button(DLG_INSFILE, "Inserisce", K_F4);
|
||||||
_browse->add_button(DLG_ADDFILE, "Aggiunge", K_F8);
|
_browse->add_button(DLG_CONVERT, "Converte", K_F7);
|
||||||
dispatch_e_menu(BAR_ITEM(1));
|
_browse->add_button(DLG_ADDFILE, "Aggiunge", K_F8);
|
||||||
return TRUE ;
|
dispatch_e_menu(BAR_ITEM(1));
|
||||||
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BA1100_application::destroy() // releasev e arrmask
|
bool BA1100_application::destroy() // releasev e arrmask
|
||||||
|
|
||||||
{
|
{
|
||||||
if (_firm) set_firm(_firm);
|
TPrinter* p = &printer();
|
||||||
if (_browse != NULL) delete _browse;
|
|
||||||
delete _mask;
|
delete p;
|
||||||
return TRUE ;
|
if (_firm) set_firm(_firm);
|
||||||
|
if (_browse != NULL) delete _browse;
|
||||||
|
delete _mask;
|
||||||
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,8 +149,8 @@ void BA1100_application::insert_riga (long riga_sel, TToken_string& riga)
|
|||||||
_browse->rec()->put (i + 1);
|
_browse->rec()->put (i + 1);
|
||||||
}
|
}
|
||||||
_browse->dir()->set(_mask->get(FLD_NOME), _mask->get_long(FLD_EOD),
|
_browse->dir()->set(_mask->get(FLD_NOME), _mask->get_long(FLD_EOD),
|
||||||
_mask->get_long(FLD_FLAG), _mask->get (FLD_DESC),
|
_mask->get_long(FLD_FLAG), _mask->get (FLD_DESC),
|
||||||
_mask->get (FLD_FORMULA));
|
_mask->get (FLD_FORMULA));
|
||||||
_browse->dir()->put(logicnum, _nordir, _sysdirop);
|
_browse->dir()->put(logicnum, _nordir, _sysdirop);
|
||||||
_browse->rec()->zero();
|
_browse->rec()->zero();
|
||||||
_browse->rec()->put(logicnum);
|
_browse->rec()->put(logicnum);
|
||||||
@ -99,8 +164,8 @@ void BA1100_application::insert_riga (long riga_sel, TToken_string& riga)
|
|||||||
void BA1100_application::edit_riga (long riga_sel, TToken_string& riga)
|
void BA1100_application::edit_riga (long riga_sel, TToken_string& riga)
|
||||||
|
|
||||||
{
|
{
|
||||||
KEY tasto;
|
KEY tasto;
|
||||||
FileDes dep;
|
FileDes dep;
|
||||||
TDir d;
|
TDir d;
|
||||||
const int logicnum = int(riga_sel) + 1;
|
const int logicnum = int(riga_sel) + 1;
|
||||||
|
|
||||||
@ -129,116 +194,119 @@ tasto = _mask->run();
|
|||||||
|
|
||||||
switch (tasto)
|
switch (tasto)
|
||||||
{
|
{
|
||||||
case K_F4:
|
case K_F4:
|
||||||
{
|
{
|
||||||
const TFilename filename(_mask->get(FLD_NOME));
|
const TFilename filename(_mask->get(FLD_NOME));
|
||||||
|
|
||||||
if (logicnum > 1)
|
if (logicnum > 1)
|
||||||
{
|
{
|
||||||
TEdit_file ef;
|
TEdit_file ef;
|
||||||
ef.browse(logicnum, filename);
|
ef.browse(logicnum, filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_F5:
|
case K_F5:
|
||||||
case K_F6:
|
case K_F6:
|
||||||
case K_F7:
|
case K_F7:
|
||||||
case K_F8:
|
case K_F8:
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
{
|
{
|
||||||
strcpy (dep.SysName,_mask->get (FLD_NOME));
|
strcpy (dep.SysName,_mask->get (FLD_NOME));
|
||||||
dep.EOD = atol(_mask->get (FLD_EOD));
|
dep.EOD = atol(_mask->get (FLD_EOD));
|
||||||
dep.Flags = atol(_mask->get (FLD_FLAG));
|
dep.Flags = atol(_mask->get (FLD_FLAG));
|
||||||
strcpy (dep.Des,_mask->get (FLD_DESC));
|
strcpy (dep.Des,_mask->get (FLD_DESC));
|
||||||
strcpy (dep.FCalc,_mask->get (FLD_FORMULA));
|
strcpy (dep.FCalc,_mask->get (FLD_FORMULA));
|
||||||
const TRecnotype eox = atol(_mask->get(FLD_EOX));
|
const TRecnotype eox = atol(_mask->get(FLD_EOX));
|
||||||
|
|
||||||
_browse->dir()->get(logicnum, _lock, _nordir, _sysdirop);
|
_browse->dir()->get(logicnum, _lock, _nordir, _sysdirop);
|
||||||
_browse->dir()->set(dep.SysName, dep.EOD, dep.Flags,
|
_browse->dir()->set(dep.SysName, dep.EOD, dep.Flags,
|
||||||
dep.Des, dep.FCalc);
|
dep.Des, dep.FCalc);
|
||||||
_browse->dir()->put(logicnum, _nordir, _sysdirop);
|
_browse->dir()->put(logicnum, _nordir, _sysdirop);
|
||||||
|
|
||||||
{
|
{
|
||||||
TSystemisamfile f(logicnum);
|
TSystemisamfile f(logicnum);
|
||||||
|
|
||||||
if (eox != oldeox)
|
if (eox != oldeox)
|
||||||
{
|
{
|
||||||
d.get(logicnum);
|
d.get(logicnum);
|
||||||
if (!fexist(d.name())) f.build(eox);
|
if (!fexist(d.name())) f.build(eox);
|
||||||
else f.extend(eox);
|
else f.extend(eox);
|
||||||
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
|
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
|
||||||
}
|
}
|
||||||
if (tasto == K_F5)
|
if (tasto == K_F5)
|
||||||
{
|
{
|
||||||
f.packfile();
|
f.packfile();
|
||||||
f.packindex();
|
f.packindex();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (tasto == K_F6)
|
if (tasto == K_F6)
|
||||||
{
|
{
|
||||||
TRec_sheet r(logicnum);
|
enable_menu_item(M_FILE_PRINT);
|
||||||
|
_rec = new TRec_sheet(logicnum);
|
||||||
|
_rec->edit();
|
||||||
|
delete _rec;
|
||||||
|
_rec = NULL;
|
||||||
|
disable_menu_item(M_FILE_PRINT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tasto == K_F7)
|
||||||
|
{
|
||||||
|
TMask m("ba1100b");
|
||||||
|
TFilename nout(dep.SysName);
|
||||||
|
|
||||||
r.edit();
|
nout.strip("$%");
|
||||||
}
|
nout.ext("txt");
|
||||||
else
|
m.set(FLD_OUTFILE, nout);
|
||||||
if (tasto == K_F7)
|
if (m.run() == K_ENTER)
|
||||||
{
|
{
|
||||||
TMask m("ba1100b");
|
const char fs = *esc(m.get(FLD_FS));
|
||||||
TFilename nout(dep.SysName);
|
const char fd = *esc(m.get(FLD_FD));
|
||||||
|
const char rs = *esc(m.get(FLD_RS));
|
||||||
|
const bool withdel = m.get(FLD_WITHDEL).not_empty();
|
||||||
|
|
||||||
nout.strip("$%");
|
f.dump(m.get(FLD_OUTFILE), atoi(m.get(FLD_KEYNO)), fs, fd, rs, withdel);
|
||||||
nout.ext("txt");
|
}
|
||||||
m.set(FLD_OUTFILE, nout);
|
}
|
||||||
if (m.run() == K_ENTER)
|
else
|
||||||
{
|
if (tasto == K_F8)
|
||||||
const char fs = *esc(m.get(FLD_FS));
|
{
|
||||||
const char fd = *esc(m.get(FLD_FD));
|
TMask m("ba1100c");
|
||||||
const char rs = *esc(m.get(FLD_RS));
|
TFilename ninp(dep.SysName);
|
||||||
const bool withdel = m.get(FLD_WITHDEL).not_empty();
|
|
||||||
|
|
||||||
f.dump(m.get(FLD_OUTFILE), atoi(m.get(FLD_KEYNO)), fs, fd, rs, withdel);
|
ninp.strip("$%");
|
||||||
}
|
ninp.ext("txt");
|
||||||
}
|
m.set(FLD_INFILE, ninp);
|
||||||
else
|
if (m.run() == K_ENTER)
|
||||||
if (tasto == K_F8)
|
{
|
||||||
{
|
char fs = *esc(m.get(FLD_FS));
|
||||||
TMask m("ba1100c");
|
char fd = *esc(m.get(FLD_FD));
|
||||||
TFilename ninp(dep.SysName);
|
char rs = *esc(m.get(FLD_RS));
|
||||||
|
|
||||||
ninp.strip("$%");
|
f.load(m.get(FLD_INFILE), fs, fd, rs);
|
||||||
ninp.ext("txt");
|
}
|
||||||
m.set(FLD_INFILE, ninp);
|
}
|
||||||
if (m.run() == K_ENTER)
|
}
|
||||||
{
|
}
|
||||||
char fs = *esc(m.get(FLD_FS));
|
break;
|
||||||
char fd = *esc(m.get(FLD_FD));
|
default:
|
||||||
char rs = *esc(m.get(FLD_RS));
|
break;
|
||||||
|
}
|
||||||
f.load(m.get(FLD_INFILE), fs, fd, rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BA1100_application::delete_riga ()
|
void BA1100_application::delete_riga ()
|
||||||
|
|
||||||
{
|
{
|
||||||
_browse->dir()->get(LF_DIR);
|
_browse->dir()->get(LF_DIR);
|
||||||
if (_browse->dir()->eod() == 0) return;
|
if (_browse->dir()->eod() == 0) return;
|
||||||
|
|
||||||
int logicnum = (int)_browse->items();
|
int logicnum = (int)_browse->items();
|
||||||
|
|
||||||
_browse->dir()->get(logicnum);
|
_browse->dir()->get(logicnum);
|
||||||
if (yesnocancel_box("Vuoi davvero eliminare l' archivio %s", _browse->dir()->name()) != K_YES) return;
|
if (yesnocancel_box("Vuoi davvero eliminare l' archivio %s", _browse->dir()->name()) != K_YES) return;
|
||||||
_browse->dir()->get(LF_DIR);
|
_browse->dir()->get(LF_DIR);
|
||||||
_browse->dir()->eod()--;
|
_browse->dir()->eod()--;
|
||||||
_browse->set_items(_browse->dir()->eod());
|
_browse->set_items(_browse->dir()->eod());
|
||||||
_browse->dir()->put(LF_DIR);
|
_browse->dir()->put(LF_DIR);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,22 +329,22 @@ void BA1100_application::update_dir()
|
|||||||
|
|
||||||
for (int i = 2; i <= items; i++)
|
for (int i = 2; i <= items; i++)
|
||||||
{
|
{
|
||||||
prefhndl->set("");
|
prefhndl->set("");
|
||||||
d.get(i, _nolock, _nordir, _sysdirop);
|
d.get(i, _nolock, _nordir, _sysdirop);
|
||||||
if (d.flags() == -1)
|
if (d.flags() == -1)
|
||||||
{
|
{
|
||||||
TString s(d.name());
|
TString s(d.name());
|
||||||
word len = d.len();
|
word len = d.len();
|
||||||
prefhndl->set(pref);
|
prefhndl->set(pref);
|
||||||
d.get(i, _nolock, _nordir, _sysdirop);
|
d.get(i, _nolock, _nordir, _sysdirop);
|
||||||
if (len != d.len() && s != d.name())
|
if (len != d.len() && s != d.name())
|
||||||
{
|
{
|
||||||
d.set(s, d.eox(), 0L, d.des(), d.expr());
|
d.set(s, d.eox(), 0L, d.des(), d.expr());
|
||||||
d.put(i, _nordir, _sysdirop);
|
d.put(i, _nordir, _sysdirop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
prefhndl->set(pref);
|
prefhndl->set(pref);
|
||||||
|
|
||||||
if (items >= orig_items) return;
|
if (items >= orig_items) return;
|
||||||
|
|
||||||
@ -319,7 +387,7 @@ void BA1100_application::convert_dir()
|
|||||||
void BA1100_application::update()
|
void BA1100_application::update()
|
||||||
|
|
||||||
{
|
{
|
||||||
long firm = get_firm();
|
long firm = get_firm();
|
||||||
TString pref;
|
TString pref;
|
||||||
if (firm == 0) pref = prefhndl->name();
|
if (firm == 0) pref = prefhndl->name();
|
||||||
|
|
||||||
@ -337,13 +405,13 @@ void BA1100_application::update()
|
|||||||
|
|
||||||
for (ditte.first(); !ditte.eof(); ditte.next())
|
for (ditte.first(); !ditte.eof(); ditte.next())
|
||||||
{
|
{
|
||||||
set_firm(ditte.get_long("CODDITTA"));
|
set_firm(ditte.get_long("CODDITTA"));
|
||||||
const TRecnotype rec = ditte.recno();
|
const TRecnotype rec = ditte.recno();
|
||||||
ditte.close();
|
ditte.close();
|
||||||
update_dir();
|
update_dir();
|
||||||
convert_dir();
|
convert_dir();
|
||||||
ditte.open();
|
ditte.open();
|
||||||
ditte.readat(rec);
|
ditte.readat(rec);
|
||||||
}
|
}
|
||||||
if (firm > 0) set_firm(firm);
|
if (firm > 0) set_firm(firm);
|
||||||
else prefhndl->set(pref);
|
else prefhndl->set(pref);
|
||||||
@ -352,57 +420,57 @@ void BA1100_application::update()
|
|||||||
|
|
||||||
bool BA1100_application::menu(MENU_TAG m)
|
bool BA1100_application::menu(MENU_TAG m)
|
||||||
{
|
{
|
||||||
TToken_string riga;
|
TToken_string riga;
|
||||||
long riga_selezionata;
|
long riga_selezionata;
|
||||||
bool done = FALSE;
|
bool done = FALSE;
|
||||||
|
|
||||||
_browse->rebuild();
|
_browse->rebuild();
|
||||||
|
|
||||||
while (!done)
|
while (!done)
|
||||||
{
|
{
|
||||||
|
|
||||||
disable_menu_item(M_FILE_NEW);
|
disable_menu_item(M_FILE_NEW);
|
||||||
|
|
||||||
switch (_browse->run())
|
switch (_browse->run())
|
||||||
{
|
{
|
||||||
case K_INS:
|
case K_INS:
|
||||||
riga_selezionata = _browse->selected();
|
riga_selezionata = _browse->selected();
|
||||||
riga = _browse->row();
|
riga = _browse->row();
|
||||||
insert_riga (riga_selezionata, riga);
|
insert_riga (riga_selezionata, riga);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
riga_selezionata = _browse->selected();
|
riga_selezionata = _browse->selected();
|
||||||
riga = _browse->row();
|
riga = _browse->row();
|
||||||
edit_riga (riga_selezionata, riga);
|
edit_riga (riga_selezionata, riga);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case K_DEL: delete_riga(); break;
|
case K_DEL: delete_riga(); break;
|
||||||
|
|
||||||
case K_ESC: done = TRUE; break;
|
case K_ESC: done = TRUE; break;
|
||||||
|
|
||||||
case K_F7: update(); break;
|
case K_F7: update(); break;
|
||||||
|
|
||||||
case K_F8:
|
case K_F8:
|
||||||
_browse->add();
|
_browse->add();
|
||||||
riga_selezionata = _browse->items() - 1;
|
riga_selezionata = _browse->items() - 1;
|
||||||
riga = _browse->row(riga_selezionata);
|
riga = _browse->row(riga_selezionata);
|
||||||
edit_riga (riga_selezionata, riga);
|
edit_riga (riga_selezionata, riga);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
enable_menu_item(M_FILE_NEW);
|
enable_menu_item(M_FILE_NEW);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ba1100(int argc, char* argv[], bool insmode)
|
int ba1100(int argc, char* argv[], bool insmode)
|
||||||
{
|
{
|
||||||
BA1100_application a;
|
BA1100_application a;
|
||||||
|
|
||||||
a.run(argc, argv, "Gestione files");
|
a.run(argc, argv, "Gestione files");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
39
ba/ba1100.h
39
ba/ba1100.h
@ -10,12 +10,12 @@
|
|||||||
|
|
||||||
class TDir_sheet : public TSheet
|
class TDir_sheet : public TSheet
|
||||||
{
|
{
|
||||||
TTrec *_rec;
|
TTrec *_rec;
|
||||||
TDir *_dir;
|
TDir *_dir;
|
||||||
FileDes _s_dir;
|
FileDes _s_dir;
|
||||||
long _items;
|
long _items;
|
||||||
|
|
||||||
protected: set_firm();
|
protected: set_firm();
|
||||||
|
|
||||||
void page_build(long first, byte rows);
|
void page_build(long first, byte rows);
|
||||||
|
|
||||||
@ -33,29 +33,24 @@ public:
|
|||||||
|
|
||||||
class TRec_sheet : public TObject
|
class TRec_sheet : public TObject
|
||||||
{
|
{
|
||||||
TTrec *_rec;
|
TTrec *_rec;
|
||||||
TTrec *_rec_old;
|
TTrec *_rec_old;
|
||||||
TDir *_dir;
|
TDir *_dir;
|
||||||
bool _comfile;
|
bool _comfile;
|
||||||
static TMask *_mask;
|
static TMask *_mask;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void update_keys(int from, int shift);
|
bool check_key_expr(int key, const char* key_expr);
|
||||||
const char* build_key_expr(int key);
|
static bool fld_notify(int r, KEY k);
|
||||||
bool check_key_expr(int key, const char* key_expr);
|
static bool key_notify(int r, KEY k);
|
||||||
void update_key_expr(int key, TToken_string& s);
|
void save();
|
||||||
const char* build_field(int nfld);
|
virtual long items() const { return _rec->fields(); }
|
||||||
void update_field(int nfld, TToken_string& s);
|
|
||||||
static bool fld_notify(int r, KEY k);
|
|
||||||
static bool key_notify(int r, KEY k);
|
|
||||||
void save();
|
|
||||||
virtual long items() const { return _rec->items(); }
|
|
||||||
TDir* dir() const { return _dir; }
|
|
||||||
TTrec* rec() const { return _rec; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TRec_sheet(int logicnum);
|
TRec_sheet(int logicnum);
|
||||||
~TRec_sheet();
|
~TRec_sheet();
|
||||||
|
TDir* dir() const { return _dir; }
|
||||||
|
TTrec* rec() const { return _rec; }
|
||||||
void edit();
|
void edit();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
358
ba/ba1100d.uml
358
ba/ba1100d.uml
@ -1,179 +1,179 @@
|
|||||||
#include <defmask.h>
|
#include <defmask.h>
|
||||||
#include "ba1100a.h"
|
#include "ba1100a.h"
|
||||||
|
|
||||||
TOOLBAR "" 0 20 0 2
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
BUTTON DLG_SAVEREC 8 2
|
BUTTON DLG_SAVEREC 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -16 -1 ""
|
PROMPT -16 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_PRINT 8 2
|
BUTTON DLG_PRINT 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -26 -1 "Stampa"
|
PROMPT -26 -1 "Stampa"
|
||||||
MESSAGE K_F5
|
MESSAGE EXIT,K_F5
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_EXPORT 8 2
|
BUTTON DLG_EXPORT 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -36 -1 "Esporta"
|
PROMPT -36 -1 "Esporta"
|
||||||
MESSAGE K_F6
|
MESSAGE EXIT,K_F6
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_IMPORT 8 2
|
BUTTON DLG_IMPORT 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -46 -1 "Importa"
|
PROMPT -46 -1 "Importa"
|
||||||
MESSAGE K_F7
|
MESSAGE EXIT,K_F7
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 8 2
|
BUTTON DLG_CANCEL 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -56 -1 ""
|
PROMPT -56 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
PAGE "Modifica Tracciato Record - Campi" -1 -1 77 20
|
PAGE "Modifica Tracciato Record - Campi" -1 -1 77 20
|
||||||
|
|
||||||
NUMBER F_NUM 4
|
NUMBER F_NUM 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "Archivio n. "
|
PROMPT 1 1 "Archivio n. "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DES 50
|
STRING F_DES 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 20 1 ""
|
PROMPT 20 1 ""
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
SPREADSHEET F_FIELDS 0 7
|
SPREADSHEET F_FIELDS 34 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 16 4 ""
|
PROMPT 15 4 ""
|
||||||
ITEM "Nome@10"
|
ITEM "Nome@10"
|
||||||
ITEM "Tipo"
|
ITEM "Tipo"
|
||||||
ITEM "Lunghezza"
|
ITEM "Lunghezza"
|
||||||
ITEM "Decimali"
|
ITEM "Decimali"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
SPREADSHEET F_KEYS
|
SPREADSHEET F_KEYS
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 13 ""
|
PROMPT 1 13 ""
|
||||||
ITEM "Espressione@60"
|
ITEM "Espressione@60"
|
||||||
ITEM "Chiavi duplicate"
|
ITEM "Chiavi duplicate"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
PAGE "Campo" -1 -1 60 9
|
PAGE "Campo" -1 -1 60 9
|
||||||
|
|
||||||
STRING F_NUMF 3 3
|
STRING F_NUMF 3 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 1 "Numero "
|
PROMPT 2 1 "Numero "
|
||||||
FLAGS "DR"
|
FLAGS "DR"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_NOMEF 10
|
STRING F_NOMEF 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Nome "
|
PROMPT 2 2 "Nome "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
HELP "Inserire il nome"
|
HELP "Inserire il nome"
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST FLD_TIPO 20
|
LIST FLD_TIPO 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 3 "Tipo "
|
PROMPT 2 3 "Tipo "
|
||||||
HELP "Inserire il tipo"
|
HELP "Inserire il tipo"
|
||||||
ITEM "1|Alfanumerico"
|
ITEM "1|Alfanumerico"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "2|Intero"
|
ITEM "2|Intero"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "3|Intero Lungo"
|
ITEM "3|Intero Lungo"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "4|Reale"
|
ITEM "4|Reale"
|
||||||
MESSAGE ENABLE,FLD_LEN|ENABLE,FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|ENABLE,FLD_DEC
|
||||||
ITEM "5|Data"
|
ITEM "5|Data"
|
||||||
MESSAGE DISABLE,FLD_LEN|"6",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE DISABLE,FLD_LEN|"6",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "6|Intero"
|
ITEM "6|Intero"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "7|Carattere"
|
ITEM "7|Carattere"
|
||||||
MESSAGE DISABLE,FLD_LEN|"1",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE DISABLE,FLD_LEN|"1",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "8|Booleano"
|
ITEM "8|Booleano"
|
||||||
MESSAGE DISABLE,FLD_LEN|"1",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE DISABLE,FLD_LEN|"1",FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "9|Intero Zerofilled"
|
ITEM "9|Intero Zerofilled"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
ITEM "10|Intero Lungo Zerofilled"
|
ITEM "10|Intero Lungo Zerofilled"
|
||||||
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
MESSAGE ENABLE,FLD_LEN|DISABLE,FLD_DEC|"0",FLD_DEC
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER FLD_LEN 3
|
NUMBER FLD_LEN 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 4 "Lunghezza "
|
PROMPT 2 4 "Lunghezza "
|
||||||
FLAGS "R"
|
FLAGS "R"
|
||||||
HELP "Inserire la lunghezza"
|
HELP "Inserire la lunghezza"
|
||||||
WARNING "Numero lunghezza campo errata"
|
WARNING "Numero lunghezza campo errata"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER FLD_DEC 2
|
NUMBER FLD_DEC 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 5 "Decimali "
|
PROMPT 2 5 "Decimali "
|
||||||
FLAGS "R"
|
FLAGS "R"
|
||||||
HELP "Inserire i decimali"
|
HELP "Inserire i decimali"
|
||||||
NUM_EXPR {(#THIS_FIELD>=0) && (#THIS_FIELD+2<=#FLD_LEN)}
|
NUM_EXPR {(#THIS_FIELD>=0) && (#THIS_FIELD+2<=#FLD_LEN)}
|
||||||
WARNING "Numero di decimali errato"
|
WARNING "Numero di decimali errato"
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_OK 8 2
|
BUTTON DLG_OK 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -13 -1 ""
|
PROMPT -13 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 8 2
|
BUTTON DLG_CANCEL 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -23 -1 ""
|
PROMPT -23 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_DELREC 8 2
|
BUTTON DLG_DELREC 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -33 -1 "Elimina"
|
PROMPT -33 -1 "Elimina"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
PAGE "Chiave" -1 -1 77 9
|
PAGE "Chiave" -1 -1 77 9
|
||||||
|
|
||||||
STRING F_KEXPR 60
|
STRING F_KEXPR 60
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 2 "Espressione "
|
PROMPT 1 2 "Espressione "
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
END
|
END
|
||||||
|
|
||||||
BOOLEAN F_KDUP
|
BOOLEAN F_KDUP
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 4 "Chiavi duplicate"
|
PROMPT 1 4 "Chiavi duplicate"
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_OK 8 2
|
BUTTON DLG_OK 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -13 -1 ""
|
PROMPT -13 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 8 2
|
BUTTON DLG_CANCEL 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -23 -1 ""
|
PROMPT -23 -1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_DELREC 8 2
|
BUTTON DLG_DELREC 8 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -33 -1 "Elimina"
|
PROMPT -33 -1 "Elimina"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
|
25
ba/ba1100f.uml
Executable file
25
ba/ba1100f.uml
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#include <defmask.h>
|
||||||
|
#include "ba1100a.h"
|
||||||
|
|
||||||
|
PAGE "Esportazione/Importazione tracciati" -1 -1 75 5
|
||||||
|
|
||||||
|
STRING F_NOMEF 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "File "
|
||||||
|
FLAGS ""
|
||||||
|
HELP "Inserire il nome del file di esportazione/importazione"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_OK 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -12 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_CANCEL 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -22 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
ENDMASK
|
391
ba/ba1101.cpp
391
ba/ba1101.cpp
@ -1,7 +1,9 @@
|
|||||||
// Includo stdio senno' dice che ridefinisco FILE
|
// Includo stdio senno' dice che ridefinisco FILE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <fstream.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <applicat.h>
|
||||||
#include <files.h>
|
#include <files.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <expr.h>
|
#include <expr.h>
|
||||||
@ -13,10 +15,9 @@
|
|||||||
#include <validate.h>
|
#include <validate.h>
|
||||||
|
|
||||||
#include "ba1100.h"
|
#include "ba1100.h"
|
||||||
#define INVFLD 255
|
|
||||||
|
|
||||||
TMask* TRec_sheet::_mask = NULL;
|
TMask* TRec_sheet::_mask = NULL;
|
||||||
HIDDEN TToken_string s(256);
|
HIDDEN TToken_string s(256);
|
||||||
|
|
||||||
|
|
||||||
void TDir_sheet::add ()
|
void TDir_sheet::add ()
|
||||||
@ -35,7 +36,7 @@ void TDir_sheet::add ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
TDir_sheet::TDir_sheet(const char* title)
|
TDir_sheet::TDir_sheet(const char* title)
|
||||||
: TSheet(-1,-1, 0, 0, title,"N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Formula@33|Flags@7", 0xC)
|
: TSheet(-1,-1, 0, 0, title,"N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Formula@33|Flags@7", 0xC)
|
||||||
{
|
{
|
||||||
_dir = new TDir;
|
_dir = new TDir;
|
||||||
_rec = new TTrec;
|
_rec = new TTrec;
|
||||||
@ -51,279 +52,217 @@ TDir_sheet::~TDir_sheet()
|
|||||||
void TDir_sheet::page_build(long first, byte rows)
|
void TDir_sheet::page_build(long first, byte rows)
|
||||||
|
|
||||||
{
|
{
|
||||||
TToken_string l(128);
|
TToken_string l(128);
|
||||||
|
|
||||||
for (byte i = 0; i < rows; i++)
|
for (byte i = 0; i < rows; i++)
|
||||||
{
|
{
|
||||||
const int n = int(i+first+1);
|
const int n = int(i+first+1);
|
||||||
_dir->get (n,_nolock,_nordir,_sysdirop);
|
_dir->get (n,_nolock,_nordir,_sysdirop);
|
||||||
|
|
||||||
l = format("%3d", n); // Numero progressivo del file
|
l = format("%3d", n); // Numero progressivo del file
|
||||||
l.add(_dir->name());
|
l.add(_dir->name());
|
||||||
const TRecnotype eod = _dir->eod();
|
const TRecnotype eod = _dir->eod();
|
||||||
l.add(format("%ld", eod));
|
l.add(format("%ld", eod));
|
||||||
const TRecnotype eox = _dir->eox();
|
const TRecnotype eox = _dir->eox();
|
||||||
l.add(format("%ld", eox));
|
l.add(format("%ld", eox));
|
||||||
const word len = _dir->len();
|
const word len = _dir->len();
|
||||||
l.add(format("%u", len));
|
l.add(format("%u", len));
|
||||||
l.add(_dir->des());
|
l.add(_dir->des());
|
||||||
l.add(_dir->expr());
|
l.add(_dir->expr());
|
||||||
l.add(format("%ld", _dir->flags()));
|
l.add(format("%ld", _dir->flags()));
|
||||||
set_row(l, i);
|
set_row(l, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TRec_sheet::TRec_sheet(int logicnum)
|
TRec_sheet::TRec_sheet(int logicnum)
|
||||||
|
|
||||||
{
|
{
|
||||||
_dir = new TDir;
|
_dir = new TDir;
|
||||||
_rec = new TTrec;
|
_rec = new TTrec;
|
||||||
_rec_old = new TTrec;
|
_rec_old = new TTrec;
|
||||||
_mask = new TMask("ba1100d");
|
_mask = new TMask("ba1100d");
|
||||||
|
|
||||||
_dir->get(logicnum, _lock, _nordir, _sysdirop);
|
_dir->get(logicnum, _lock, _nordir, _sysdirop);
|
||||||
_rec->get(logicnum);
|
_rec->get(logicnum);
|
||||||
*_rec_old = *_rec;
|
*_rec_old = *_rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRec_sheet::~TRec_sheet()
|
TRec_sheet::~TRec_sheet()
|
||||||
{
|
{
|
||||||
delete _dir;
|
delete _dir;
|
||||||
delete _rec;
|
delete _rec;
|
||||||
delete _rec_old;
|
delete _rec_old;
|
||||||
delete _mask;
|
delete _mask;
|
||||||
_mask = NULL;
|
_mask = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TRec_sheet::update_keys(int from, int shift)
|
|
||||||
|
|
||||||
{
|
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
|
||||||
for (int i = 0 ; i < rdes->NKeys; i++)
|
|
||||||
for (int j = 0 ; j < rdes->Ky[i].NkFields; j++)
|
|
||||||
{
|
|
||||||
const int nfld = rdes->Ky[i].FieldSeq[j] - (rdes->Ky[i].FieldSeq[j] > MaxFields ? MaxFields : 0);
|
|
||||||
|
|
||||||
if (nfld > from) rdes->Ky[i].FieldSeq[j] += shift;
|
|
||||||
else
|
|
||||||
if (nfld == from)
|
|
||||||
{
|
|
||||||
if (shift < 0)
|
|
||||||
{
|
|
||||||
rdes->Ky[i].NkFields--;
|
|
||||||
for (int k = rdes->Ky[i].NkFields; k > j; k--)
|
|
||||||
rdes->Ky[i].FieldSeq[j] = rdes->Ky[i].FieldSeq[j + 1];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (nfld >= from) rdes->Ky[i].FieldSeq[j] += shift;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* TRec_sheet::build_key_expr(int key)
|
|
||||||
|
|
||||||
{
|
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
|
||||||
s = "";
|
|
||||||
for (int j = 0 ; j < rdes->Ky[key].NkFields; j++)
|
|
||||||
{
|
|
||||||
const bool upper = rdes->Ky[key].FieldSeq[j] > MaxFields;
|
|
||||||
const int nfld = rdes->Ky[key].FieldSeq[j] - (upper ? MaxFields : 0);
|
|
||||||
if (j) s << "+";
|
|
||||||
if (upper) s << "UPPER(";
|
|
||||||
s << rdes->Fd[nfld].Name;
|
|
||||||
if (rdes->Ky[key].FromCh[j] < INVFLD)
|
|
||||||
s << format("[%d,%d]", rdes->Ky[key].FromCh[j] + 1,
|
|
||||||
rdes->Ky[key].ToCh[j] + 1);
|
|
||||||
else
|
|
||||||
if (upper) s << ")";
|
|
||||||
}
|
|
||||||
s.add(rdes->Ky[key].DupKeys ? "X" : " ");
|
|
||||||
return (const char*) s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TRec_sheet::check_key_expr(int key, const char * key_expr)
|
bool TRec_sheet::check_key_expr(int key, const char * key_expr)
|
||||||
|
|
||||||
{
|
{
|
||||||
TExpression expr("", _strexpr);
|
TExpression expr("", _strexpr);
|
||||||
return expr.set(key_expr, _strexpr);
|
return expr.set(key_expr, _strexpr);
|
||||||
}
|
|
||||||
|
|
||||||
void TRec_sheet::update_key_expr(int key, TToken_string& s)
|
|
||||||
|
|
||||||
{
|
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
|
||||||
TExpression expr("", _strexpr);
|
|
||||||
TString ke(s.get());
|
|
||||||
|
|
||||||
if (expr.set((const char*) ke, _strexpr))
|
|
||||||
{
|
|
||||||
rdes->Ky[key].DupKeys = (*s.get() != ' ');
|
|
||||||
TCodearray& c = expr.code();
|
|
||||||
c.begin();
|
|
||||||
int n = 0;
|
|
||||||
while (!c.end())
|
|
||||||
{
|
|
||||||
TCode& inst = c.step();
|
|
||||||
TCodesym sym = inst.getsym();
|
|
||||||
|
|
||||||
if (sym == _variable)
|
|
||||||
{
|
|
||||||
const char* s = inst.string();
|
|
||||||
|
|
||||||
for (int i = 0; i <rdes->NFields; i++)
|
|
||||||
if (strcmp(rdes->Fd[i].Name, s) == 0) break;
|
|
||||||
|
|
||||||
rdes->Ky[key].FieldSeq[n] = i;
|
|
||||||
rdes->Ky[key].FromCh[n] = INVFLD;
|
|
||||||
rdes->Ky[key].FromCh[n] = INVFLD;
|
|
||||||
inst = c.step();
|
|
||||||
sym = inst.getsym();
|
|
||||||
if (sym == _upper)
|
|
||||||
rdes->Ky[key].FieldSeq[n] += MaxFields;
|
|
||||||
else
|
|
||||||
if (sym == _number)
|
|
||||||
{
|
|
||||||
rdes->Ky[key].FromCh[n] = inst.number().integer() - 1;
|
|
||||||
inst = c.step();
|
|
||||||
rdes->Ky[key].ToCh[n] = inst.number().integer() - 1;
|
|
||||||
inst = c.step();
|
|
||||||
}
|
|
||||||
else c.backtrace();
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rdes->Ky[key].NkFields = n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* TRec_sheet::build_field(int nfld)
|
|
||||||
|
|
||||||
{
|
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
|
||||||
// s.format("%d", nfld+1);
|
|
||||||
s = "";
|
|
||||||
s.add((const char*)rdes->Fd[nfld].Name);
|
|
||||||
s.add(format("%d", rdes->Fd[nfld].TypeF));
|
|
||||||
s.add(format("%d", rdes->Fd[nfld].Len));
|
|
||||||
s.add(format("%d", rdes->Fd[nfld].Dec));
|
|
||||||
return (const char*) s;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TRec_sheet::update_field(int nfld, TToken_string& s)
|
|
||||||
|
|
||||||
{
|
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
|
||||||
// s.get();
|
|
||||||
strcpy(rdes->Fd[nfld].Name, s.get());
|
|
||||||
rdes->Fd[nfld].TypeF = atoi(s.get());
|
|
||||||
rdes->Fd[nfld].Len = atoi(s.get());
|
|
||||||
rdes->Fd[nfld].Dec = atoi(s.get());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HIDDEN bool len_handler(TMask_field& f, KEY key)
|
HIDDEN bool len_handler(TMask_field& f, KEY key)
|
||||||
|
|
||||||
{
|
{
|
||||||
const int len = atoi(f.get());
|
const int len = atoi(f.get());
|
||||||
|
|
||||||
if (len < 0) return FALSE;
|
if (len < 0) return FALSE;
|
||||||
|
|
||||||
const int typef = atoi(f.mask().get(FLD_TIPO));
|
const int typef = atoi(f.mask().get(FLD_TIPO));
|
||||||
|
|
||||||
switch (typef)
|
switch (typef)
|
||||||
{
|
{
|
||||||
case _alfafld: return len <= INVFLD;
|
case _alfafld: return len <= 254;
|
||||||
case _intfld: return len <= 5;
|
case _intfld: return len <= 5;
|
||||||
case _longfld: return len <= 10;
|
case _longfld: return len <= 10;
|
||||||
case _realfld: return len <= 18;
|
case _realfld: return len <= 18;
|
||||||
case _wordfld: return len <= 5;
|
case _wordfld: return len <= 5;
|
||||||
case _intzerofld: return len <= 5;
|
case _intzerofld: return len <= 5;
|
||||||
case _longzerofld: return len <= 10;
|
case _longzerofld: return len <= 10;
|
||||||
default: return TRUE;
|
default: return TRUE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TRec_sheet::fld_notify(int r, KEY k)
|
bool TRec_sheet::fld_notify(int r, KEY k)
|
||||||
|
|
||||||
{
|
{
|
||||||
const TSheet_field& f = (const TSheet_field&) _mask->field(F_FIELDS);
|
const TSheet_field& f = (const TSheet_field&) _mask->field(F_FIELDS);
|
||||||
|
|
||||||
if (k == K_SPACE)
|
if (k == K_SPACE)
|
||||||
{
|
{
|
||||||
TMask& m = f.sheet_mask();
|
TMask& m = f.sheet_mask();
|
||||||
|
|
||||||
m.set(F_NUMF, r + 1);
|
m.set(F_NUMF, r + 1);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TRec_sheet::key_notify(int r, KEY k)
|
bool TRec_sheet::key_notify(int r, KEY k)
|
||||||
|
|
||||||
{
|
{
|
||||||
const TSheet_field& f = (const TSheet_field&) _mask->field(F_KEYS);
|
const TSheet_field& f = (const TSheet_field&) _mask->field(F_KEYS);
|
||||||
|
|
||||||
if (k == K_SPACE)
|
if (k == K_SPACE)
|
||||||
{
|
{
|
||||||
TMask& m = f.sheet_mask();
|
TMask& m = f.sheet_mask();
|
||||||
|
|
||||||
m.enable(F_KDUP, r > 0);
|
m.enable(F_KDUP, r > 0);
|
||||||
if (r == 0) m.reset(F_KDUP);
|
if (r == 0) m.reset(F_KDUP);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (k == K_INS && f.items() >= 8) return FALSE;
|
if (k == K_INS && f.items() >= 8) return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRec_sheet::save()
|
void TRec_sheet::save()
|
||||||
|
|
||||||
{
|
{
|
||||||
if (*_rec == *_rec_old ||
|
if (*_rec == *_rec_old ||
|
||||||
!yesnocancel_box("Devo salvare le modifiche")) return;
|
!yesnocancel_box("Devo salvare le modifiche")) return;
|
||||||
TSystemisamfile f(_rec->num());
|
TSystemisamfile f(_rec->num());
|
||||||
|
|
||||||
f.update(*_rec);
|
f.update(*_rec);
|
||||||
*_rec_old = *_rec;
|
*_rec_old = *_rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TRec_sheet::edit()
|
void TRec_sheet::edit()
|
||||||
|
|
||||||
{
|
{
|
||||||
TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS);
|
TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS);
|
||||||
TSheet_field& f2 = (TSheet_field&) _mask->field(F_KEYS);
|
TSheet_field& f2 = (TSheet_field&) _mask->field(F_KEYS);
|
||||||
RecDes *rdes = _rec->rec();
|
|
||||||
|
_mask->set (F_NUM, _dir->num());
|
||||||
|
_mask->set (F_DES, _dir->des());
|
||||||
|
f1.set_notify(fld_notify);
|
||||||
|
f1.sheet_mask().field(FLD_LEN).set_handler(len_handler);
|
||||||
|
int nfields = _rec->fields();
|
||||||
|
for (int i = 0; i < nfields; i++) f1.row(i) = _rec->fielddef(i);
|
||||||
|
f2.set_notify(key_notify);
|
||||||
|
int nkeys = _rec->keys();
|
||||||
|
for (i = 0; i < nkeys; i++) f2.row(i) = _rec->keydef(i);
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
switch (_mask->run())
|
||||||
|
{
|
||||||
|
case K_SAVE:
|
||||||
|
{
|
||||||
|
nfields = f1.items();
|
||||||
|
_rec->set_fields(nfields);
|
||||||
|
for (i = 0; i < nfields; i++)
|
||||||
|
{
|
||||||
|
TToken_string& s = f1.row(i);
|
||||||
|
_rec->update_fielddef(i, s);
|
||||||
|
}
|
||||||
|
_rec->rehash();
|
||||||
|
nkeys = f2.items();
|
||||||
|
_rec->set_keys(nkeys);
|
||||||
|
for (i = 0; i < nkeys; i++)
|
||||||
|
{
|
||||||
|
TToken_string& s = f2.row(i);
|
||||||
|
_rec->update_keydef(i, s);
|
||||||
|
}
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
case K_ESC:
|
||||||
|
return;
|
||||||
|
case K_F5:
|
||||||
|
MainApp()->dispatch_e_menu(M_FILE_PRINT);
|
||||||
|
break;
|
||||||
|
case K_F6:
|
||||||
|
{
|
||||||
|
TMask m("ba1100f");
|
||||||
|
TFilename nout(_dir->name());
|
||||||
|
|
||||||
_mask->set (F_NUM, _dir->num());
|
nout.strip("$%");
|
||||||
_mask->set (F_DES, _dir->des());
|
nout.ext("trr");
|
||||||
f1.set_notify(fld_notify);
|
m.set(F_NOMEF, nout);
|
||||||
f1.sheet_mask().field(FLD_LEN).set_handler(len_handler);
|
if (m.run() == K_ENTER)
|
||||||
for (int i = 0; i < rdes->NFields; i++) f1.row(i) = build_field(i);
|
{
|
||||||
f2.set_notify(key_notify);
|
TString80 nf(m.get(F_NOMEF));
|
||||||
for (i = 0; i < rdes->NKeys; i++) f2.row(i) = build_key_expr(i);
|
|
||||||
if (_mask->run() == K_SAVE)
|
if (nf.not_empty())
|
||||||
{
|
{
|
||||||
rdes->NFields = f1.items();
|
ofstream out((const char*) nf);
|
||||||
for (i = 0; i < rdes->NFields; i++)
|
|
||||||
{
|
out << *_rec;
|
||||||
TToken_string& s = f1.row(i);
|
}
|
||||||
update_field(i, s);
|
}
|
||||||
}
|
}
|
||||||
_rec->rehash();
|
break;
|
||||||
rdes->NKeys = f2.items();
|
case K_F7:
|
||||||
for (i = 0; i < rdes->NKeys; i++)
|
{
|
||||||
{
|
TMask m("ba1100f");
|
||||||
TToken_string& s = f2.row(i);
|
TFilename nout(_dir->name());
|
||||||
update_key_expr(i, s);
|
|
||||||
}
|
nout.strip("$%");
|
||||||
save();
|
nout.ext("trr");
|
||||||
}
|
m.set(F_NOMEF, nout);
|
||||||
|
if (m.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
TString80 nf(m.get(F_NOMEF));
|
||||||
|
|
||||||
|
if (nf.not_empty())
|
||||||
|
{
|
||||||
|
ifstream in((const char*) nf);
|
||||||
|
|
||||||
|
in >> *_rec;
|
||||||
|
nfields = _rec->fields();
|
||||||
|
f1.reset();
|
||||||
|
for (i = 0; i < nfields; i++) f1.row(i) = _rec->fielddef(i);
|
||||||
|
nkeys = _rec->keys();
|
||||||
|
f2.reset();
|
||||||
|
for (i = 0; i < nkeys; i++) f2.row(i) = _rec->keydef(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
272
ba/ba1102.cpp
272
ba/ba1102.cpp
@ -1,72 +1,200 @@
|
|||||||
// Includo stdio senno' dice che ridefinisco FILE
|
#include <relation.h>
|
||||||
#include <stdio.h>
|
#include <mask.h>
|
||||||
|
#include <sheet.h>
|
||||||
#ifndef __FILES_H
|
#include <progind.h>
|
||||||
#include <files.h>
|
#include <defmask.h>
|
||||||
#endif
|
|
||||||
|
#include "ba1100.h"
|
||||||
#ifndef __MASK_H
|
|
||||||
#include <mask.h>
|
|
||||||
#endif
|
|
||||||
|
bool TEdit_file::browse(int logicnum, const char* name)
|
||||||
#ifndef __SHEET_H
|
{
|
||||||
#include <sheet.h>
|
TRelation relation(logicnum);
|
||||||
#endif
|
TCursor cursor(&relation);
|
||||||
|
TRectype& curr = cursor.curr();
|
||||||
#ifndef __URLDEFID_H
|
TRectype svrec(cursor.curr());
|
||||||
#include <urldefid.h>
|
|
||||||
#endif
|
TToken_string head(256);
|
||||||
|
TToken_string trac(256);
|
||||||
#ifndef __VALIDAT_H
|
|
||||||
#include <validate.h>
|
const char* n;
|
||||||
#endif
|
trac.add("");
|
||||||
|
head.add("@1");
|
||||||
#ifndef __BA1201_H
|
|
||||||
#include "ba1201.h"
|
for(int i = 0; (n = curr.fieldname(i)) != NULL; i++)
|
||||||
#endif
|
{
|
||||||
|
trac.add(n);
|
||||||
|
head.add(n);
|
||||||
TRec_sheet::TRec_sheet(int logicnum)
|
|
||||||
: TSheet(-1,-1, 0, 0, "","N.|Nome|Lung.|Dec.|Offset", 0x6)
|
int len = curr.length(n);
|
||||||
{
|
if (curr.type(n) == _datefld) len = 10;
|
||||||
_dir = new TDir;
|
if (len > strlen(n)) head << '@' << len;
|
||||||
_rec = new TTrec;
|
}
|
||||||
|
|
||||||
_dir->get(logicnum, _nordir, _lock, _nordir);
|
KEY ch;
|
||||||
_rec->get(logicnum, _comfile ? _condir : _nordir);
|
TCursor_sheet sheet(&cursor, trac, name, head, 6);
|
||||||
|
|
||||||
TRec_sheet::~TRec_sheet()
|
while ((ch = sheet.run()) != K_ESC)
|
||||||
{
|
{
|
||||||
delete _dir;
|
if (ch == K_DEL && sheet.one_checked())
|
||||||
delete _rec;
|
{
|
||||||
}
|
TProgind* pind = NULL;
|
||||||
|
cursor.freeze(TRUE);
|
||||||
|
bool go = FALSE;
|
||||||
void TRec_sheet::page_build(long first, byte rows)
|
bool first = FALSE;
|
||||||
{
|
int j;
|
||||||
TToken_string l;
|
for (j = 0, cursor = 0; j < sheet.items(); ++cursor, j++)
|
||||||
TString dep(256);
|
{
|
||||||
RecDes *rdes;
|
if (sheet.checked(j))
|
||||||
|
{
|
||||||
_rec->get(1, _nordir);
|
if (!go && !first)
|
||||||
|
go = yesno_box("Confermi la cancellazione dei %d "
|
||||||
|
"record indicati?", sheet.checked());
|
||||||
for (byte i = 0; i < rows; i++)
|
first = TRUE;
|
||||||
{
|
|
||||||
dep << (int)i+1+first; // Numero progressivo del file
|
if (!pind)
|
||||||
l = dep.right_just(3);
|
{
|
||||||
dep = "";
|
pind = new TProgind(sheet.checked(),"Attendere...",
|
||||||
rdes = _rec->rec();
|
TRUE, TRUE, 32);
|
||||||
l.add((const char*)rdes->Fd[i].Name);
|
pind->addstatus(1);
|
||||||
l.add((const char*)rdes->Fd[i].TypeF);
|
}
|
||||||
dep << rdes->Fd[i].Name;
|
else
|
||||||
l.add ( (const char*) dep);
|
{
|
||||||
dep = "";
|
if (pind->iscancelled()) break;
|
||||||
dep << rdes->Fd[i].Dec;
|
pind->addstatus(1);
|
||||||
l.add( (const char*) dep);
|
}
|
||||||
|
|
||||||
set_row(l, i);
|
if (go) cursor.file()->remove();
|
||||||
}
|
sheet.uncheck(j);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (pind) delete pind;
|
||||||
|
cursor.freeze(FALSE);
|
||||||
|
|
||||||
|
if (first) {sheet.select(1); continue;}
|
||||||
|
}
|
||||||
|
if (ch == K_ENTER || ch == K_DEL)
|
||||||
|
cursor = sheet.selected();
|
||||||
|
|
||||||
|
switch(ch)
|
||||||
|
{
|
||||||
|
case K_ENTER: // edit fields
|
||||||
|
svrec = curr;
|
||||||
|
if (edit_record(curr, FALSE) == K_ENTER)
|
||||||
|
{
|
||||||
|
TString s(svrec.key(1));
|
||||||
|
|
||||||
|
if (s != curr.key(1))
|
||||||
|
{
|
||||||
|
cursor.file()->write();
|
||||||
|
if (cursor.file()->good())
|
||||||
|
{
|
||||||
|
curr = svrec;
|
||||||
|
cursor.file()->remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cursor.file()->rewrite();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case K_DEL: // delete record
|
||||||
|
if (yesno_box("Confermare la cancellazione del record"))
|
||||||
|
cursor.file()->remove();
|
||||||
|
break;
|
||||||
|
case K_INS: // insert new record
|
||||||
|
curr.zero();
|
||||||
|
if (edit_record(curr,FALSE) == K_ENTER)
|
||||||
|
cursor.file()->write();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sheet.force_update();
|
||||||
|
}
|
||||||
|
return K_ESC;
|
||||||
|
}
|
||||||
|
|
||||||
|
KEY TEdit_file::edit_record(TRectype& rec, bool readonly)
|
||||||
|
{
|
||||||
|
for(int recs = 0; rec.fieldname(recs) != NULL; recs++);
|
||||||
|
|
||||||
|
int rows = recs > 15 ? 20 : recs+4;
|
||||||
|
int pages = recs/15 + (recs % 15 ? 1 : 0);
|
||||||
|
TMask m("Modifica record", pages, 78, rows);
|
||||||
|
|
||||||
|
int curpage = 0, currow = 1, nid = 100;
|
||||||
|
const char* cp;
|
||||||
|
|
||||||
|
for(int i = 0; (cp = rec.fieldname(i)) != NULL; i++)
|
||||||
|
{
|
||||||
|
// add fields ONE by ONE
|
||||||
|
TString s(cp); s.left_just(16);
|
||||||
|
int len = rec.length(cp);
|
||||||
|
switch (rec.type(cp))
|
||||||
|
{
|
||||||
|
case _alfafld:
|
||||||
|
m.add_string(nid++,curpage, s, 3, currow, len, "",
|
||||||
|
len > 50 ? 50 : len);
|
||||||
|
break;
|
||||||
|
case _intfld:
|
||||||
|
case _longfld:
|
||||||
|
case _wordfld:
|
||||||
|
case _realfld:
|
||||||
|
m.add_number(nid++, curpage, s, 3, currow, len, "",
|
||||||
|
rec.ndec(cp));
|
||||||
|
break;
|
||||||
|
case _datefld:
|
||||||
|
m.add_date(nid++, curpage, s, 3, currow);
|
||||||
|
break;
|
||||||
|
case _charfld:
|
||||||
|
case _boolfld:
|
||||||
|
m.add_string(nid++,curpage, s, 3, currow, 1);
|
||||||
|
break;
|
||||||
|
case _intzerofld:
|
||||||
|
case _longzerofld:
|
||||||
|
m.add_number(nid++, curpage, s, 3, currow, len, "Z",
|
||||||
|
rec.ndec(cp));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m.field(nid-1).set(rec.get(cp));
|
||||||
|
|
||||||
|
if (((i+1) % 15) == 0 || i == recs-1)
|
||||||
|
{
|
||||||
|
m.add_button(DLG_OK, curpage, "", -14, -1, 9, 3);
|
||||||
|
m.add_button(DLG_CANCEL, curpage, "", -24, -1, 9, 3);
|
||||||
|
if (curpage > 0)
|
||||||
|
m.add_button(DLG_PGUP, curpage, "", -34, -1, 9, 3);
|
||||||
|
if (pages > 1 && curpage < pages-1)
|
||||||
|
m.add_button(DLG_PGDN, curpage, "", -44, -1, 9, 3);
|
||||||
|
curpage++; currow = 1;
|
||||||
|
}
|
||||||
|
else currow++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readonly)
|
||||||
|
{
|
||||||
|
const int max = m.fields();
|
||||||
|
for (int i = 0; i < max; i++)
|
||||||
|
{
|
||||||
|
TMask_field& f = m.fld(i);
|
||||||
|
if (f.class_id() != CLASS_BUTTON_FIELD)
|
||||||
|
f.disable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const KEY k = m.run();
|
||||||
|
|
||||||
|
if (k == K_ENTER && !readonly)
|
||||||
|
{
|
||||||
|
nid = 100;
|
||||||
|
for(i = 0; (cp = rec.fieldname(i)) != NULL; i++)
|
||||||
|
rec.put(cp, m.get(nid++));
|
||||||
|
}
|
||||||
|
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,319 +1,474 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <files.h>
|
|
||||||
#ifndef __EXTCDECL_H
|
#include <files.h>
|
||||||
#include <extcdecl.h>
|
#include <expr.h>
|
||||||
#endif
|
#ifndef __EXTCDECL_H
|
||||||
|
#include <extcdecl.h>
|
||||||
|
#endif
|
||||||
#define BLOCKLEN 512
|
#include <utility.h>
|
||||||
|
|
||||||
TFile::TFile(int lenrec, int base)
|
|
||||||
|
#define BLOCKLEN 512
|
||||||
{
|
#define INVFLD 255
|
||||||
_file = new SecDef;
|
|
||||||
if (_file == NULL) fatal_box("Can't allocate record file ");
|
HIDDEN char _files_tmp_string[128];
|
||||||
_file->IOR = NOERR;
|
|
||||||
_len = lenrec;
|
TFile::TFile(int lenrec, int base)
|
||||||
_base = base;
|
|
||||||
_file->LockMode = _manulock;
|
{
|
||||||
_file->lpos = -1;
|
_file = new SecDef;
|
||||||
_file->name[0] = '\0';
|
if (_file == NULL) fatal_box("Can't allocate record file ");
|
||||||
}
|
_file->IOR = NOERR;
|
||||||
|
_len = lenrec;
|
||||||
|
_base = base;
|
||||||
TFile::~TFile()
|
_file->LockMode = _manulock;
|
||||||
|
_file->lpos = -1;
|
||||||
{
|
_file->name[0] = '\0';
|
||||||
delete _file;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TFile::~TFile()
|
||||||
void TFile::open(const char* name, TFilelock lockmode)
|
|
||||||
|
{
|
||||||
{
|
delete _file;
|
||||||
COpen(_file, (char*) name, _len, _base, lockmode);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TFile::open(const char* name, TFilelock lockmode)
|
||||||
bool TFile::verify(const char* name)
|
|
||||||
|
{
|
||||||
{
|
COpen(_file, (char*) name, _len, _base, lockmode);
|
||||||
CVerify(_file, (char*) name);
|
}
|
||||||
return _file->IOR == NOERR;
|
|
||||||
}
|
|
||||||
|
bool TFile::verify(const char* name)
|
||||||
|
|
||||||
void TFile::create(const char* name, TRecnotype nrecord)
|
{
|
||||||
|
CVerify(_file, (char*) name);
|
||||||
{
|
return _file->IOR == NOERR;
|
||||||
CCreate(_file, (char*) name, _len, _base, (nrecord * _len) /BLOCKLEN + 1);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TFile::create(const char* name, TRecnotype nrecord)
|
||||||
void TFile::chsize(const char* name, TRecnotype nrecord)
|
|
||||||
|
{
|
||||||
{
|
CCreate(_file, (char*) name, _len, _base, (nrecord * _len) /BLOCKLEN + 1);
|
||||||
CChsize(_file, (char*) name, _len, _base, (nrecord * _len) /BLOCKLEN + 1);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TFile::chsize(const char* name, TRecnotype nrecord)
|
||||||
void TFile::close()
|
|
||||||
|
{
|
||||||
{
|
CChsize(_file, (char*) name, _len, _base, (nrecord * _len) /BLOCKLEN + 1);
|
||||||
CClose(_file);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TFile::close()
|
||||||
void TFile::unlink(const char* name)
|
|
||||||
|
{
|
||||||
{
|
CClose(_file);
|
||||||
CDelete(_file, (char*) name);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TFile::unlink(const char* name)
|
||||||
void TFile::read(char* record, TRecnotype recnum, TReclock lock)
|
|
||||||
|
{
|
||||||
{
|
CDelete(_file, (char*) name);
|
||||||
_file->LenRec = _len;
|
}
|
||||||
_file->BaseFil = _base;
|
|
||||||
CRead(_file, record, recnum, lock);
|
|
||||||
}
|
void TFile::read(char* record, TRecnotype recnum, TReclock lock)
|
||||||
|
|
||||||
|
{
|
||||||
void TFile::write(char* record, TRecnotype recnum, TReclock lock)
|
_file->LenRec = _len;
|
||||||
|
_file->BaseFil = _base;
|
||||||
{
|
CRead(_file, record, recnum, lock);
|
||||||
_file->LenRec = _len;
|
}
|
||||||
_file->BaseFil = _base;
|
|
||||||
CWrite(_file, record, recnum, lock);
|
|
||||||
}
|
void TFile::write(char* record, TRecnotype recnum, TReclock lock)
|
||||||
|
|
||||||
|
{
|
||||||
int TFile::status() const
|
_file->LenRec = _len;
|
||||||
|
_file->BaseFil = _base;
|
||||||
{
|
CWrite(_file, record, recnum, lock);
|
||||||
return _file->IOR;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
int TFile::status() const
|
||||||
TDir::TDir()
|
|
||||||
|
{
|
||||||
{
|
return _file->IOR;
|
||||||
_dir = new FileDes;
|
}
|
||||||
if (_dir == NULL)
|
|
||||||
fatal_box("Can't allocate dir");
|
|
||||||
zero();
|
TDir::TDir()
|
||||||
_num = - 1;
|
|
||||||
}
|
{
|
||||||
|
_dir = new FileDes;
|
||||||
|
if (_dir == NULL)
|
||||||
TDir::~TDir()
|
fatal_box("Can't allocate dir");
|
||||||
|
zero();
|
||||||
{
|
_num = - 1;
|
||||||
delete _dir;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TDir::~TDir()
|
||||||
const char* TDir::name() const
|
|
||||||
|
{
|
||||||
{
|
delete _dir;
|
||||||
return _dir->SysName;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
const char* TDir::name() const
|
||||||
const char* TDir::des() const
|
|
||||||
|
{
|
||||||
{
|
return _dir->SysName;
|
||||||
return _dir->Des;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
const char* TDir::des() const
|
||||||
const char* TDir::expr() const
|
|
||||||
|
{
|
||||||
{
|
return _dir->Des;
|
||||||
return _dir->FCalc;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
const char* TDir::expr() const
|
||||||
TRecnotype& TDir::eod() const
|
|
||||||
|
{
|
||||||
{
|
return _dir->FCalc;
|
||||||
return _dir->EOD;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TRecnotype& TDir::eod() const
|
||||||
TRecnotype& TDir::eox() const
|
|
||||||
|
{
|
||||||
{
|
return _dir->EOD;
|
||||||
return _dir->EOX;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TRecnotype& TDir::eox() const
|
||||||
TRecnotype& TDir::flags() const
|
|
||||||
|
{
|
||||||
{
|
return _dir->EOX;
|
||||||
return _dir->Flags;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TRecnotype& TDir::flags() const
|
||||||
word& TDir::len()
|
|
||||||
|
{
|
||||||
{
|
return _dir->Flags;
|
||||||
return (word&) _dir->LenR;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
word& TDir::len()
|
||||||
int TDir::status(TDirtype dirop) const
|
|
||||||
|
{
|
||||||
{
|
return (word&) _dir->LenR;
|
||||||
return fdir[dirop].IOR;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
int TDir::status(TDirtype dirop) const
|
||||||
void TDir::set_len(const UINT16 len)
|
|
||||||
{
|
{
|
||||||
_dir->LenR = len;
|
return fdir[dirop].IOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDir::set_eox(const RecNoType eox)
|
|
||||||
{
|
void TDir::set_len(const UINT16 len)
|
||||||
_dir->EOX = eox;
|
{
|
||||||
}
|
_dir->LenR = len;
|
||||||
|
}
|
||||||
void TDir::set(const char * name, const RecNoType eod, const RecNoType flag, const char * des, const char * calc)
|
|
||||||
{
|
void TDir::set_eox(const RecNoType eox)
|
||||||
strncpy (_dir->SysName, name, sizeof(_dir->SysName));
|
{
|
||||||
_dir->EOD = eod;
|
_dir->EOX = eox;
|
||||||
_dir->Flags = flag;
|
}
|
||||||
strncpy (_dir->Des, des, sizeof(_dir->Des));
|
|
||||||
strncpy (_dir->FCalc, calc, sizeof(_dir->FCalc));
|
void TDir::set(const char * name, const RecNoType eod, const RecNoType flag, const char * des, const char * calc)
|
||||||
}
|
{
|
||||||
|
strncpy (_dir->SysName, name, sizeof(_dir->SysName));
|
||||||
void TDir::get(int nfile, TReclock lock, TDirtype dirtype, TDirop op)
|
_dir->EOD = eod;
|
||||||
|
_dir->Flags = flag;
|
||||||
{
|
strncpy (_dir->Des, des, sizeof(_dir->Des));
|
||||||
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
strncpy (_dir->FCalc, calc, sizeof(_dir->FCalc));
|
||||||
|
}
|
||||||
if (op == _nordirop)
|
|
||||||
COpenFile(nfile, _dir, int(lock), _whichdir);
|
void TDir::get(int nfile, TReclock lock, TDirtype dirtype, TDirop op)
|
||||||
else
|
|
||||||
CGetFile(nfile, _dir, int(lock), _whichdir);
|
{
|
||||||
_num = nfile;
|
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
||||||
}
|
|
||||||
|
if (op == _nordirop)
|
||||||
|
COpenFile(nfile, _dir, int(lock), _whichdir);
|
||||||
void TDir::put(int nfile, TDirtype dirtype, TDirop op)
|
else
|
||||||
|
CGetFile(nfile, _dir, int(lock), _whichdir);
|
||||||
{
|
_num = nfile;
|
||||||
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
}
|
||||||
|
|
||||||
if (nfile <= 0)
|
|
||||||
fatal_box("Bad file number %d", nfile);
|
void TDir::put(int nfile, TDirtype dirtype, TDirop op)
|
||||||
if (op == _nordirop)
|
|
||||||
CCloseFile(nfile, _dir, _whichdir);
|
{
|
||||||
else
|
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
||||||
CPutFile(nfile, _dir, _whichdir);
|
|
||||||
}
|
if (nfile <= 0)
|
||||||
|
fatal_box("Bad file number %d", nfile);
|
||||||
|
if (op == _nordirop)
|
||||||
void TDir::zero()
|
CCloseFile(nfile, _dir, _whichdir);
|
||||||
|
else
|
||||||
{
|
CPutFile(nfile, _dir, _whichdir);
|
||||||
zerofdes(_dir);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TDir::zero()
|
||||||
int TDir::items(TDirtype dirtype) const
|
|
||||||
|
{
|
||||||
{
|
zerofdes(_dir);
|
||||||
FileDes f;
|
}
|
||||||
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
|
||||||
|
|
||||||
CGetFile(1, &f, _nolock, _whichdir);
|
int TDir::items(TDirtype dirtype) const
|
||||||
return (int)f.EOD;
|
|
||||||
}
|
{
|
||||||
|
FileDes f;
|
||||||
TTrec::TTrec()
|
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
||||||
|
|
||||||
{
|
CGetFile(1, &f, _nolock, _whichdir);
|
||||||
_rec = new RecDes;
|
return (int)f.EOD;
|
||||||
if (_rec == NULL)
|
}
|
||||||
fatal_box("Can't allocate record description");
|
|
||||||
zero();
|
TTrec::TTrec()
|
||||||
_num = - 1;
|
|
||||||
}
|
{
|
||||||
|
_rec = new RecDes;
|
||||||
|
if (_rec == NULL)
|
||||||
TTrec::~TTrec()
|
fatal_box("Can't allocate record description");
|
||||||
|
zero();
|
||||||
{
|
_num = - 1;
|
||||||
delete _rec;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
TTrec::~TTrec()
|
||||||
int TTrec::compare(const TSortable& a) const
|
|
||||||
|
{
|
||||||
{
|
delete _rec;
|
||||||
const TTrec& r = (const TTrec&)a;
|
}
|
||||||
const int res = memcmp((const void*)_rec, (const void*)r._rec, sizeof(*_rec));
|
|
||||||
return res;
|
|
||||||
}
|
int TTrec::compare(const TSortable& a) const
|
||||||
|
|
||||||
void TTrec::rehash()
|
{
|
||||||
|
const TTrec& r = (const TTrec&)a;
|
||||||
{
|
const int res = memcmp((const void*)_rec, (const void*)r._rec, sizeof(*_rec));
|
||||||
setrdes(_rec);
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
TTrec& TTrec::operator =(const TTrec& b)
|
void TTrec::rehash()
|
||||||
|
|
||||||
{
|
{
|
||||||
_num = b._num;
|
setrdes(_rec);
|
||||||
memcpy(_rec, b._rec, sizeof(*_rec));
|
}
|
||||||
return *this;
|
|
||||||
}
|
TTrec& TTrec::operator =(const TTrec& b)
|
||||||
|
|
||||||
void TTrec::get(int nfile, TDirtype dirtype)
|
{
|
||||||
|
_num = b._num;
|
||||||
{
|
memcpy(_rec, b._rec, sizeof(*_rec));
|
||||||
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
return *this;
|
||||||
|
}
|
||||||
CGetRec(nfile, _rec, _whichdir);
|
|
||||||
_num = nfile;
|
void TTrec::get(int nfile, TDirtype dirtype)
|
||||||
}
|
|
||||||
|
{
|
||||||
|
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
||||||
void TTrec::put(int nfile, TDirtype dirtype)
|
|
||||||
|
CGetRec(nfile, _rec, _whichdir);
|
||||||
{
|
_num = nfile;
|
||||||
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
}
|
||||||
|
|
||||||
if (nfile <= 0)
|
|
||||||
fatal_box("Bad file number %d", nfile);
|
void TTrec::put(int nfile, TDirtype dirtype)
|
||||||
CPutRec(nfile, _rec, _whichdir);
|
|
||||||
}
|
{
|
||||||
|
int _whichdir = (dirtype == _nordir ? NORDIR : COMDIR);
|
||||||
|
|
||||||
void TTrec::zero()
|
if (nfile <= 0)
|
||||||
|
fatal_box("Bad file number %d", nfile);
|
||||||
{
|
CPutRec(nfile, _rec, _whichdir);
|
||||||
zerordes(_rec);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
void TTrec::zero()
|
||||||
int TTrec::status(TDirtype dirop) const
|
|
||||||
|
{
|
||||||
{
|
zerordes(_rec);
|
||||||
return rdir[dirop].IOR;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
int TTrec::status(TDirtype dirop) const
|
||||||
int TTrec::field(const char* name) const
|
|
||||||
|
{
|
||||||
{
|
return rdir[dirop].IOR;
|
||||||
return findfld(_rec, (char*) name);
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
int TTrec::field(const char* name) const
|
||||||
|
|
||||||
|
{
|
||||||
|
return findfld(_rec, (char*) name);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TTrec::fielddef(int fld) const
|
||||||
|
|
||||||
|
{
|
||||||
|
sprintf(_files_tmp_string, "%s|%d|%d|%d", _rec->Fd[fld].Name,
|
||||||
|
(int) _rec->Fd[fld].TypeF, (int) _rec->Fd[fld].Len,
|
||||||
|
(int) _rec->Fd[fld].Dec);
|
||||||
|
return _files_tmp_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TTrec::keydef(int key) const
|
||||||
|
|
||||||
|
{
|
||||||
|
TFixed_string s(_files_tmp_string, 128);
|
||||||
|
|
||||||
|
s = "";
|
||||||
|
for (int j = 0 ; j < _rec->Ky[key].NkFields; j++)
|
||||||
|
{
|
||||||
|
const bool upper = _rec->Ky[key].FieldSeq[j] > MaxFields;
|
||||||
|
const int nfld = _rec->Ky[key].FieldSeq[j] - (upper ? MaxFields : 0);
|
||||||
|
|
||||||
|
if (j) s << "+";
|
||||||
|
if (upper) s << "UPPER(";
|
||||||
|
s << _rec->Fd[nfld].Name;
|
||||||
|
if (_rec->Ky[key].FromCh[j] < INVFLD)
|
||||||
|
s << format("[%d,%d]", _rec->Ky[key].FromCh[j] + 1,
|
||||||
|
_rec->Ky[key].ToCh[j] + 1);
|
||||||
|
if (upper) s << ")";
|
||||||
|
}
|
||||||
|
s << (_rec->Ky[key].DupKeys ? "|X" : "| ");
|
||||||
|
return (const char*) s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TTrec::update_fielddef(int nfld, const char* desc)
|
||||||
|
|
||||||
|
{
|
||||||
|
TToken_string s(desc);
|
||||||
|
strcpy(_rec->Fd[nfld].Name, s.get());
|
||||||
|
_rec->Fd[nfld].TypeF = s.get_int();
|
||||||
|
_rec->Fd[nfld].Len = s.get_int();
|
||||||
|
_rec->Fd[nfld].Dec = s.get_int();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TTrec::update_keydef(int key, const char* desc)
|
||||||
|
|
||||||
|
{
|
||||||
|
TExpression expr("", _strexpr);
|
||||||
|
TToken_string s(desc);
|
||||||
|
TString ke(s.get());
|
||||||
|
|
||||||
|
if (expr.set((const char*) ke, _strexpr))
|
||||||
|
{
|
||||||
|
_rec->Ky[key].DupKeys = (*s.get() != ' ');
|
||||||
|
TCodearray& c = expr.code();
|
||||||
|
c.begin();
|
||||||
|
int n = 0;
|
||||||
|
while (!c.end())
|
||||||
|
{
|
||||||
|
TCode& inst = c.step();
|
||||||
|
TCodesym sym = inst.getsym();
|
||||||
|
|
||||||
|
if (sym == _variable)
|
||||||
|
{
|
||||||
|
const char* s = inst.string();
|
||||||
|
|
||||||
|
for (int i = 0; i <_rec->NFields; i++)
|
||||||
|
if (strcmp(_rec->Fd[i].Name, s) == 0) break;
|
||||||
|
|
||||||
|
_rec->Ky[key].FieldSeq[n] = i;
|
||||||
|
_rec->Ky[key].FromCh[n] = INVFLD;
|
||||||
|
_rec->Ky[key].FromCh[n] = INVFLD;
|
||||||
|
inst = c.step();
|
||||||
|
sym = inst.getsym();
|
||||||
|
if (sym == _upper)
|
||||||
|
_rec->Ky[key].FieldSeq[n] += MaxFields;
|
||||||
|
else
|
||||||
|
if (sym == _number)
|
||||||
|
{
|
||||||
|
_rec->Ky[key].FromCh[n] = inst.number().integer() - 1;
|
||||||
|
inst = c.step();
|
||||||
|
_rec->Ky[key].ToCh[n] = _rec->Ky[key].FromCh[n] + inst.number().integer() - 1;
|
||||||
|
inst = c.step();
|
||||||
|
}
|
||||||
|
else c.backtrace();
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_rec->Ky[key].NkFields = n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TTrec::print_on(ostream& out) const
|
||||||
|
|
||||||
|
{
|
||||||
|
out << num() << '\n';
|
||||||
|
const int nfields = fields();
|
||||||
|
TToken_string s(80);
|
||||||
|
|
||||||
|
out << nfields << '\n';
|
||||||
|
for (int i = 0; i < nfields; i++)
|
||||||
|
{
|
||||||
|
s = fielddef(i);
|
||||||
|
out << s << '\n';
|
||||||
|
}
|
||||||
|
const int nkeys = keys();
|
||||||
|
|
||||||
|
out << nkeys << '\n';
|
||||||
|
for (i = 0; i < nkeys; i++)
|
||||||
|
{
|
||||||
|
s = keydef(i);
|
||||||
|
out << s << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TTrec::read_from(istream& in)
|
||||||
|
|
||||||
|
{
|
||||||
|
int ln;
|
||||||
|
|
||||||
|
in.getline(_files_tmp_string, sizeof(_files_tmp_string), '\n');
|
||||||
|
ln = atoi(_files_tmp_string);
|
||||||
|
if (ln != num() && !yesno_box("Descrizione relativa al file n.ro %d.\n Continuo ?", ln))
|
||||||
|
return;
|
||||||
|
int nfields;
|
||||||
|
|
||||||
|
in.getline(_files_tmp_string, sizeof(_files_tmp_string), '\n');
|
||||||
|
nfields = atoi(_files_tmp_string);
|
||||||
|
set_fields(nfields);
|
||||||
|
for (int i = 0; i < nfields; i++)
|
||||||
|
{
|
||||||
|
in.getline(_files_tmp_string, sizeof(_files_tmp_string), '\n');
|
||||||
|
update_fielddef(i, _files_tmp_string);
|
||||||
|
}
|
||||||
|
int nkeys;
|
||||||
|
|
||||||
|
in.getline(_files_tmp_string, sizeof(_files_tmp_string), '\n');
|
||||||
|
nkeys = atoi(_files_tmp_string);
|
||||||
|
set_keys(nkeys);
|
||||||
|
for (i = 0; i < nkeys; i++)
|
||||||
|
{
|
||||||
|
in.getline(_files_tmp_string, sizeof(_files_tmp_string), '\n');
|
||||||
|
update_keydef(i, _files_tmp_string);
|
||||||
|
}
|
||||||
|
rehash();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
251
include/files.h
251
include/files.h
@ -1,121 +1,130 @@
|
|||||||
#ifndef __FILES_H
|
#ifndef __FILES_H
|
||||||
#define __FILES_H
|
#define __FILES_H
|
||||||
|
|
||||||
#ifndef __OBJECT_H
|
#ifndef __OBJECT_H
|
||||||
#include <object.h>
|
#include <object.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __EXTCTYPE_H
|
#ifndef __EXTCTYPE_H
|
||||||
#include <extctype.h>
|
#include <extctype.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __RECTYPES_H
|
#ifndef __RECTYPES_H
|
||||||
#include <rectypes.h>
|
#include <rectypes.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TFile : public TObject
|
// Classe TFile : public TObject
|
||||||
//
|
//
|
||||||
// Il file. I suoi metodi comprendono tutte le procedure per l'accesso
|
// Il file. I suoi metodi comprendono tutte le procedure per l'accesso
|
||||||
// fisico di basso livello ai file.
|
// fisico di basso livello ai file.
|
||||||
//
|
//
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TFile : public TObject
|
class TFile : public TObject
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
SecDef* _file;
|
SecDef* _file;
|
||||||
int _len;
|
int _len;
|
||||||
int _base;
|
int _base;
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
void open(const char* name, TFilelock lockmode = _manulock);
|
void open(const char* name, TFilelock lockmode = _manulock);
|
||||||
bool verify(const char* name);
|
bool verify(const char* name);
|
||||||
void create(const char* name, TRecnotype nrecord = 10);
|
void create(const char* name, TRecnotype nrecord = 10);
|
||||||
void chsize(const char* name, TRecnotype nrecord);
|
void chsize(const char* name, TRecnotype nrecord);
|
||||||
void close();
|
void close();
|
||||||
void unlink(const char* name);
|
void unlink(const char* name);
|
||||||
void read(char* record, TRecnotype recnum, TReclock lock = _nolock);
|
void read(char* record, TRecnotype recnum, TReclock lock = _nolock);
|
||||||
void write(char* record, TRecnotype recnum, TReclock lock = _nolock);
|
void write(char* record, TRecnotype recnum, TReclock lock = _nolock);
|
||||||
int status() const ;
|
int status() const ;
|
||||||
int& base() { return _base; }
|
int& base() { return _base; }
|
||||||
int& len() { return _len; }
|
int& len() { return _len; }
|
||||||
bool ok() const { return status() == NOERR; }
|
bool ok() const { return status() == NOERR; }
|
||||||
bool error() const { return status() != NOERR; }
|
bool error() const { return status() != NOERR; }
|
||||||
|
|
||||||
TFile(int lenrec = 0, int base = 0);
|
TFile(int lenrec = 0, int base = 0);
|
||||||
virtual ~TFile();
|
virtual ~TFile();
|
||||||
};
|
};
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TDir : public TObject
|
// Classe TDir : public TObject
|
||||||
//
|
//
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TDir : public TObject
|
class TDir : public TObject
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
FileDes* _dir;
|
FileDes* _dir;
|
||||||
int _num;
|
int _num;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
void get(int nfile, TReclock lock = _nolock, TDirtype dirtype = _nordir, TDirop op = _nordirop);
|
void get(int nfile, TReclock lock = _nolock, TDirtype dirtype = _nordir, TDirop op = _nordirop);
|
||||||
void put(int nfile, TDirtype dirtype = _nordir, TDirop op = _nordirop);
|
void put(int nfile, TDirtype dirtype = _nordir, TDirop op = _nordirop);
|
||||||
void zero();
|
void zero();
|
||||||
|
|
||||||
void set_eox(const RecNoType eox);
|
void set_eox(const RecNoType eox);
|
||||||
void set_len(const UINT16 len);
|
void set_len(const UINT16 len);
|
||||||
void set (const char * name, const RecNoType eod, const RecNoType flag, const char * des, const char * calc);
|
void set (const char * name, const RecNoType eod, const RecNoType flag, const char * des, const char * calc);
|
||||||
|
|
||||||
const char* name() const;
|
const char* name() const;
|
||||||
const char* des() const;
|
const char* des() const;
|
||||||
const char* expr() const;
|
const char* expr() const;
|
||||||
TRecnotype& eod() const;
|
TRecnotype& eod() const;
|
||||||
TRecnotype& eox() const;
|
TRecnotype& eox() const;
|
||||||
TRecnotype& flags() const;
|
TRecnotype& flags() const;
|
||||||
word& len();
|
word& len();
|
||||||
int status(TDirtype dirtype = _nordir) const ;
|
int status(TDirtype dirtype = _nordir) const ;
|
||||||
int num() const { return _num;}
|
int num() const { return _num;}
|
||||||
int items(TDirtype dirtype = _nordir) const;
|
int items(TDirtype dirtype = _nordir) const;
|
||||||
FileDes* filedesc() const { return _dir; }
|
FileDes* filedesc() const { return _dir; }
|
||||||
|
|
||||||
TDir();
|
TDir();
|
||||||
virtual ~TDir();
|
virtual ~TDir();
|
||||||
};
|
};
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TTrec : public TObject
|
// Classe TTrec : public TObject
|
||||||
//
|
//
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TTrec : public TSortable
|
class TTrec : public TSortable
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
RecDes* _rec;
|
RecDes* _rec;
|
||||||
int _num;
|
int _num;
|
||||||
protected:
|
protected:
|
||||||
int compare(const TSortable& a) const;
|
int compare(const TSortable& a) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
void get(int nfile, TDirtype dirtype = _nordir);
|
void get(int nfile, TDirtype dirtype = _nordir);
|
||||||
void put(int nfile, TDirtype dirtype = _nordir);
|
void put(int nfile, TDirtype dirtype = _nordir);
|
||||||
void zero();
|
void zero();
|
||||||
void rehash();
|
void rehash();
|
||||||
int status(TDirtype dirtype = _nordir) const ;
|
int status(TDirtype dirtype = _nordir) const ;
|
||||||
int num() const { return _num;}
|
int num() const { return _num;}
|
||||||
int field(const char* fieldname) const;
|
int field(const char* fieldname) const;
|
||||||
RecDes* rec() const { return _rec;}
|
RecDes* rec() const { return _rec;}
|
||||||
TTrec& operator =(const TTrec& b);
|
TTrec& operator =(const TTrec& b);
|
||||||
int items() const { return _rec->NFields; }
|
int fields() const { return _rec->NFields; }
|
||||||
int len() const { return _rec->Fd[items() - 1].RecOff +
|
int keys() const { return _rec->NKeys; }
|
||||||
_rec->Fd[items() - 1].Len; }
|
void set_fields(int nfields) { _rec->NFields = nfields;}
|
||||||
|
void set_keys(int nkeys) { _rec->NKeys = nkeys;}
|
||||||
|
const char* fielddef(int fld) const; // ritorna una token string
|
||||||
TTrec();
|
const char* keydef(int key) const;
|
||||||
virtual ~TTrec();
|
void update_keydef(int key, const char* desc); //desc e' una token string
|
||||||
};
|
void update_fielddef(int nfld, const char* desc); //desc e' una token string
|
||||||
|
int len() const { return _rec->Fd[fields() - 1].RecOff +
|
||||||
#endif // __FILES_H
|
_rec->Fd[fields() - 1].Len; }
|
||||||
|
virtual void print_on(ostream& out) const;
|
||||||
|
virtual void read_from(istream& in);
|
||||||
|
|
||||||
|
|
||||||
|
TTrec();
|
||||||
|
virtual ~TTrec();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __FILES_H
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user