Non saprei. Non l'ho toccato.

git-svn-id: svn://10.65.10.50/trunk@1601 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-07-17 09:52:19 +00:00
parent b47e760e42
commit 476706c761

View File

@ -1,355 +1,355 @@
#include <applicat.h> #include <applicat.h>
#include <isam.h> #include <isam.h>
#include <date.h> #include <date.h>
#include <prefix.h> #include <prefix.h>
#include <progind.h> #include <progind.h>
#include <urldefid.h> #include <urldefid.h>
#include <utility.h> #include <utility.h>
#define DAYBIAS 36525L #define DAYBIAS 36525L
#define DAYYEAR 365 #define DAYYEAR 365
extern "C" { extern "C" {
int findfld(RecDes *, const char *); int findfld(RecDes *, const char *);
}; };
byte m1[12] = {31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; byte m1[12] = {31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m2[12] = {31,59,90,120,151,181,212,243,273,304,334,365}; int m2[12] = {31,59,90,120,151,181,212,243,273,304,334,365};
HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d) HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d)
{ {
int p, i; int p, i;
unsigned int off; unsigned int off;
byte len; byte len;
char *s1, s[10]; char *s1, s[10];
if ((p = findfld(recd, fieldname)) != -1) if ((p = findfld(recd, fieldname)) != -1)
{ {
off = recd->Fd[p].RecOff; off = recd->Fd[p].RecOff;
len = recd->Fd[p].Len; len = recd->Fd[p].Len;
if (recd->Fd[p].TypeF != _datefld) if (recd->Fd[p].TypeF != _datefld)
{ {
while ((recin[off] == ' ') && (len)) while ((recin[off] == ' ') && (len))
{ {
off++; off++;
len--; len--;
} }
} }
if (len) if (len)
{ {
s1 = recin + off; s1 = recin + off;
for (i = 0; i < len; i++) s[i] = s1[i]; for (i = 0; i < len; i++) s[i] = s1[i];
s[len] = '\0'; s[len] = '\0';
while ((len) && (s[len - 1] == ' ')) s[--len] = '\0'; while ((len) && (s[len - 1] == ' ')) s[--len] = '\0';
} }
else strcpy(s, ""); else strcpy(s, "");
if (recd->Fd[p].TypeF == _datefld) if (recd->Fd[p].TypeF == _datefld)
{ {
if (strlen(s)) if (strlen(s))
*d=atol(s); *d=atol(s);
else *d=0; else *d=0;
} }
return (0); return (0);
} }
else else
{ {
fatal_box("Non esiste il campo %s", fieldname); fatal_box("Non esiste il campo %s", fieldname);
return(-1); return(-1);
} }
} }
class TIsam_date_converter : public TApplication class TIsam_date_converter : public TApplication
{ {
TFilename _logfile; TFilename _logfile;
protected: protected:
virtual bool create () ; virtual bool create () ;
virtual bool destroy(); virtual bool destroy();
void update(); void update();
void update_dir(); void update_dir();
void convert_dir(); void convert_dir();
int convert_file(int logicnum); int convert_file(int logicnum);
public: public:
TIsam_date_converter() {} TIsam_date_converter() {}
~TIsam_date_converter() {} ~TIsam_date_converter() {}
}; };
bool TIsam_date_converter::create() // initvar e arrmask bool TIsam_date_converter::create() // initvar e arrmask
{ {
TApplication::create(); TApplication::create();
_logfile.temp("convlog"); _logfile.temp("convlog");
FILE * fp = fopen((const char*)_logfile,"w"); FILE * fp = fopen((const char*)_logfile,"w");
fclose(fp); fclose(fp);
update(); update();
return FALSE; return FALSE;
} }
bool TIsam_date_converter::destroy() // releasev e arrmask bool TIsam_date_converter::destroy() // releasev e arrmask
{ {
return TApplication::destroy() ; return TApplication::destroy() ;
} }
void TIsam_date_converter::update() void TIsam_date_converter::update()
{ {
long firm = get_firm(); long firm = get_firm();
TString pref; TString pref;
if (firm == 0) pref = prefix().name(); if (firm == 0) pref = prefix().name();
do_events(); do_events();
begin_wait(); begin_wait();
// Converte i files in formato DBIII, FOXPRO... // Converte i files in formato DBIII, FOXPRO...
prefix().set(""); prefix().set("");
update_dir(); update_dir();
set_autoload_new_files(FALSE); set_autoload_new_files(FALSE);
prefix().set("com"); prefix().set("com");
update_dir(); update_dir();
convert_dir(); convert_dir();
TLocalisamfile ditte(LF_NDITTE); TLocalisamfile ditte(LF_NDITTE);
for (ditte.first(); !ditte.eof(); ditte.next()) for (ditte.first(); !ditte.eof(); ditte.next())
{ {
const long codditta = ditte.get_long("CODDITTA"); const long codditta = ditte.get_long("CODDITTA");
const TRecnotype rec = ditte.recno(); const TRecnotype rec = ditte.recno();
if (prefix().exist(codditta)) if (prefix().exist(codditta))
{ {
set_firm(codditta); set_firm(codditta);
update_dir(); update_dir();
convert_dir(); convert_dir();
} }
} }
if (firm > 0) set_firm(firm); if (firm > 0) set_firm(firm);
else prefix().set(pref); else prefix().set(pref);
set_autoload_new_files(TRUE); set_autoload_new_files(TRUE);
end_wait(); end_wait();
TString80 s; TString80 s;
s << "Esaminare il file di log " << _logfile << " in caso di errori." ; s << "Esaminare il file di log " << _logfile << " in caso di errori." ;
message_box(s); message_box(s);
} }
void TIsam_date_converter::update_dir() void TIsam_date_converter::update_dir()
{ {
TDir d; TDir d;
d.get(LF_DIR); d.get(LF_DIR);
const int items = (int)d.eod(); const int items = (int)d.eod();
TString80 s("Aggiornamento direttorio "); TString80 s("Aggiornamento direttorio ");
TString pref(prefix().name()); TString pref(prefix().name());
if (pref.empty()) s << "standard"; if (pref.empty()) s << "standard";
else else
if (pref == "com") s << "comune"; if (pref == "com") s << "comune";
else s << " della ditta " << atol (pref); else s << " della ditta " << atol (pref);
TProgind p((long)(items ? items : 1), s, TRUE, TRUE, 70); TProgind p((long)(items ? items : 1), s, TRUE, TRUE, 70);
p.setstatus(1L); p.setstatus(1L);
for (int i = 2; i <= items; i++) for (int i = 2; i <= items; i++)
{ {
p.addstatus(1L); p.addstatus(1L);
d.get(i, _nolock, _nordir, _sysdirop); d.get(i, _nolock, _nordir, _sysdirop);
TFilename s(d.name()); TFilename s(d.name());
s.ext(""); s.ext("");
strcpy((char *) d.name(), s); strcpy((char *) d.name(), s);
d.put(i, _nordir, _sysdirop); d.put(i, _nordir, _sysdirop);
} }
} }
void TIsam_date_converter::convert_dir() void TIsam_date_converter::convert_dir()
{ {
const TString pref(prefix().name()); const TString pref(prefix().name());
const bool is_com = prefix().is_com(); const bool is_com = prefix().is_com();
TDir d; TDir d;
d.get(LF_DIR); d.get(LF_DIR);
const int items = (int)d.eod(); const int items = (int)d.eod();
TString80 s("Aggiornamento archivi "); TString80 s("Aggiornamento archivi ");
if (pref == "com") s << "comuni"; if (pref == "com") s << "comuni";
else s << " della ditta " << atol (pref); else s << " della ditta " << atol (pref);
TProgind p((long)(items ? items : 1), s, TRUE, TRUE, 70); TProgind p((long)(items ? items : 1), s, TRUE, TRUE, 70);
p.setstatus(1L); p.setstatus(1L);
for (int i = 2; i <= items; i++) for (int i = 2; i <= items; i++)
{ {
p.setstatus((long)(i+1)); p.setstatus((long)(i+1));
d.get(i, _nolock, _nordir, _sysdirop); d.get(i, _nolock, _nordir, _sysdirop);
const bool to_convert = (is_com ? d.is_com() : d.is_firm()); const bool to_convert = (is_com ? d.is_com() : d.is_firm());
if (to_convert) if (to_convert)
convert_file(i); convert_file(i);
} }
} }
int TIsam_date_converter::convert_file(int logicnum) int TIsam_date_converter::convert_file(int logicnum)
{ {
TDir dir; TDir dir;
TTrec r; TTrec r;
int err = NOERR; int err = NOERR;
bool restore_original=FALSE; bool restore_original=FALSE;
r.get(logicnum); r.get(logicnum);
RecDes *rd=r.rec(); RecDes *rd=r.rec();
TRecnotype i; TRecnotype i;
const int nflds = r.fields(); const int nflds = r.fields();
const int nkeys = r.keys(); const int nkeys = r.keys();
dir.get(logicnum); dir.get(logicnum);
if (dir.len() == 0 || nflds < 1 || nkeys < 1) return 0; if (dir.len() == 0 || nflds < 1 || nkeys < 1) return 0;
const char * fp = dir.name(); const char * fp = dir.name();
TFilename old(fp); TFilename old(fp);
const TRecnotype nitems = dir.eod(); const TRecnotype nitems = dir.eod();
const TRecnotype neox = dir.eox(); const TRecnotype neox = dir.eox();
TFile f(dir.len()); TFile f(dir.len());
old.ext("dta"); old.ext("dta");
if (fexist(old)) if (fexist(old))
{ {
f.open(old); f.open(old);
{ {
TSystemisamfile newfile(logicnum); TSystemisamfile newfile(logicnum);
if (newfile.build(10) != NOERR) if (newfile.build(10) != NOERR)
fatal_box("Non riesco a creare il file %s : errore n. %d", fp, newfile.status()); fatal_box("Non riesco a creare il file %s : errore n. %d", fp, newfile.status());
} }
TString s(80); TString s(80);
s.format("Aggiornamento archivio %s", fp); s.format("Aggiornamento archivio %s", fp);
TProgind p((long)(nitems ? nitems : 1), s, TRUE, TRUE, 70); TProgind p((long)(nitems ? nitems : 1), s, TRUE, TRUE, 70);
TLocalisamfile newfile(logicnum); TLocalisamfile newfile(logicnum);
TToken_string ts(128); // Build token_string with the names of date fields and logical fields TToken_string ts(128); // Build token_string with the names of date fields and logical fields
TToken_string tslog(128); TToken_string tslog(128);
for (int j=0; j<r.fields(); j++) for (int j=0; j<r.fields(); j++)
if (rd->Fd[j].TypeF == _datefld) if (rd->Fd[j].TypeF == _datefld)
ts.add(rd->Fd[j].Name); ts.add(rd->Fd[j].Name);
else else
if (rd->Fd[j].TypeF == _boolfld) if (rd->Fd[j].TypeF == _boolfld)
tslog.add(rd->Fd[j].Name); tslog.add(rd->Fd[j].Name);
const int tslog_items = tslog.items(); const int tslog_items = tslog.items();
const int ts_items = ts.items(); const int ts_items = ts.items();
for (i = 1; newfile.good() && i <= dir.eod(); i++) for (i = 1; newfile.good() && i <= dir.eod(); i++)
{ {
f.read(newfile.curr().string(),i); f.read(newfile.curr().string(),i);
if (newfile.curr().string()[0] == '\0') if (newfile.curr().string()[0] == '\0')
{ {
newfile.curr().recall(); newfile.curr().recall();
if (tslog_items > 0) if (tslog_items > 0)
for (const char * field_name = tslog.get(0); field_name != NULL; field_name = tslog.get()) for (const char * field_name = tslog.get(0); field_name != NULL; field_name = tslog.get())
{ {
const TString16 value(newfile.curr().get_str(field_name)); const TString16 value(newfile.curr().get_str(field_name));
newfile.put(field_name,value == "X"); newfile.put(field_name,value == "X");
} }
if (ts_items > 0) if (ts_items > 0)
for (const char *field_name = ts.get(0); field_name != NULL; field_name = ts.get()) for (const char *field_name = ts.get(0); field_name != NULL; field_name = ts.get())
{ {
long wd; long wd;
CGetField(field_name,rd,newfile.curr().string(),&wd); CGetField(field_name,rd,newfile.curr().string(),&wd);
TDate d(wd); TDate d(wd);
newfile.put(field_name,d); newfile.put(field_name,d);
} }
} }
else else
newfile.curr().discard(); newfile.curr().discard();
if ((i % 50) == 0) p.setstatus((long)(i + 1)); if ((i % 50) == 0) p.setstatus((long)(i + 1));
if (!newfile.curr().isdeleted()) if (!newfile.curr().isdeleted())
newfile.write(); newfile.write();
} }
p.setstatus((long)nitems); p.setstatus((long)nitems);
f.close(); f.close();
err=newfile.status(); err=newfile.status();
if (newfile.good()) if (newfile.good())
{ {
old.ext("dta"); old.ext("dta");
::remove(old); ::remove(old);
old.ext("ndx"); old.ext("ndx");
::remove(old); ::remove(old);
} }
else else
{ {
error_box("Errore n.ro %d nella conversione dell' archivio %s:\n %ld records non convertiti.", error_box("Errore n.ro %d nella conversione dell' archivio %s:\n %ld records non convertiti.",
err, fp, nitems - i + 2); err, fp, nitems - i + 2);
restore_original=TRUE; restore_original=TRUE;
} }
} }
else else
{ {
// Crea il file se non esiste il relativo .DTA. // Crea il file se non esiste il relativo .DTA.
const TString pref(prefix().name()); const TString pref(prefix().name());
const bool is_com = prefix().is_com(); const bool is_com = prefix().is_com();
prefix().set(""); prefix().set("");
dir.get(logicnum); dir.get(logicnum);
const int module = abs((int)dir.flags()); const int module = abs((int)dir.flags());
prefix().set(pref); prefix().set(pref);
dir.get(logicnum, _nolock, _nordir, _sysdirop); dir.get(logicnum, _nolock, _nordir, _sysdirop);
bool to_create = (is_com ? dir.is_com() : dir.is_firm()); bool to_create = (is_com ? dir.is_com() : dir.is_firm());
if (to_create && has_module(module, CHK_DONGLE)) if (to_create && has_module(module, CHK_DONGLE))
{ {
dir.get(logicnum); dir.get(logicnum);
TFilename s(dir.name()); TFilename s(dir.name());
s.ext("dbf"); s.ext("dbf");
if (!fexist(s)) // Crea il file solo se non esiste il .DBF if (!fexist(s)) // Crea il file solo se non esiste il .DBF
{ {
TSystemisamfile f(logicnum); TSystemisamfile f(logicnum);
f.build(10L); f.build(10L);
} }
} }
} }
if (restore_original) if (restore_original)
{ {
// Remove files partially converted // Remove files partially converted
old.ext("dbf"); old.ext("dbf");
::remove(old); ::remove(old);
TToken_string t(10); TToken_string t(10);
get_idx_names(logicnum,t); get_idx_names(logicnum,t);
for (const char * name=t.get(0); name != NULL; name=t.get()) for (const char * name=t.get(0); name != NULL; name=t.get())
::remove(name); ::remove(name);
if (t.items() > 1) // A .cgp must be removed too! if (t.items() > 1) // A .cgp must be removed too!
{ {
old.ext("cgp"); old.ext("cgp");
::remove(old); ::remove(old);
} }
// Put dir to restore original EOD and EOX. // Put dir to restore original EOD and EOX.
dir.get(logicnum,_lock,_nordir,_sysdirop); dir.get(logicnum,_lock,_nordir,_sysdirop);
dir.eod()=nitems; dir.eod()=nitems;
dir.eox()=neox; dir.eox()=neox;
dir.put(logicnum,_nordir,_sysdirop); dir.put(logicnum,_nordir,_sysdirop);
FILE *fp = fopen((const char*)_logfile,"a"); FILE *fp = fopen((const char*)_logfile,"a");
old.ext("dta"); old.ext("dta");
fprintf(fp,"File: %s (%d). %ld records non convertiti. Errore %d.\n", fprintf(fp,"File: %s (%d). %ld records non convertiti. Errore %d.\n",
(const char*) old, logicnum, nitems-i+2, err); (const char*) old, logicnum, nitems-i+2, err);
fclose(fp); fclose(fp);
} }
return err; return err;
} }
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
TIsam_date_converter a; TIsam_date_converter a;
a.run(argc, argv, "Conversione a CodeBase"); a.run(argc, argv, "Conversione a CodeBase");
return 0; return 0;
} }