Patch level : 10.0

Files correlati     : ba1.exe
Ricompilazione Demo : [ ]
Commento            :
Reso impossibile importare per errore file di testo a lunghezza fissa


git-svn-id: svn://10.65.10.50/trunk@19484 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-10-21 13:40:18 +00:00
parent 0f6620e80f
commit 5d1297ef53
13 changed files with 138 additions and 68 deletions

View File

@ -426,7 +426,7 @@ public:
const TString& get_last_error() const { return _last_error; } const TString& get_last_error() const { return _last_error; }
bool compile(istream& instr, TBytecode& bc); bool compile(istream& instr, TBytecode& bc);
bool execute(const TBytecode& bc); bool execute(const TBytecode& bc, ostream* outstr);
void do_restart(bool cold); void do_restart(bool cold);
bool do_include(const char* fname); bool do_include(const char* fname);
void do_fetch(const TString& name); void do_fetch(const TString& name);
@ -444,10 +444,8 @@ void TAVM::log_error(const char* str)
_last_error = str; _last_error = str;
if (_interactive) if (_interactive)
error_box(str); error_box(str);
#ifdef DBG
else else
statbar_set_title(TASK_WIN, str); xvtil_popup_error(str);
#endif
} }
bool TAVM::get_token(istream& instr, TString& str) const bool TAVM::get_token(istream& instr, TString& str) const
@ -735,7 +733,7 @@ bool TAVM::do_include(const char* fname)
ifstream inf(name); ifstream inf(name);
ok = compile(inf, bc); ok = compile(inf, bc);
if (ok) if (ok)
execute(bc); execute(bc, NULL);
} }
return ok; return ok;
} }
@ -856,7 +854,9 @@ void TAVM::execute(const TAVM_op& op)
break; break;
case avm_dot: case avm_dot:
if (_outstr != NULL) if (_outstr != NULL)
*_outstr << _stack.pop().as_string(); *_outstr << _stack.pop().as_string();
else
xvtil_popup_message(_stack.pop().as_string());
break; break;
case avm_drop: case avm_drop:
if (!_stack.drop()) if (!_stack.drop())
@ -1040,7 +1040,7 @@ void TAVM::execute(const TAVM_op& op)
} }
} }
bool TAVM::execute(const TBytecode& cmdline) bool TAVM::execute(const TBytecode& cmdline, ostream* outstr)
{ {
const TBytecode* old_bc = _bc; const TBytecode* old_bc = _bc;
const int old_ip = _ip; const int old_ip = _ip;
@ -1050,6 +1050,7 @@ bool TAVM::execute(const TBytecode& cmdline)
_rstack.reset(); _rstack.reset();
_bc = &cmdline; _bc = &cmdline;
_ip = 0; _ip = 0;
_outstr = outstr;
while (_bc != NULL) while (_bc != NULL)
{ {
@ -1122,6 +1123,7 @@ bool TAVM::execute(const TBytecode& cmdline)
//const bool ok = _bc != NULL; // Not aborted //const bool ok = _bc != NULL; // Not aborted
_bc = old_bc; _bc = old_bc;
_ip = old_ip; _ip = old_ip;
_outstr = NULL;
return !aborted; return !aborted;
} }
@ -1178,9 +1180,9 @@ bool TAlex_virtual_machine::compile(istream& instr, TBytecode& bc)
return avm().compile(instr, bc); return avm().compile(instr, bc);
} }
bool TAlex_virtual_machine::execute(const TBytecode& bc) bool TAlex_virtual_machine::execute(const TBytecode& bc, ostream* out)
{ {
return avm().execute(bc); return avm().execute(bc, out);
} }
bool TAlex_virtual_machine::compile(const char* cmd, TBytecode& bc) bool TAlex_virtual_machine::compile(const char* cmd, TBytecode& bc)

View File

@ -42,7 +42,7 @@ public:
bool compile(istream& instr, TBytecode& bc); bool compile(istream& instr, TBytecode& bc);
bool compile(const char* cmd, TBytecode& bc); bool compile(const char* cmd, TBytecode& bc);
bool execute(const TBytecode& bc); bool execute(const TBytecode& bc, ostream* out = NULL);
bool include(const char* fname); bool include(const char* fname);
void warm_restart(); void warm_restart();

View File

@ -32,7 +32,7 @@ bool error_box(
// e l'icona punto esclamativo. // e l'icona punto esclamativo.
{ {
buildmsg(); buildmsg();
xvt_dm_post_error(msg); xvt_dm_popup_error(msg);
return false; return false;
} }
@ -45,7 +45,7 @@ bool warning_box(
// e l'icona punto di domanda. // e l'icona punto di domanda.
{ {
buildmsg(); buildmsg();
xvt_dm_post_warning(msg); xvt_dm_popup_warning(msg);
return 0; return 0;
} }
@ -58,7 +58,7 @@ bool message_box(
// e l'icona informazioni. // e l'icona informazioni.
{ {
buildmsg(); buildmsg();
xvt_dm_post_message(msg); xvt_dm_popup_message(msg);
return false; return false;
} }
@ -156,6 +156,11 @@ int yesnocancel_box(
return r == RESP_DEFAULT ? K_YES : (r == RESP_2 ? K_NO : K_ESC); return r == RESP_DEFAULT ? K_YES : (r == RESP_2 ? K_NO : K_ESC);
} }
bool cantread_box(const char* filename)
{
return error_box("Impossibile leggere '%s'", filename);
}
// @doc EXTERNAL // @doc EXTERNAL
// @msg __trace | Permette di mandare dei messaggi nel file trace.log // @msg __trace | Permette di mandare dei messaggi nel file trace.log
bool __trace( bool __trace(

View File

@ -17,6 +17,7 @@ extern "C" {
bool yesno_box(const char* fmt, ...); bool yesno_box(const char* fmt, ...);
int yesnocancel_box(const char* fmt, ...); int yesnocancel_box(const char* fmt, ...);
bool yesnofatal_box(const char* fmt, ...); bool yesnofatal_box(const char* fmt, ...);
bool cantread_box(const char* filename);
bool __trace(const char* fmt, ...); bool __trace(const char* fmt, ...);
bool __tracemem(const char* fmt); bool __tracemem(const char* fmt);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -2318,12 +2318,12 @@ int TSystemisamfile::pack(bool vis, bool ask)
// di errore generato (vedi <t TIsamerr>). // di errore generato (vedi <t TIsamerr>).
int TSystemisamfile::load( int TSystemisamfile::load(
const char* from, // @parm Nome del file da importare const char* from, // @parm Nome del file da importare
char fs, // @parm Carattere separatore di campo (default <pipe>) char fs, // @parm Carattere separatore di campo (default <pipe>)
char fd, // @parm Carattere delimitatore di campi (default '\\0') char fd, // @parm Carattere delimitatore di campi (default '\\0')
char rs, // @parm Carattere separatore di record (default '\\n') char rs, // @parm Carattere separatore di record (default '\\n')
bool vis, // @parm Indica se visualizzare lo stato dell'operazione (default TRUE) bool vis, // @parm Indica se visualizzare lo stato dell'operazione (default TRUE)
bool extended, // @parm Indica se interpretare alcune stringhe come macro (default FALSE) bool extended, // @parm Indica se interpretare alcune stringhe come macro (default FALSE)
bool indexed) // @parm Indica se indicizzare subito o alla fine bool indexed) // @parm Indica se indicizzare subito o alla fine
// @comm Se <p extended> e' TRUE e trova alcune stringhe col formato %stringa% (es. %frm%) // @comm Se <p extended> e' TRUE e trova alcune stringhe col formato %stringa% (es. %frm%)
// ne sostituisce i valori (es. ditta corrente). // ne sostituisce i valori (es. ditta corrente).
@ -2332,10 +2332,10 @@ int TSystemisamfile::load(
{ {
int err=NOERR; int err=NOERR;
FILE* fl = fopen(from, "r"); FILE* fl = NULL; fopen_s(&fl, from, "r");
if (fl == NULL) if (fl == NULL)
{ {
error_box("Impossibile aprire il file %s",from); cantread_box(from);
setstatus(2); setstatus(2);
return 2; return 2;
} }
@ -2344,7 +2344,7 @@ int TSystemisamfile::load(
if (extended) if (extended)
{ {
TDate d(TODAY); const TDate d(TODAY);
year.format("%04d", d.year()); year.format("%04d", d.year());
firm.format("%05ld", prefix().get_codditta()); firm.format("%05ld", prefix().get_codditta());
attprev = cache().get(LF_NDITTE, firm, NDT_CODATTPREV); attprev = cache().get(LF_NDITTE, firm, NDT_CODATTPREV);
@ -2357,7 +2357,8 @@ int TSystemisamfile::load(
err = _open_ex(_excllock, indexed); err = _open_ex(_excllock, indexed);
if (err != NOERR) if (err != NOERR)
{ {
error_box("Impossibile aprire il file %d", _logicnum); TString msg; msg << _logicnum << " (" << name() << ')';
cantread_box(msg);
return err; return err;
} }
@ -2365,8 +2366,9 @@ int TSystemisamfile::load(
const bool fixedlen = (fs == '\0'); const bool fixedlen = (fs == '\0');
TToken_string s(1024, fixedlen ? char(255) : fs); TToken_string s(1024, fixedlen ? char(255) : fs);
int nflds = curr().items(); int nflds = curr().items();
TString_array fld(nflds); TString_array fld(nflds);
int len[MaxFields]; TPointer_array fldlen(nflds);
int reclen = 0;
TString sfd(3); TString sfd(3);
TString s1(256); TString s1(256);
bool lcf = FALSE; bool lcf = FALSE;
@ -2380,23 +2382,14 @@ int TSystemisamfile::load(
{ {
key = f.token().left(equal); key = f.token().left(equal);
key.trim(); key.trim();
/* if (key == "Version")
{
const unsigned int level = atoi(f.token().mid(equal+1));
if (level > prefix().filelevel())
{
const unsigned int stdlevel = prefix().get_stdlevel();
error_box(FR("L'archivio %s e' stato generato con gli archivi di livello %ld%/%ld.\n Il livello attuale e' %ld/%ld.\n Convertire gli archivi e ripetere l' operazione."),
from, level/100, level%100, stdlevel/100, stdlevel%100);
}
lcf = getlcf(level);
} else*/
if (key == "File") if (key == "File")
{ {
const int logic = atoi(f.token().mid(equal+1)); const int logic = atoi(f.token().mid(equal+1));
if (logic != num()) if (logic != num())
error_box("L'archivio %s e' stato generato dal file %d", {
from, logic); error_box("L'archivio %s e' stato generato dal file %d", from, logic);
return _isbadtrc;
}
} else } else
if (key == "Fields") if (key == "Fields")
{ {
@ -2406,8 +2399,9 @@ int TSystemisamfile::load(
{ {
wfd = fd; wfd.strip_spaces(); wfd = fd; wfd.strip_spaces();
fld.add(wfd.get(0)); fld.add(wfd.get(0));
len[nflds] = wfd.get_int(); const int l = wfd.get_int();
nflds++; fldlen.add_long(l, nflds++);
reclen += l;
} }
} }
} }
@ -2419,8 +2413,9 @@ int TSystemisamfile::load(
for (int j = 0; j < nflds; j++) for (int j = 0; j < nflds; j++)
{ {
fld.add(curr().fieldname(j), j); fld.add(curr().fieldname(j), j);
const TString & wfld = (const TString & ) fld[j]; const TString& wfld = fld.row(j);
len[j] = (curr().type(wfld) == _datefld) ? 10 : curr().length(wfld); const int l = (curr().type(wfld) == _datefld) ? 10 : curr().length(wfld);
fldlen.add_long(l, j);
} }
} }
@ -2439,11 +2434,17 @@ int TSystemisamfile::load(
const char* const fmt = FR("Importazione archivio %d da %s\n%6ld records %6ld errori - %3d"); const char* const fmt = FR("Importazione archivio %d da %s\n%6ld records %6ld errori - %3d");
s1.format(fmt, _logicnum, from, r, e, last); s1.format(fmt, _logicnum, from, r, e, last);
TProgind p(nitems, s1, TRUE, TRUE, 70); TProgind p(nitems, s1);
long pos = 16*nflds; while(!f.eof())
for (s = f.line(); s.not_empty() && !p.iscancelled(); s = f.line())
{ {
if (fixedlen)
f.getline(s.get_buffer(reclen+2), reclen+2);
else
s = f.line();
if (s.empty())
break;
if (extended) if (extended)
{ {
int p, i; int p, i;
@ -2461,18 +2462,25 @@ int TSystemisamfile::load(
p.set_text(s1); p.set_text(s1);
} }
pos += s.len()+2; if (!p.setstatus(f.tellg()))
p.setstatus(pos); break;
zero(); zero();
if (fixedlen) if (fixedlen)
{ {
if (s.len() < reclen)
{
error_box(FR("Record di lunghezza errata: %d invece di %d"), s.len(), reclen);
break;
}
int pos = 0; int pos = 0;
for (int j = 0; j < nflds; j++) for (int j = 0; j < nflds; j++)
{ {
s1 = s.mid(pos,len[j]); const int l = fldlen.get_int(j);
s1 = s.mid(pos, l);
s1.rtrim(); s1.rtrim();
put((const TString&) fld[j], s1); put(fld.row(j), s1);
pos += len[j]; pos += l;
} }
} }
else else
@ -2574,7 +2582,7 @@ int TSystemisamfile::overwrite(
TString_array fld(nflds); TString_array fld(nflds);
TString_array keyfld(nflds); TString_array keyfld(nflds);
TAssoc_array vals; TAssoc_array vals;
int len[MaxFields]; int len[MaxFields];
TString sfd(3); TString sfd(3);
TString s1(256); TString s1(256);
bool lcf = FALSE; bool lcf = FALSE;
@ -2614,8 +2622,7 @@ int TSystemisamfile::overwrite(
{ {
wfd = fd; wfd.strip_spaces(); wfd = fd; wfd.strip_spaces();
fld.add(wfd.get(0)); fld.add(wfd.get(0));
len[nflds] = wfd.get_int(); len[nflds++] = wfd.get_int();
nflds++;
} }
const RecDes& rd = curr().rec_des(); const RecDes& rd = curr().rec_des();
const KeyDes& kd = rd.Ky[0]; const KeyDes& kd = rd.Ky[0];
@ -2636,8 +2643,14 @@ int TSystemisamfile::overwrite(
for (int j = 0; j < nflds; j++) for (int j = 0; j < nflds; j++)
{ {
fld.add(curr().fieldname(j), j); fld.add(curr().fieldname(j), j);
const TString & wfld = (const TString & ) fld[j]; const TString & wfld = fld.row(j);
len[j] = (curr().type(wfld) == _datefld) ? 10 : curr().length(wfld); int l = 0;
switch (curr().type(wfld))
{
case _datefld: l = 10; break;
default : l = curr().length(wfld); break;
}
len[j] = l;
} }
} }
@ -2795,7 +2808,10 @@ int TSystemisamfile::dump(
t == _wordfld || t == _intzerofld || t == _longzerofld); t == _wordfld || t == _intzerofld || t == _longzerofld);
len[j] = (t == _datefld) ? 10 : curr().length(wfld); len[j] = (t == _datefld) ? 10 : curr().length(wfld);
if (fixedlen && t == _memofld) if (fixedlen && t == _memofld)
return error_box(TR("Non e' possibile scaricare a lunghezza fissa un file con campi memo")); {
error_box(TR("Non e' possibile scaricare a lunghezza fissa un file con campi memo"));
return _isbadtrc;
}
} }
TRecnotype i = 0; TRecnotype i = 0;
const TRecnotype nitems = items(); const TRecnotype nitems = items();

View File

@ -1866,9 +1866,9 @@ void TMask::on_idle()
set_focus(); set_focus();
switch(_error_severity) switch(_error_severity)
{ {
case 2: xvt_dm_popup_warning(_error_message); break; case 2: warning_box(_error_message); break;
case 3: xvt_dm_popup_error (_error_message); break; case 3: error_box(_error_message); break;
default: xvt_dm_popup_message(_error_message); break; default: message_box(_error_message); break;
} }
_error_severity = 0; _error_severity = 0;
} }

View File

@ -987,8 +987,11 @@ FILE* TCursor::open_index(
if (_indexname != _last_name || create) if (_indexname != _last_name || create)
{ {
if (_last_ndx != NULL) if (_last_ndx != NULL)
{
fclose(_last_ndx); fclose(_last_ndx);
_last_ndx = fopen(_indexname, create ? "wb" : "rb"); _last_ndx = NULL;
}
fopen_s(&_last_ndx, _indexname, create ? "wb" : "rb"); // Secured _last_ndx = fopen(_indexname, create ? "wb" : "rb");
if (_last_ndx == NULL) if (_last_ndx == NULL)
fatal_box("Can't use cursor index for file %d: '%s'\n", fatal_box("Can't use cursor index for file %d: '%s'\n",
file().num(), (const char*)_indexname); file().num(), (const char*)_indexname);

View File

@ -990,14 +990,17 @@ bool TReport_script::execute(TReport& rep)
return good; return good;
} }
bool TReport_script::execute(TReport_field& rf) bool TReport_script::execute(TReport_field& rf, ostream* outstr)
{ {
bool good = true; bool good = true;
if (ok()) if (ok())
{ {
TReport& rep = rf.section().report(); TReport& rep = rf.section().report();
rep.set_curr_field(&rf); rep.set_curr_field(&rf);
good = execute(rep); if (_bc == NULL)
good = compile(rep);
if (good)
good = rep.execute(*_bc, outstr);
} }
return good; return good;
} }
@ -1284,12 +1287,21 @@ bool TReport_field::execute_prescript()
bool ok = true; bool ok = true;
if (!draw_deactivated()) if (!draw_deactivated())
{ {
ok = _prescript.execute(*this); TString256 tmp;
ostrstream outstr(tmp.get_buffer(), tmp.size()-1);
ok = _prescript.execute(*this, &outstr);
if (ok && type() == 'A') if (ok && type() == 'A')
{ {
TReport_array_item* item = get_array_item(); TReport_array_item* item = get_array_item();
if (item != NULL) if (item != NULL)
ok = item->_script.execute(*this); ok = item->_script.execute(*this, &outstr);
}
if (ok && tmp.not_empty())
{
tmp.cut(256);
set(tmp);
} }
} }
return ok; return ok;
@ -1297,7 +1309,7 @@ bool TReport_field::execute_prescript()
bool TReport_field::execute_postscript() bool TReport_field::execute_postscript()
{ {
return draw_deactivated() || _postscript.execute(*this); return draw_deactivated() || _postscript.execute(*this, NULL);
} }
COLOR TReport_field::link_color() const COLOR TReport_field::link_color() const

View File

@ -128,7 +128,7 @@ public:
bool compile(TReport& report); bool compile(TReport& report);
bool execute(TReport& report); bool execute(TReport& report);
bool execute(TReport_field& rf); bool execute(TReport_field& rf, ostream* outstr);
void save(TXmlItem& root, const char* tag) const; void save(TXmlItem& root, const char* tag) const;
bool load(const TXmlItem& root, const char* tag); bool load(const TXmlItem& root, const char* tag);

View File

@ -608,7 +608,7 @@ bool is_power_station()
bool is_power_reseller(bool power_user_only) bool is_power_reseller(bool power_user_only)
{ {
bool yes = xvt_sys_get_oem_int("OEM", -1); bool yes = xvt_sys_get_oem_int("OEM", -1) == 0;
if (yes && power_user_only) if (yes && power_user_only)
yes = is_power_station(); yes = is_power_station();
return yes; return yes;

View File

@ -2729,7 +2729,7 @@ long TBrowsefile_field::set_text(const char* file, const char* line)
{ {
long ret = -1; long ret = -1;
FILE* instr = fopen(file, "r"); FILE* instr = NULL; fopen_s(&instr, file, "r"); // Secured FILE* instr = fopen(file, "r");
if (instr != NULL) if (instr != NULL)
{ {
TWait_cursor hourglass; TWait_cursor hourglass;

View File

@ -652,6 +652,33 @@ int xvtil_statbar_height()
return h; return h;
} }
static bool xvtil_popup_something(int severity, const char* msg)
{
if (is_power_reseller())
{
switch (severity)
{
case 1: xvt_dm_popup_warning(msg); break;
case 2: xvt_dm_popup_error(msg); break;
default: xvt_dm_popup_message(msg); break;
}
}
else
{
beep(severity);
xvtil_statbar_set(msg);
}
return false;
}
bool xvtil_popup_message(const char* msg)
{ return xvtil_popup_something(0, msg); }
bool xvtil_popup_warning(const char* msg)
{ return xvtil_popup_something(1, msg); }
bool xvtil_popup_error(const char* msg)
{ return xvtil_popup_something(2, msg); }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Test menu // Test menu

View File

@ -39,6 +39,10 @@ void xvtil_statbar_refresh();
void xvtil_statbar_destroy(); void xvtil_statbar_destroy();
int xvtil_statbar_height(); int xvtil_statbar_height();
bool xvtil_popup_message(const char* msg);
bool xvtil_popup_warning(const char* msg);
bool xvtil_popup_error(const char* msg);
void beep(int severity = 0); void beep(int severity = 0);
void do_events(); void do_events();