ba11*.* Adeguata gestione files alla nuova gestione handles

ba1400.cpp Tolti include inutili
ba1600.cpp Tolti include inutili
ba1800.cpp Migliorato riconoscimento del file origine dei trasferimenti


git-svn-id: svn://10.65.10.50/trunk@6459 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1998-03-30 14:08:53 +00:00
parent f16f443f52
commit b75f368c63
6 changed files with 139 additions and 103 deletions

View File

@ -46,6 +46,8 @@ protected:
void edit_riga(const TString&); void edit_riga(const TString&);
void delete_riga(); void delete_riga();
virtual bool extended_firm() const { return TRUE; } virtual bool extended_firm() const { return TRUE; }
bool recover(TSystemisamfile& f, int err);
void update(); void update();
void update_dir(); void update_dir();
void convert_dir(); void convert_dir();
@ -93,7 +95,6 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL),
{ // vengono creati se non esistono { // vengono creati se non esistono
TDir d; TDir d;
FileDes* fd = d.filedesc(); FileDes* fd = d.filedesc();
int handle;
strcpy(fd->SysName,"$dir.gen"); strcpy(fd->SysName,"$dir.gen");
fd->LenR =160; fd->LenR =160;
@ -102,11 +103,9 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL),
strcpy(fd->Des ,"Directory"); strcpy(fd->Des ,"Directory");
strcpy(fd->FCalc,"0"); strcpy(fd->FCalc,"0");
strcpy(fd->GenPrompt,""); strcpy(fd->GenPrompt,"");
#if XVT_OS == XVT_OS_WIN
if ((handle = sopen(Dir_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE)) != -1) int handle = sopen(Dir_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE);
#else if (handle != -1)
if ((handle = open(Dir_file, O_RDWR|O_BINARY|O_CREAT,0666)) != -1)
#endif
{ {
if (write( handle, (char*)fd, sizeof(FileDes)) == -1) if (write( handle, (char*)fd, sizeof(FileDes)) == -1)
fatal_box("Impossibile scrivere il file dir.gen per dati standard: errore %d",errno); fatal_box("Impossibile scrivere il file dir.gen per dati standard: errore %d",errno);
@ -118,12 +117,8 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL),
{ {
TTrec r; TTrec r;
RecDes* rd = r.rec(); RecDes* rd = r.rec();
int handle; int handle = sopen(Trc_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE);
#if XVT_OS == XVT_OS_WIN if (handle != -1)
if ((handle = sopen(Trc_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE)) != -1)
#else
if ((handle = open(Trc_file, O_RDWR|O_BINARY|O_CREAT,0666)) != -1)
#endif
{ {
if (write( handle, (char*)rd, sizeof(RecDes)) == -1) if (write( handle, (char*)rd, sizeof(RecDes)) == -1)
fatal_box("Impossibile scrivere il file trc.gen per dati standard: errore %d",errno); fatal_box("Impossibile scrivere il file trc.gen per dati standard: errore %d",errno);
@ -352,6 +347,7 @@ bool TManutenzione_app::create() // initvar e arrmask
_browse->add_button(DLG_INSFILE, "~Inserisci", K_F6); _browse->add_button(DLG_INSFILE, "~Inserisci", K_F6);
_browse->add_button(DLG_CONVERT, "~Converti", K_F7); _browse->add_button(DLG_CONVERT, "~Converti", K_F7);
_browse->add_button(DLG_ADDFILE, "~Aggiungi", K_F8); _browse->add_button(DLG_ADDFILE, "~Aggiungi", K_F8);
TButton_field& butt = ((TMask*)_browse)->add_button(DLG_OTHERFILE, 0, "A~ltri", 0, -1, 9, 2, "", 0, 0); TButton_field& butt = ((TMask*)_browse)->add_button(DLG_OTHERFILE, 0, "A~ltri", 0, -1, 9, 2, "", 0, 0);
butt.set_hot_key(K_F5); butt.set_hot_key(K_F5);
_mask->enable(-1); // Abilita campi privilegiati _mask->enable(-1); // Abilita campi privilegiati
@ -364,7 +360,6 @@ bool TManutenzione_app::create() // initvar e arrmask
} }
bool TManutenzione_app::destroy() // releasev e arrmask bool TManutenzione_app::destroy() // releasev e arrmask
{ {
if (_firm) set_firm(_firm); if (_firm) set_firm(_firm);
if (_browse != NULL) delete _browse; if (_browse != NULL) delete _browse;
@ -546,7 +541,6 @@ void TManutenzione_app::edit_riga (const TString& name)
} }
void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
{ {
KEY tasto; KEY tasto;
FileDes dep; FileDes dep;
@ -617,21 +611,23 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
dep.Des, dep.FCalc); dep.Des, dep.FCalc);
_browse->dir()->put(logicnum, _nordir, _sysdirop); _browse->dir()->put(logicnum, _nordir, _sysdirop);
{
TSystemisamfile f(logicnum);
if (eox != oldeox) if (eox != oldeox)
{ {
TSystemisamfile f(logicnum);
d.get(logicnum); d.get(logicnum);
TFilename f_name(d.name()); TFilename f_name(d.name());
f_name.ext("dbf"); f_name.ext("dbf");
if (f_name.exist())
if (!fexist(f_name)) f.build(eox); f.extend(eox);
else f.extend(eox); else
f.build(eox);
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop); _browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
} }
if (tasto == K_F5) switch (tasto)
{ {
case K_F5:
{
TSystemisamfile f(logicnum);
f.packfile(); f.packfile();
f.packindex(); f.packindex();
//Pack supplementare tramite FOXPRO (da togliere con CodeBase 6) //Pack supplementare tramite FOXPRO (da togliere con CodeBase 6)
@ -650,16 +646,16 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
} }
#endif #endif
} }
else break;
if (tasto == K_F6) case K_F6:
{ {
_rec = new TRec_sheet(logicnum, _mask->get(F_TAB)); _rec = new TRec_sheet(logicnum, _mask->get(F_TAB));
_rec->edit(); _rec->edit();
delete _rec; delete _rec;
_rec = NULL; _rec = NULL;
} }
else break;
if (tasto == K_F7) case K_F7:
{ {
TMask m("ba1100b"); TMask m("ba1100b");
@ -671,6 +667,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
nout = m.get(FLD_OUTFILE); nout = m.get(FLD_OUTFILE);
if (nout.not_empty()) if (nout.not_empty())
{ {
TSystemisamfile f(logicnum);
const char fs = *esc(m.get(FLD_FS)); const char fs = *esc(m.get(FLD_FS));
const char fd = *esc(m.get(FLD_FD)); const char fd = *esc(m.get(FLD_FD));
const char rs = *esc(m.get(FLD_RS)); const char rs = *esc(m.get(FLD_RS));
@ -680,14 +677,15 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
} }
} }
} }
else break;
if (tasto == K_F8) case K_F8:
{ {
TMask m("ba1100c"); TMask m("ba1100c");
TFilename ninp(dumpfilename(dep)); TFilename ninp(dumpfilename(dep));
m.set(FLD_INFILE, ninp); m.set(FLD_INFILE, ninp);
if (m.run() == K_ENTER) if (m.run() == K_ENTER)
{ {
TSystemisamfile f(logicnum);
char fs = *esc(m.get(FLD_FS)); char fs = *esc(m.get(FLD_FS));
char fd = *esc(m.get(FLD_FD)); char fd = *esc(m.get(FLD_FD));
char rs = *esc(m.get(FLD_RS)); char rs = *esc(m.get(FLD_RS));
@ -695,16 +693,17 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
f.load(ninp, fs, fd, rs); f.load(ninp, fs, fd, rs);
} }
} }
}
}
break; break;
default: default:
break; break;
} }
} }
default:
break;
}
}
void TManutenzione_app::delete_riga () void TManutenzione_app::delete_riga ()
{ {
_browse->dir()->get(LF_DIR); _browse->dir()->get(LF_DIR);
if (_browse->dir()->eod() == 0) return; if (_browse->dir()->eod() == 0) return;
@ -712,16 +711,27 @@ void TManutenzione_app::delete_riga ()
int logicnum = (int)_browse->items(); int logicnum = (int)_browse->items();
_browse->dir()->get(logicnum); _browse->dir()->get(logicnum);
if (yesnocancel_box("Confermare l'eliminzione dell'archivio %s", _browse->dir()->name()) != K_YES) return; if (!yesno_box("Confermare l'eliminzione dell'archivio %s", _browse->dir()->name()))
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);
// Azzera il tracciato record del file eliminato. // Azzera il tracciato record del file eliminato.
TTrec r; TTrec r;
r.zero(); r.zero();
r.put(logicnum); r.put(logicnum);
}
bool TManutenzione_app::recover(TSystemisamfile& f, int err)
{
if (err == -60 || err == _ispatherr ||
(err > -600 && err <= -300))
{
err = f.packindex();
}
return err == NOERR;
} }
void TManutenzione_app::update_dir() void TManutenzione_app::update_dir()
@ -805,19 +815,23 @@ void TManutenzione_app::update_dir()
{ {
fseek(f, 0L, SEEK_END); fseek(f, 0L, SEEK_END);
const long size = ftell(f); const long size = ftell(f);
fclose(f); fclose(f);
if (size > 0L && d.len() > 0) if (size > 0L && d.len() > 0)
{ {
TBaseisamfile b(i); TSystemisamfile b(i);
int err = b.is_valid(); int err = b.is_valid();
if (err == NOERR) if (err != NOERR && flags < 10000L)
{ {
TLocalisamfile f(i); KEY k = yesnocancel_box("Il file %d non puo' essere aperto: errore %d\n"
"Si desidera tentare il recupero dei dati?\n"
"Rispondendo No l'errore verra' ignorato.",i,err);
if (k == K_YES)
{
if (!recover(b, err))
k = yesno_box("Impossibile recuperare i dati\n"
"Si desidera proseguire ugualmente?") ? K_NO : K_ESC;
} }
else if (k == K_ESC)
{
if (flags < 10000L && !yesno_box("Il file %d non puo' essere aperto: errore %d. Continuo?",i,err))
stop_run(); stop_run();
} }
} }
@ -1023,18 +1037,28 @@ void TManutenzione_app::convert_dir()
// prefix().set(pref); // prefix().set(pref);
if (ds.len() > 0) if (ds.len() > 0)
{ {
if (flags < 10000L && flags > -1L) if (flags >= 0L && flags < 10000L)
{ {
TBaseisamfile b(i); TSystemisamfile b(i);
const int module = abs((int)ds.flags()); const int module = abs((int)ds.flags());
int err = b.is_valid(); int err = b.is_valid();
if (err == -60 || err == -64) err=NOERR; // verif. if (err == -60 || err == -64) err=NOERR; // verif.
d.get(i, _nolock, _nordir, _sysdirop); d.get(i, _nolock, _nordir, _sysdirop);
if (i > 2 && err != NOERR && ((is_com && d.is_com()) || (!is_com && d.is_firm()))) if (i > 2 && err != NOERR && ((is_com && d.is_com()) || (!is_com && d.is_firm())))
{ {
if (!yesno_box("Il file %d non puo' essere aperto: errore %d. Continuo?",i,err)) KEY k = yesnocancel_box("Il file %d non puo' essere aperto: errore %d\n"
"Si desidera tentare il recupero dei dati?\n"
"Rispondendo Annulla il programma terminera'",i,err);
if (k == K_YES)
{
if (!recover(b, err))
k = yesno_box("Impossibile recuperare i dati\n"
"Si desidera proseguire ugualmente?") ? K_NO : K_ESC;
}
if (k == K_ESC)
stop_run(); stop_run();
else continue; else
continue;
} }
//d.get(i, _nolock, _nordir, _sysdirop); //d.get(i, _nolock, _nordir, _sysdirop);
@ -1043,8 +1067,7 @@ void TManutenzione_app::convert_dir()
// I files LF_PCON, LF_CAUS, LF_RCAUS, LF_CLIFO, LF_CFVEN, LF_INDSPED // I files LF_PCON, LF_CAUS, LF_RCAUS, LF_CLIFO, LF_CFVEN, LF_INDSPED
// vanno creati comunque nel direttorio COM, vuoti, (se non esistono gia'). // vanno creati comunque nel direttorio COM, vuoti, (se non esistono gia').
if (is_com && !to_create) if (is_com && !to_create && movable_file(i))
if (movable_file(i))
to_create = TRUE; to_create = TRUE;
if (to_create && has_module(module, CHK_DONGLE)) if (to_create && has_module(module, CHK_DONGLE))
@ -1180,6 +1203,8 @@ void TManutenzione_app::load_des()
infile.close(); infile.close();
//unlink(fn); //unlink(fn);
} }
/*
// Aggiorna il numero di files presenti in totale nel direttorio // Aggiorna il numero di files presenti in totale nel direttorio
if (last_newln > items) // rialloca openf altrimenti la TPrefix::closeall() provoca un grazioso errore in applicazione if (last_newln > items) // rialloca openf altrimenti la TPrefix::closeall() provoca un grazioso errore in applicazione
{ {
@ -1189,6 +1214,7 @@ void TManutenzione_app::load_des()
delete openf; delete openf;
openf = newopenf; openf = newopenf;
} }
*/
d.eod() = (long)last_newln; d.eod() = (long)last_newln;
d.eox() = (long)last_newln; d.eox() = (long)last_newln;
d.flags() = _level = flags; d.flags() = _level = flags;
@ -1255,7 +1281,7 @@ void TManutenzione_app::update()
{ {
bool ok = TRUE; bool ok = TRUE;
TIsamfile utenti(LF_USER, FALSE); TIsamfile utenti(LF_USER);
utenti.open(_excllock); utenti.open(_excllock);
for (int err = utenti.first(); err == NOERR; err = utenti.next()) for (int err = utenti.first(); err == NOERR; err = utenti.next())
@ -1265,8 +1291,14 @@ void TManutenzione_app::update()
{ {
if (utenti.get("AUTSTR") == "CONVERTING") if (utenti.get("AUTSTR") == "CONVERTING")
{ {
ok = error_box("Impossibile proseguire: esiste gia' conversione in corso"); #ifdef DBG
ok = yesno_box("E' gia' in corso una conversione:\nProseguire ugualmente?");
if (!ok)
break; break;
#else
ok = error_box("E' gia' in corso una conversione:\nImpossibile proseguire");
break;
#endif
} }
else else
{ {

View File

@ -40,7 +40,7 @@ public:
void rebuild() { _items = _dir->items();} void rebuild() { _items = _dir->items();}
TDir_sheet(const char* title,byte buttons=0x8,const char* col = "N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Formula@33|Flags@7"); TDir_sheet(const char* title,byte buttons=0x8,const char* col = "N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Formula@33|Flags@7");
~TDir_sheet(); virtual ~TDir_sheet();
}; };
class TRec_sheet : public TObject class TRec_sheet : public TObject

View File

@ -5,16 +5,13 @@
#include <expr.h> #include <expr.h>
#include <isam.h> #include <isam.h>
#include <msksheet.h> #include <msksheet.h>
#include <prefix.h>
#include <progind.h> #include <progind.h>
#include <utility.h> #include <utility.h>
#include <validate.h> #include <validate.h>
#include "ba1100.h" #include "ba1100.h"
extern "C" {
extern isfdptr* openf;
};
TMask* TRec_sheet::_mask = NULL; TMask* TRec_sheet::_mask = NULL;
void TDir_sheet::add () void TDir_sheet::add ()
@ -32,11 +29,13 @@ void TDir_sheet::add ()
d.put(nitems, _nordir, _sysdirop); d.put(nitems, _nordir, _sysdirop);
_items = nitems; _items = nitems;
/*
isfdptr *newopenf = new isfdptr[_items]; isfdptr *newopenf = new isfdptr[_items];
for (int i = 0; i<_items; i++) for (int i = 0; i<_items; i++)
newopenf[i] = i<(_items-1) ? openf[i] : NULL; newopenf[i] = i<(_items-1) ? openf[i] : NULL;
delete openf; delete openf;
openf = newopenf; openf = newopenf;
*/
} }
TDir_sheet::TDir_sheet(const char* title, byte buttons, const char* colonne) TDir_sheet::TDir_sheet(const char* title, byte buttons, const char* colonne)
@ -135,8 +134,11 @@ TRec_sheet::TRec_sheet(TExternisamfile* file)
_rec = new TTrec; _rec = new TTrec;
_rec_old = new TTrec; _rec_old = new TTrec;
_mask = new TMask("ba1100d"); _mask = new TMask("ba1100d");
memcpy(_dir->filedesc(),file->filehnd()->d,sizeof(FileDes));
memcpy(_rec->rec(),file->filehnd()->r,sizeof(RecDes)); const FileDes& d = prefix().get_filedes(file->num());
const RecDes& r = prefix().get_recdes(file->num());
memcpy(_dir->filedesc(),&d,sizeof(FileDes));
memcpy(_rec->rec(),&r,sizeof(RecDes));
if (_dir->len() == 0) if (_dir->len() == 0)
_rec->zero(); _rec->zero();
*_rec_old = *_rec; *_rec_old = *_rec;

View File

@ -1,11 +1,8 @@
#include <stdio.h>
#include <relapp.h>
#include <stdtypes.h>
#include <modaut.h> #include <modaut.h>
#include <prefix.h>
#include <utility.h>
#include <msksheet.h> #include <msksheet.h>
#include <prefix.h>
#include <relapp.h>
#include <utility.h>
#include "ba1.h" #include "ba1.h"
#include "ba1500.h" #include "ba1500.h"

View File

@ -1,6 +1,7 @@
#include <applicat.h> #include <applicat.h>
#include <defmask.h> #include <defmask.h>
#include <execp.h> #include <execp.h>
#include <files.h>
#include <golem.h> #include <golem.h>
#include <msksheet.h> #include <msksheet.h>
#include <os_dep.h> #include <os_dep.h>

View File

@ -573,6 +573,10 @@ void TWizard_mask::load_ini(const TString& ininame)
} }
} }
TString use = ini.get("USE");
if (use.not_empty())
set(F_ISAM, use);
TRelation_description* rd = rel_desc(); TRelation_description* rd = rel_desc();
TFields_sheet& fs = (TFields_sheet&)sfield(F_FIELDS); TFields_sheet& fs = (TFields_sheet&)sfield(F_FIELDS);
@ -928,7 +932,7 @@ bool TWizard_mask::file_handler(TOperable_field& f, TField_event e)
if (n.exist()) if (n.exist())
{ {
set(F_INI, n, TRUE); set(F_INI, n, TRUE);
break; return TRUE;
} }
} }
} }