diff --git a/ba/ba1300.cpp b/ba/ba1300.cpp index a86cdae37..49e8744a8 100755 --- a/ba/ba1300.cpp +++ b/ba/ba1300.cpp @@ -1,210 +1,212 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ba1.h" -#include "ba1300.h" -#include "ba1300a.h" - - -class BA1300_application:public TApplication -{ - TTestSheet * _testsheet; - TTestProc * _test, - * _debug; - TMask * _mask; - long _firm; - -protected: - virtual bool menu(MENU_TAG); - virtual bool create () ; - virtual bool destroy(); - virtual bool extended_firm() const { return TRUE; } - -public: - BA1300_application() : _testsheet(NULL), _mask(NULL) {} - TTestSheet * get_sheet() {return _testsheet;} - TTestProc * get_test() {return _test;} - TMask * get_mask() {return _mask;} - TArray_sheet * field_sheet(TMask *); - -}; - -HIDDEN bool seq_handler(TMask_field& f, KEY key) -{ - if (key==K_ENTER) - if (!fexist((const char*)f.get())) - { - warning_box("File inesistente"); - return FALSE; - } - return TRUE; -} - -bool BA1300_application::create() // initvar e arrmask - -{ - _firm = get_firm(); - - if (argc() > 2) - { - return FALSE; - } - else - { - _mask = new TMask ("ba1300a"); // Maschera principale - set_firm(); - _testsheet = new TTestSheet("Selezione Files") ; - get_sheet()->add_button(DLG_RESET,"~Reset",K_F6); - } - return TRUE ; -} - -bool BA1300_application::destroy() // releasev e arrmask - -{ - if (_firm) set_firm(_firm); - if (_testsheet != NULL) delete _testsheet; - if (_mask != NULL) delete _mask; - return TRUE ; -} - -TArray_sheet * BA1300_application::field_sheet(TMask * m) -{ - TEdit_field& f=(TEdit_field&) m->field(F_FILE); - TArray_sheet * s=(TArray_sheet*) f.sheet()->sheet(); - return s; -} - -bool BA1300_application::menu(MENU_TAG m) -{ - KEY tasto,tastoS; - long numtest; - TMask *msk; - TDir *cdir; - - disable_menu_item(M_FILE_NEW); - switch (m) - { - case BAR_ITEM(2): - msk = new TMask("ba1300b"); - cdir = new TDir; - cdir->get(LF_DIR,_nolock,_nordir,_sysdirop); - const int nitems=cdir->eod(); - for (int i=0; iget(i+1,_nolock,_nordir,_sysdirop); - riga=format("%3d",i+1); - riga.add(cdir->name()); - riga.add(format("%ld",cdir->eod())); - riga.add(format("%ld",cdir->eox())); - riga.add(format("%u",cdir->len())); - riga.add(cdir->des()); - field_sheet(msk)->add(riga); - } - msk->set_handler(F_SEQUENZA,seq_handler); - if (msk->run()==K_ENTER) - { - _debug = new TTestProc; - _debug->set_file(msk->get_long(F_FILE)); - _debug->load_random(msk->get(F_SEQUENZA)); - if (!_debug->stopped()) - _debug->do_debug(); - else - warning_box("File di sequenza non valido"); - delete _debug; - } - delete msk; - delete cdir; - break; - case BAR_ITEM(1): - do { - switch(tasto=get_mask()->run()) - { - case K_ENTER: - if (get_sheet()->checked()>0 && (get_mask()->get_long(F_ITERAZIONI)>0 || get_mask()->get_bool(F_CONTINUO))) - { - _test = new TTestProc; - get_test()->set_sheet(get_sheet()); - get_test()->set_rmc(); - get_test()->get_win()->set_color(COLOR_BLACK,COLOR_WHITE); - get_test()->get_win()->clear(COLOR_WHITE); - get_test()->get_win()->set_caption("Verifica di stabilita'"); - get_test()->get_win()->WriteW(10,5,"Test N. :"); - get_test()->get_win()->WriteW(10,7,"Nome File :"); - get_test()->get_win()->WriteW(10,9,"Record cancellati :"); - get_test()->get_win()->WriteW(10,10,"Operazione in corso :"); - get_test()->get_win()->WriteW(10,12,"Tempo trascorso :"); - get_test()->get_win()->WriteW(10,13,"Tempo stimato :"); - get_test()->get_win()->WriteW(10,15,"Ultimo Errore :"); - numtest=0; - while (((++numtest)<=get_mask()->get_long(F_ITERAZIONI) || get_mask()->get_bool(F_CONTINUO)) && (!get_test()->stopped())) - { - if (get_mask()->get_bool(F_CONTINUO)) - get_test()->get_win()->WriteW(33,5,(const char*)TString(20).format("%4ld (CONTINUO)",numtest)); - else - get_test()->get_win()->WriteW(33,5,(const char*)TString(20).format("%4ld/%-4ld",numtest,_mask->get_long(F_ITERAZIONI))); - get_test()->set_numt(numtest); - get_test()->do_test_1(); - } - if (get_test()->rm_copy()) - { - get_test()->get_win()->WriteW(33,10,"CANCELLAZIONE COPIE "); - for (long i=0;iitems();i++) - if (get_sheet()->checked(i)) - get_test()->remove_copy(i+1); - } - delete _test; - } - else - warning_box("Nessun file selezionato"); - break; - case K_F4: - get_sheet()->sr_status(); - while ((tastoS=get_sheet()->run()) == K_F6) - for (int i=0; iitems();i++) - get_sheet()->uncheck(i); - if (tastoS == K_ESC) - get_sheet()->sr_status(FALSE); - else - { // Cannot select first two files. - get_sheet()->uncheck(0); - get_sheet()->uncheck(1); - } - break; - case K_F5: - if (fexist((const char*)TString(20).format("test%creport.txt",Separator))) - { - TTestReport rep_win("Report"); - rep_win.load_report(); - rep_win.run(); - } else - warning_box("Report non disponibile"); - break; - default: - break; - } - } while (tasto != K_ESC); - break; - } - enable_menu_item(M_FILE_NEW); - return xvt_test_menu_tag(BAR_ITEM(2)); -} - -int ba1300(int argc, char** argv) -{ - BA1300_application a; - a.run(argc,argv,"Test dell'ISAM"); - return 0; -} +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ba1.h" +#include "ba1300.h" +#include "ba1300a.h" + + +class BA1300_application:public TApplication +{ + TTestSheet * _testsheet; + TTestProc * _test, + * _debug; + TMask * _mask; + long _firm; + +protected: + virtual bool menu(MENU_TAG); + virtual bool create () ; + virtual bool destroy(); + virtual bool extended_firm() const { return TRUE; } + +public: + BA1300_application() : _testsheet(NULL), _mask(NULL) {} + TTestSheet * get_sheet() {return _testsheet;} + TTestProc * get_test() {return _test;} + TMask * get_mask() {return _mask;} + TArray_sheet * field_sheet(TMask *); + +}; + +HIDDEN bool seq_handler(TMask_field& f, KEY key) +{ + if (key==K_ENTER) + if (!fexist((const char*)f.get())) + { + warning_box("File inesistente"); + return FALSE; + } + return TRUE; +} + +bool BA1300_application::create() // initvar e arrmask + +{ + _firm = get_firm(); + + if (argc() > 2) + { + return FALSE; + } + else + { + _mask = new TMask ("ba1300a"); // Maschera principale + set_firm(); + _testsheet = new TTestSheet("Selezione Files") ; + get_sheet()->add_button(DLG_RESET,"~Reset",K_F6); + } + return TRUE ; +} + +bool BA1300_application::destroy() // releasev e arrmask + +{ + if (_firm) set_firm(_firm); + if (_testsheet != NULL) delete _testsheet; + if (_mask != NULL) delete _mask; + return TRUE ; +} + +TArray_sheet * BA1300_application::field_sheet(TMask * m) +{ + TEdit_field& f=(TEdit_field&) m->field(F_FILE); + TArray_sheet * s=(TArray_sheet*) f.sheet()->sheet(); + return s; +} + +bool BA1300_application::menu(MENU_TAG m) +{ + KEY tasto,tastoS; + long numtest; + TMask *msk; + TDir *cdir; + + disable_menu_item(M_FILE_NEW); + switch (m) + { + case BAR_ITEM(2): + { + msk = new TMask("ba1300b"); + cdir = new TDir; + cdir->get(LF_DIR,_nolock,_nordir,_sysdirop); + const int nitems=(int)cdir->eod(); + for (int i=0; iget(i+1,_nolock,_nordir,_sysdirop); + riga=format("%3d",i+1); + riga.add(cdir->name()); + riga.add(format("%ld",cdir->eod())); + riga.add(format("%ld",cdir->eox())); + riga.add(format("%u",cdir->len())); + riga.add(cdir->des()); + field_sheet(msk)->add(riga); + } + msk->set_handler(F_SEQUENZA,seq_handler); + if (msk->run()==K_ENTER) + { + _debug = new TTestProc; + _debug->set_file(msk->get_int(F_FILE)); + _debug->load_random(msk->get(F_SEQUENZA)); + if (!_debug->stopped()) + _debug->do_debug(); + else + warning_box("File di sequenza non valido"); + delete _debug; + } + delete msk; + delete cdir; + } + break; + case BAR_ITEM(1): + do { + switch(tasto=get_mask()->run()) + { + case K_ENTER: + if (get_sheet()->checked()>0 && (get_mask()->get_long(F_ITERAZIONI)>0 || get_mask()->get_bool(F_CONTINUO))) + { + _test = new TTestProc; + get_test()->set_sheet(get_sheet()); + get_test()->set_rmc(); + get_test()->get_win()->set_color(COLOR_BLACK,COLOR_WHITE); + get_test()->get_win()->clear(COLOR_WHITE); + get_test()->get_win()->set_caption("Verifica di stabilita'"); + get_test()->get_win()->WriteW(10,5,"Test N. :"); + get_test()->get_win()->WriteW(10,7,"Nome File :"); + get_test()->get_win()->WriteW(10,9,"Record cancellati :"); + get_test()->get_win()->WriteW(10,10,"Operazione in corso :"); + get_test()->get_win()->WriteW(10,12,"Tempo trascorso :"); + get_test()->get_win()->WriteW(10,13,"Tempo stimato :"); + get_test()->get_win()->WriteW(10,15,"Ultimo Errore :"); + numtest=0; + while (((++numtest)<=get_mask()->get_long(F_ITERAZIONI) || get_mask()->get_bool(F_CONTINUO)) && (!get_test()->stopped())) + { + if (get_mask()->get_bool(F_CONTINUO)) + get_test()->get_win()->WriteW(33,5,format("%4ld (CONTINUO)",numtest)); + else + get_test()->get_win()->WriteW(33,5,format("%4ld/%-4ld",numtest,_mask->get_long(F_ITERAZIONI))); + get_test()->set_numt(numtest); + get_test()->do_test_1(); + } + if (get_test()->rm_copy()) + { + get_test()->get_win()->WriteW(33,10,"CANCELLAZIONE COPIE "); + for (int i=0;iitems();i++) + if (get_sheet()->checked(i)) + get_test()->remove_copy(i+1); + } + delete _test; + } + else + warning_box("Nessun file selezionato"); + break; + case K_F4: + get_sheet()->sr_status(); + while ((tastoS=get_sheet()->run()) == K_F6) + for (int i=0; iitems();i++) + get_sheet()->uncheck(i); + if (tastoS == K_ESC) + get_sheet()->sr_status(FALSE); + else + { // Cannot select first two files. + get_sheet()->uncheck(0); + get_sheet()->uncheck(1); + } + break; + case K_F5: + if (fexist((const char*)TString(20).format("test%creport.txt",Separator))) + { + TTestReport rep_win("Report"); + rep_win.load_report(); + rep_win.run(); + } else + warning_box("Report non disponibile"); + break; + default: + break; + } + } while (tasto != K_ESC); + break; + } + enable_menu_item(M_FILE_NEW); + return xvt_test_menu_tag(BAR_ITEM(2)); +} + +int ba1300(int argc, char** argv) +{ + BA1300_application a; + a.run(argc,argv,"Test dell'ISAM"); + return 0; +} diff --git a/ba/ba1300.h b/ba/ba1300.h index 2994a61ef..c8573ff15 100755 --- a/ba/ba1300.h +++ b/ba/ba1300.h @@ -1,103 +1,103 @@ -#ifndef __BA1300_H -#define __BA1300_H - -#include "ba1100.h" - -#if XVT_OS == XVT_OS_WIN -#define Separator '\\' -#else -#define Separator '/' -#endif - -//////////////////////////////////////// -// Here defining classes // -//////////////////////////////////////// - -class TTestSheet : public TDir_sheet -{ - TBit_array _oldstatus; // Previous status of selected files -protected: - void page_build(long first, byte rows); -public: - TTestSheet(const char* titolo, const char* colonne="@1|N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Flags@7", byte bottoni=0x0); - ~TTestSheet() ; - void sr_status(bool save=TRUE); -}; - -class TTestFile : public TBaseisamfile -{ -public: - TTestFile(int ln,bool lt=TRUE) : TBaseisamfile(ln,lt) {} - virtual ~TTestFile() {} - int close() {return _close();} - int open(unsigned int mode = _manulock) {return _open(mode);} - const char * file_name() const {return filename();} -}; - -class TTestWin : public TIndwin -{ -protected: - virtual void update() {update_text();} - virtual void handler(WINDOW w, EVENT *e); - void update_text() {set_mode(M_COPY); check_stop();} -public: - void WriteW(short x, short y, const char* line) {stringat(x,y,line);update_text();do_events();} - TTestWin(); - ~TTestWin() {}; -}; - -class TTestProc -{ - TTestSheet * _sheet; // Sheet with files selected - TTestFile * _workf; // working file - TTestWin * _win; // Output window - long * _randseq; // Random sequence - long _ntest; // number of test in progress - int _nfile; // number of file being tested - long _kriminal; // number of record incriminated (Debug) - int _nkeys; // # of keys defined for current file - bool _block; // is test blocked ? - bool _rmc; // Remove copies at the end of test ? -protected: - void do_random(long eod); - void filecopy(bool save=TRUE); - void DumpReport(int err, long i, long x, int key); - long sumop(const long n) {return ((n+1)*(n/2)+(n%2)*((n+1)/2));} - int ctrl_keys(); - bool show_mess(int, int, long, long, int); - const char * fmttime(const long); -public: - TTestProc(); - ~TTestProc(); - const char* get_base(); - void do_test_1(); - void do_test_2(); - void do_debug(); - void remove_copy(long n); - void load_random(const TString& st); - bool stopped() {return _block;} - bool rm_copy() {return _rmc;} - void set_rmc(bool a=FALSE) {_rmc = a;} - long num_test() {return _ntest;} - void set_numt(const long num) { _ntest = num;} - long num_file() {return _nfile;} - void set_file(long n) {_nfile=n;} - long number(const long n) {return _randseq[n];} - void set_sheet (TTestSheet * sh) {_sheet=sh;} - TTestSheet * get_isheet() {return _sheet;} - TTestWin * get_win() {return _win;} -}; - -class TTestReport : public TScroll_window -{ - TArray _report; -protected: - virtual void update(); - virtual bool on_key(KEY); -public: - TTestReport(const char* title); - ~TTestReport() {}; - void load_report(); - TString& get_row(int n) {return (TString&)_report[n];} -}; -#endif +#ifndef __BA1300_H +#define __BA1300_H + +#include "ba1100.h" + +#if XVT_OS == XVT_OS_WIN +#define Separator '\\' +#else +#define Separator '/' +#endif + +//////////////////////////////////////// +// Here defining classes // +//////////////////////////////////////// + +class TTestSheet : public TDir_sheet +{ + TBit_array _oldstatus; // Previous status of selected files +protected: + void page_build(long first, byte rows); +public: + TTestSheet(const char* titolo, const char* colonne="@1|N.@5|Nome@20|EOD@7|EOX@7|Lung. |Descrizione@43|Flags@7", byte bottoni=0x0); + ~TTestSheet() ; + void sr_status(bool save=TRUE); +}; + +class TTestFile : public TBaseisamfile +{ +public: + TTestFile(int ln,bool lt=TRUE) : TBaseisamfile(ln,lt) {} + virtual ~TTestFile() {} + int close() {return _close();} + int open(unsigned int mode = _manulock) {return _open(mode);} + const char * file_name() const {return filename();} +}; + +class TTestWin : public TIndwin +{ +protected: + virtual void update() {update_text();} + virtual void handler(WINDOW w, EVENT *e); + void update_text() {set_mode(M_COPY); check_stop();} +public: + void WriteW(short x, short y, const char* line) {stringat(x,y,line);update_text();do_events();} + TTestWin(); + ~TTestWin() {}; +}; + +class TTestProc +{ + TTestSheet * _sheet; // Sheet with files selected + TTestFile * _workf; // working file + TTestWin * _win; // Output window + long * _randseq; // Random sequence + long _ntest; // number of test in progress + int _nfile; // number of file being tested + long _kriminal; // number of record incriminated (Debug) + int _nkeys; // # of keys defined for current file + bool _block; // is test blocked ? + bool _rmc; // Remove copies at the end of test ? +protected: + void do_random(long eod); + void filecopy(bool save=TRUE); + void DumpReport(int err, long i, long x, int key); + long sumop(const long n) {return ((n+1)*(n/2)+(n%2)*((n+1)/2));} + int ctrl_keys(); + bool show_mess(int, int, long, long, int); + const char * fmttime(const long); +public: + TTestProc(); + ~TTestProc(); + const char* get_base(); + void do_test_1(); + void do_test_2(); + void do_debug(); + void remove_copy(int n); + void load_random(const TString& st); + bool stopped() {return _block;} + bool rm_copy() {return _rmc;} + void set_rmc(bool a=FALSE) {_rmc = a;} + long num_test() {return _ntest;} + void set_numt(const long num) { _ntest = num;} + int num_file() {return _nfile;} + void set_file(int n) {_nfile=n;} + long number(const long n) {return _randseq[n];} + void set_sheet (TTestSheet * sh) {_sheet=sh;} + TTestSheet * get_isheet() {return _sheet;} + TTestWin * get_win() {return _win;} +}; + +class TTestReport : public TScroll_window +{ + TArray _report; +protected: + virtual void update(); + virtual bool on_key(KEY); +public: + TTestReport(const char* title); + ~TTestReport() {}; + void load_report(); + TString& get_row(int n) {return (TString&)_report[n];} +}; +#endif diff --git a/ba/ba1301.cpp b/ba/ba1301.cpp index 092efb01f..5b39f65f3 100755 --- a/ba/ba1301.cpp +++ b/ba/ba1301.cpp @@ -1,603 +1,603 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if XVT_OS!=XVT_OS_SCOUNIX -#include -#endif - -#include "ba1300.h" - -extern "C" { - void cgettime(char *); -} - -TTestSheet::TTestSheet(const char* titolo, const char* colonne,byte bottoni) -:TDir_sheet(titolo, colonne, bottoni) -{} - -TTestSheet::~TTestSheet() -{} - -void TTestSheet::page_build(long first, byte rows) - -{ - TToken_string l(128); - for (byte i = 0; i < rows; i++) - { - const int n = int(i+first+1); - dir()->get (n,_nolock,_nordir,_sysdirop); - l.cut(0); - l.add(""); - l.add(format("%3d", n)); // Numero progressivo del file - l.add(dir()->name()); - const TRecnotype eod = dir()->eod(); - l.add(format("%ld", eod)); - const TRecnotype eox = dir()->eox(); - l.add(format("%ld", eox)); - const word len = dir()->len(); - l.add(format("%u", len)); - l.add(dir()->des()); - l.add(format("%ld", dir()->flags())); - set_row(l, i); - } -} - -void TTestSheet::sr_status(bool save) -{ - for (int i=0; i>1; - cbits++; - } - scale=(unsigned int)0x8000; - for (i=1;i<=(long)cbits;i++) - { - scale=scale>>1; - scale |= 0x8000; - } - // Extracts "random" seed from time - time(&tloc); - parm=(unsigned int)(tloc & 0x0000FFFF); - srand(parm); - // Mix array... - for (i=0;i>1; - if (((long) rnd)>=eod) // Difficile che accada... - rnd=(unsigned int) eod-1; - com=_randseq[i]; - _randseq[i]=_randseq[(long)rnd]; - _randseq[(long)rnd]=com; - } -} - -int TTestProc::ctrl_keys() -{ - int err=1; - - for (int nk=1;nk<=_nkeys;nk++) - { - _workf->setkey(nk); - if ((err=_workf->first())==NOERR) - return NOERR; - } - return err; -} - -void TTestProc::do_test_1() -{ - bool FoundError; - long i,EOD; - int err; - time_t inix,finix; - - _nfile=0; - while ((_nfile++ <= get_isheet()->items()) && !_block) - { - EOD=get_isheet()->row(_nfile-1).get_long(3); - if (get_isheet()->checked(_nfile-1) && EOD > 0) - { - get_win()->WriteW(33,7,(const char*)TString(18).format("%-18s",get_isheet()->row(_nfile-1).get(2))); - get_win()->WriteW(33,12,"000:00:00"); - get_win()->WriteW(33,13,"000:00:00"); - if (_ntest == 1) - { - TSystemisamfile f(_nfile); - get_win()->WriteW(33,10,"COMPATTAMENTO "); - if ((f.packfile(FALSE)!=NOERR)||(f.packindex(FALSE) != NOERR)) - error_box("Errore in compattamento file %d",_nfile); - get_win()->WriteW(33,10,"COPIA DI SICUREZZA "); - filecopy(); - set_rmc(TRUE); - } // If it was test # 1 - _workf = new TTestFile(_nfile); - time(&inix); - if (_workf->open(_excllock) == NOERR) - { - TTrec r; - r.get(_nfile); - _nkeys=r.keys(); - FoundError=FALSE; - i=0; - EOD=_workf->eod(); - get_win()->WriteW(33,9,(const char*)TString(14).format(" 0/%-7ld",EOD)); - get_win()->WriteW(33,10,"TEST1 (cisreadrec-cisdelete)"); - _randseq = new long[EOD]; - do_random(EOD); - while (!FoundError && ireadat(number(i++)))==NOERR) - err=_workf->remove(); - if (err!=NOERR) - FoundError=TRUE; - if (get_win()->iscancelled()) - _block=TRUE; - if ((i%20)==0) - get_win()->WriteW(33,9,(const char*)TString(20).format("%7ld/%-7ld",i,EOD)); - time(&finix); - get_win()->WriteW(33,12,(const char*)TString(10).format("%s",fmttime(finix-inix))); - if (((finix-inix)%3)==0) - { - long com=((finix-inix)*EOD)/(i+1); - get_win()->WriteW(33,13,(const char*)TString(10).format("%s",fmttime(com))); - } - } - if (!_block && ((ctrl_keys()==NOERR) || FoundError)) - do_test_2(); - _workf->close(); - get_win()->WriteW(33,10,"RIPRISTINO ARCHIVI "); - filecopy(FALSE); //restore copies - if (_randseq!=NULL) - delete _randseq; - } // If it was open - if (_workf != NULL) - delete _workf; - } // If it was selected - } // While test is in progress -} - -void TTestProc::do_test_2() -{ - time_t alpha,omega; - long i=0,j; - int err=NOERR; - - get_win()->WriteW(33,10,"TEST2: RIPRISTINO ARCHIVI "); - _workf->close(); - filecopy(FALSE); - if (_workf->open(_excllock) == NOERR) - { - long EOD=_workf->eod(); - long optot=sumop(EOD); - long optr=1; - - get_win()->WriteW(33,10,"TEST2 (cisreadrec-cisdelete)"); - time(&alpha); - while (!_block && ireadat(number(i)); - err=_workf->remove(); - j=i+1; - get_win()->WriteW(33,10,"TEST2: CONTROLLO CHIAVI "); - get_win()->WriteW(33,9,(const char*)TString(20).format("%7ld/%-7ld",j,EOD)); - while (!_block && jiscancelled()) _block=TRUE; - time(&omega); - get_win()->WriteW(33,12,(const char*)TString(10).format("%s",fmttime(omega-alpha))); - if ((omega-alpha)%3==0) - get_win()->WriteW(33,13,(const char*)TString(10).format("%s",fmttime(((omega-alpha)*optot)/optr))); - err=_workf->readat(number(j)); - optr++; - int k=1; - while (k<=_nkeys && err==NOERR) - { - TTrec r; - r.get(_nfile); - TToken_string def(r.keydef(k-1)); - - _workf->setkey(k); - err=_workf->read(); - if (def.get_char(1)=='X') // if keys are duplicated - { - TString ksaved(_workf->curr().key(k)); - bool Fnd=FALSE; - - while (err==NOERR && !Fnd && ksaved==_workf->curr().key(k)) - if (_workf->recno()==number(j)) - Fnd=TRUE; - else - err=_workf->next(); - } - if (err!=NOERR || number(j)!=_workf->recno()) - { - get_win()->WriteW(33,10,"Trovati errori scrittura report"); - DumpReport(err,i,j,k); - if (err==NOERR) - err=999; //errore fittizio, tanto per farlo uscire - } - k++; - } - j++; - } - get_win()->WriteW(33,10,"TEST2 (cisreadrec-cisdelete) "); - i++; - } - } -} - -void TTestProc::DumpReport(int err, long i, long x, int key) -{ - static rnum=0; - char ora[10]; - TString RandomFile,ReportFile; - FILE * fp; - - get_win()->WriteW(33,15,(const char*)TString(35).format("File nr. %d Test nr. %ld",_nfile,_ntest)); - cgettime(ora); - if (!fexist("test")) // create directory -#if XVT_OS==XVT_OS_SCOUNIX - mkdir("test",0777); -#else - _mkdir("test"); -#endif - RandomFile.format("test%crnd%d.dat",Separator,rnum++); - if ((fp=fopen((const char*)RandomFile,"w"))!=NULL) - { - for (int j=0;j<_workf->eod();j++) - if (j==i) - fprintf(fp,"%9ld*\n",number(j)); - else - fprintf(fp,"%9ld \n",number(j)); - fclose(fp); - } - ReportFile.format("test%creport.txt",Separator); - if ((fp=fopen((const char*)ReportFile,"a"))!=NULL) - { - fprintf(fp,"REPORT sulla verifica della stabilita' dell'ISAM\n"); - fprintf(fp,"------\n"); - fprintf(fp,"\n"); - fprintf(fp,"Eseguito il : %s Alle : %s\n",(const char*)TDate(TODAY),ora); - fprintf(fp,"\n"); - fprintf(fp,"File nr. : %4d %s\n",_nfile,get_isheet()->row(_nfile-1).get(2)); - fprintf(fp,"File Random : %s\n",(const char*)RandomFile); - fprintf(fp,"Nr. Record cancellato: %5ld Nr. Record letto: %5ld\n",number(i),number(x)); - fprintf(fp,"Nr. Chiave elaborata: %3d\n",key); - if (err!=NOERR) - fprintf(fp,"Errore generato dal record letto: %d\n",err); - else - fprintf(fp,"Errore generato dal record letto: Numero di record non corretto.\n\n"); - fprintf(fp,"------\n\n\n"); - fclose(fp); - } -} - -void TTestProc::load_random(const TString& st) -{ - FILE *fp; - char c; - - _kriminal=0; - if ((fp=fopen((const char*)st,"r"))!=NULL) - { - TDir d; - d.get(_nfile,_nolock,_nordir,_sysdirop); - _randseq = new long[d.eod()]; - for (long i=0;id.eod()) - { - _block=TRUE; - break; - } - } - } -} - -void TTestProc::do_debug() -{ - TDir d; - - d.get(_nfile,_nolock,_nordir,_sysdirop); - get_win()->set_color(COLOR_BLACK,COLOR_WHITE); - get_win()->clear(COLOR_WHITE); - get_win()->set_caption("Ricerca dell'errore"); - get_win()->WriteW(8,5,(const char*)TString(25).format("File numero : %4d\t\t\t%s",_nfile,(const char*)d.name())); - get_win()->WriteW(8,7,"Record Cancellati :"); - get_win()->WriteW(8,9,"Operazione in corso : COPIA DI SICUREZZA"); - get_win()->WriteW(8,11,"Record cancellato :"); - get_win()->WriteW(8,12,"Record letto :"); - get_win()->WriteW(8,14,"Errore rilevato :"); - - filecopy(); // Backup copies. Must be placed here - // otherwise I get a "File already open error" - _workf = new TTestFile(_nfile); - if (_workf->open(_excllock) == NOERR) - { - TTrec r; - r.get(_nfile); - _nkeys=r.keys(); - long i=0,j; - int k,err=NOERR; - bool step=FALSE; - get_win()->WriteW(30,9,"Cancello fino al Kriminale..."); - while (!stopped() && i<_workf->eod() && err==NOERR) - { - if (number(i)==_kriminal) - step=TRUE; // Put here a Break Point to debug step by step - err=_workf->readat(number(i)); - if (err!=NOERR || step) - _block=show_mess(1,err,number(i),number(i),0); - err=_workf->remove(); - if (err!=NOERR || step) - _block=show_mess(2,err,number(i),number(i),0); - j=i+1; - get_win()->WriteW(30,9,"TEST 2: CONTROLLO CHIAVI "); - get_win()->WriteW(30,7,(const char*)TString(20).format("%5ld/%-5ld",j,_workf->eod())); - get_win()->WriteW(30,11,(const char*)TString(10).format("%5ld",number(i))); - while (!stopped() && j<_workf->eod() && err==NOERR) - { - if (get_win()->iscancelled()) - _block=TRUE; - err=_workf->readat(number(j)); - if (err!=NOERR || step) - _block=show_mess(3,err,number(j),number(j),0); - get_win()->WriteW(30,12,(const char*)TString(10).format("%5ld",number(j))); - k=1; - while (k<=_nkeys && err==NOERR && !stopped()) - { - TToken_string def(r.keydef(k-1)); - - _workf->setkey(k); - err=_workf->read(); - if (err!=NOERR || step) - _block=show_mess(4,err,number(j),_workf->recno(),k); - if (def.get_char(1)=='X') // if keys are duplicated - { - TString ksaved(_workf->curr().key(k)); - bool Fnd=FALSE; - - while (!stopped() && err==NOERR && !Fnd && ksaved==_workf->curr().key(k)) - if (_workf->recno()==number(j)) - Fnd=TRUE; - else - { - err=_workf->next(); - if (err!=NOERR || step) - _block=show_mess(5,err,number(j),_workf->recno(),k); - } - } // if keys are duplicated - if (err!=NOERR || number(j)!=_workf->recno()) - { - _block=show_mess(6,err,number(j),number(j),0); - err=999; // So it will exit - } - k++; - } - j++; - } - get_win()->WriteW(30,9,"Cisreadrec -- Cisdelete "); - i++; - } - _workf->close(); - } - get_win()->WriteW(30,9,"RIPRISTINO ARCHIVIO "); - filecopy(FALSE); // Restore copies - get_win()->WriteW(30,9,"CANCELLAZIONE COPIE "); - remove_copy(_nfile); // Delete backup copies - - // Free pointers - if (_workf!=NULL) - delete _workf; - if (_randseq != NULL) - delete _randseq; -} - -bool TTestProc::show_mess(int act, int err, long n1, long n2, int k) -{ - switch (act) - { - case 1: - get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la readrec per rec. # %ld",n1)); - get_win()->WriteW(30,11,(const char*)TString(40).spaces()); - break; - case 2: - get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la delete per rec. # %ld",n1)); - get_win()->WriteW(30,11,(const char*)TString(10).format("%5ld",n1)); - break; - case 3: - get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la readrec per contr. chiavi")); - get_win()->WriteW(30,12,(const char*)TString(10).format("%5ld ",n1)); - break; - case 4: - get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la start con chiave %d ",k)); - get_win()->WriteW(30,12,(const char*)TString(15).format("%5ld (%ld)",n1,n2)); - break; - case 5: - get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la next per chiavi doppie ")); - get_win()->WriteW(30,12,(const char*)TString(15).format("%5ld (%ld)",n1,n2)); - break; - case 6: - get_win()->WriteW(30,9,(const char*)TString(42).format("Record %ld non trovato nelle chiavi duplicate ",n1)); - break; - } - get_win()->WriteW(30,14,(const char*)TString(5).format("%5d",err)); - KEY tasto=get_win()->run(); - return (tasto == K_ESC); -} - -TTestProc::TTestProc() -: _block(FALSE), _ntest(0), _nfile(0), _randseq(NULL), _rmc(FALSE), _workf(NULL), _sheet(NULL), _win(NULL) -{ - _win = new TTestWin; -} - -TTestProc::~TTestProc() -{ - if (_win != NULL) - delete _win; -} - -TTestWin::TTestWin() -:TIndwin(1L,"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",TRUE,FALSE,70) -{} - -void TTestWin::handler(WINDOW w, EVENT *e) -{ - switch (e->type) - { - case E_CHAR: - if (e->v.chr.ch == K_ENTER) - stop_run(K_ENTER); - break; - default: - break; - } - TIndwin::handler(w,e); -} - -TTestReport::TTestReport(const char* title) -{ - WINDOW parent=TASK_WIN; - long flags=WSF_CLOSE | WSF_SIZE | WSF_VSCROLL | WSF_HSCROLL; - WIN_TYPE wt=W_DOC; - create(6,2,68,20,title,flags,wt,parent); - set_color(COLOR_BLACK,COLOR_WHITE); -} - -void TTestReport::load_report() -{ - FILE *fp; - char line[256]; - - fp=fopen((const char *)TString(20).format("test%creport.txt",Separator),"r"); - while (fgets(line,256,fp)!=NULL) - { - TString element(line); - _report.add(element); - } - fclose(fp); - set_scroll_max(80,_report.items()); -} - -void TTestReport::update() -{ - for (int i=0; i<_report.items(); i++) - stringat(1,i+1,(const char*)get_row(i)); -} - -bool TTestReport::on_key(KEY key) -{ - switch (key) - { - case K_ESC: - stop_run(key); - break; - default: - break; - } - return TScroll_window::on_key(key); -} +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if XVT_OS!=XVT_OS_SCOUNIX +#include +#endif + +#include "ba1300.h" + +extern "C" { + void cgettime(char *); +} + +TTestSheet::TTestSheet(const char* titolo, const char* colonne,byte bottoni) +:TDir_sheet(titolo, colonne, bottoni) +{} + +TTestSheet::~TTestSheet() +{} + +void TTestSheet::page_build(long first, byte rows) + +{ + TToken_string l(128); + for (byte i = 0; i < rows; i++) + { + const int n = int(i+first+1); + dir()->get (n,_nolock,_nordir,_sysdirop); + l.cut(0); + l.add(""); + l.add(format("%3d", n)); // Numero progressivo del file + l.add(dir()->name()); + const TRecnotype eod = dir()->eod(); + l.add(format("%ld", eod)); + const TRecnotype eox = dir()->eox(); + l.add(format("%ld", eox)); + const word len = dir()->len(); + l.add(format("%u", len)); + l.add(dir()->des()); + l.add(format("%ld", dir()->flags())); + set_row(l, i); + } +} + +void TTestSheet::sr_status(bool save) +{ + for (int i=0; i>1; + cbits++; + } + scale=(unsigned int)0x8000; + for (i=1;i<=(long)cbits;i++) + { + scale=scale>>1; + scale |= 0x8000; + } + // Extracts "random" seed from time + time(&tloc); + parm=(unsigned int)(tloc & 0x0000FFFF); + srand(parm); + // Mix array... + for (i=0;i>1; + if (((long) rnd)>=eod) // Difficile che accada... + rnd=(unsigned int) eod-1; + com=_randseq[i]; + _randseq[i]=_randseq[(long)rnd]; + _randseq[(long)rnd]=com; + } +} + +int TTestProc::ctrl_keys() +{ + int err=1; + + for (int nk=1;nk<=_nkeys;nk++) + { + _workf->setkey(nk); + if ((err=_workf->first())==NOERR) + return NOERR; + } + return err; +} + +void TTestProc::do_test_1() +{ + bool FoundError; + long i,EOD; + int err; + time_t inix,finix; + + _nfile=0; + while ((_nfile++ <= get_isheet()->items()) && !_block) + { + EOD=get_isheet()->row(_nfile-1).get_long(3); + if (get_isheet()->checked(_nfile-1) && EOD > 0) + { + get_win()->WriteW(33,7,(const char*)TString(18).format("%-18s",get_isheet()->row(_nfile-1).get(2))); + get_win()->WriteW(33,12,"000:00:00"); + get_win()->WriteW(33,13,"000:00:00"); + if (_ntest == 1) + { + TSystemisamfile f(_nfile); + get_win()->WriteW(33,10,"COMPATTAMENTO "); + if ((f.packfile(FALSE)!=NOERR)||(f.packindex(FALSE) != NOERR)) + error_box("Errore in compattamento file %d",_nfile); + get_win()->WriteW(33,10,"COPIA DI SICUREZZA "); + filecopy(); + set_rmc(TRUE); + } // If it was test # 1 + _workf = new TTestFile(_nfile); + time(&inix); + if (_workf->open(_excllock) == NOERR) + { + TTrec r; + r.get(_nfile); + _nkeys=r.keys(); + FoundError=FALSE; + i=0; + EOD=_workf->eod(); + get_win()->WriteW(33,9,(const char*)TString(14).format(" 0/%-7ld",EOD)); + get_win()->WriteW(33,10,"TEST1 (cisreadrec-cisdelete)"); + _randseq = new long[EOD]; + do_random(EOD); + while (!FoundError && ireadat(number(i++)))==NOERR) + err=_workf->remove(); + if (err!=NOERR) + FoundError=TRUE; + if (get_win()->iscancelled()) + _block=TRUE; + if ((i%20)==0) + get_win()->WriteW(33,9,(const char*)TString(20).format("%7ld/%-7ld",i,EOD)); + time(&finix); + get_win()->WriteW(33,12,(const char*)TString(10).format("%s",fmttime(finix-inix))); + if (((finix-inix)%3)==0) + { + long com=((finix-inix)*EOD)/(i+1); + get_win()->WriteW(33,13,(const char*)TString(10).format("%s",fmttime(com))); + } + } + if (!_block && ((ctrl_keys()==NOERR) || FoundError)) + do_test_2(); + _workf->close(); + get_win()->WriteW(33,10,"RIPRISTINO ARCHIVI "); + filecopy(FALSE); //restore copies + if (_randseq!=NULL) + delete _randseq; + } // If it was open + if (_workf != NULL) + delete _workf; + } // If it was selected + } // While test is in progress +} + +void TTestProc::do_test_2() +{ + time_t alpha,omega; + long i=0,j; + int err=NOERR; + + get_win()->WriteW(33,10,"TEST2: RIPRISTINO ARCHIVI "); + _workf->close(); + filecopy(FALSE); + if (_workf->open(_excllock) == NOERR) + { + long EOD=_workf->eod(); + long optot=sumop(EOD); + long optr=1; + + get_win()->WriteW(33,10,"TEST2 (cisreadrec-cisdelete)"); + time(&alpha); + while (!_block && ireadat(number(i)); + err=_workf->remove(); + j=i+1; + get_win()->WriteW(33,10,"TEST2: CONTROLLO CHIAVI "); + get_win()->WriteW(33,9,(const char*)TString(20).format("%7ld/%-7ld",j,EOD)); + while (!_block && jiscancelled()) _block=TRUE; + time(&omega); + get_win()->WriteW(33,12,(const char*)TString(10).format("%s",fmttime(omega-alpha))); + if ((omega-alpha)%3==0) + get_win()->WriteW(33,13,(const char*)TString(10).format("%s",fmttime(((omega-alpha)*optot)/optr))); + err=_workf->readat(number(j)); + optr++; + int k=1; + while (k<=_nkeys && err==NOERR) + { + TTrec r; + r.get(_nfile); + TToken_string def(r.keydef(k-1)); + + _workf->setkey(k); + err=_workf->read(); + if (def.get_char(1)=='X') // if keys are duplicated + { + TString ksaved(_workf->curr().key(k)); + bool Fnd=FALSE; + + while (err==NOERR && !Fnd && ksaved==_workf->curr().key(k)) + if (_workf->recno()==number(j)) + Fnd=TRUE; + else + err=_workf->next(); + } + if (err!=NOERR || number(j)!=_workf->recno()) + { + get_win()->WriteW(33,10,"Trovati errori scrittura report"); + DumpReport(err,i,j,k); + if (err==NOERR) + err=999; //errore fittizio, tanto per farlo uscire + } + k++; + } + j++; + } + get_win()->WriteW(33,10,"TEST2 (cisreadrec-cisdelete) "); + i++; + } + } +} + +void TTestProc::DumpReport(int err, long i, long x, int key) +{ + static rnum=0; + char ora[10]; + TString RandomFile,ReportFile; + FILE * fp; + + get_win()->WriteW(33,15,(const char*)TString(35).format("File nr. %d Test nr. %ld",_nfile,_ntest)); + cgettime(ora); + if (!fexist("test")) // create directory +#if XVT_OS==XVT_OS_SCOUNIX + mkdir("test",0777); +#else + _mkdir("test"); +#endif + RandomFile.format("test%crnd%d.dat",Separator,rnum++); + if ((fp=fopen((const char*)RandomFile,"w"))!=NULL) + { + for (int j=0;j<_workf->eod();j++) + if (j==i) + fprintf(fp,"%9ld*\n",number(j)); + else + fprintf(fp,"%9ld \n",number(j)); + fclose(fp); + } + ReportFile.format("test%creport.txt",Separator); + if ((fp=fopen((const char*)ReportFile,"a"))!=NULL) + { + fprintf(fp,"REPORT sulla verifica della stabilita' dell'ISAM\n"); + fprintf(fp,"------\n"); + fprintf(fp,"\n"); + fprintf(fp,"Eseguito il : %s Alle : %s\n",(const char*)TDate(TODAY),ora); + fprintf(fp,"\n"); + fprintf(fp,"File nr. : %4d %s\n",_nfile,get_isheet()->row(_nfile-1).get(2)); + fprintf(fp,"File Random : %s\n",(const char*)RandomFile); + fprintf(fp,"Nr. Record cancellato: %5ld Nr. Record letto: %5ld\n",number(i),number(x)); + fprintf(fp,"Nr. Chiave elaborata: %3d\n",key); + if (err!=NOERR) + fprintf(fp,"Errore generato dal record letto: %d\n",err); + else + fprintf(fp,"Errore generato dal record letto: Numero di record non corretto.\n\n"); + fprintf(fp,"------\n\n\n"); + fclose(fp); + } +} + +void TTestProc::load_random(const TString& st) +{ + FILE *fp; + char c; + + _kriminal=0; + if ((fp=fopen((const char*)st,"r"))!=NULL) + { + TDir d; + d.get(_nfile,_nolock,_nordir,_sysdirop); + _randseq = new long[d.eod()]; + for (long i=0;id.eod()) + { + _block=TRUE; + break; + } + } + } +} + +void TTestProc::do_debug() +{ + TDir d; + + d.get(_nfile,_nolock,_nordir,_sysdirop); + get_win()->set_color(COLOR_BLACK,COLOR_WHITE); + get_win()->clear(COLOR_WHITE); + get_win()->set_caption("Ricerca dell'errore"); + get_win()->WriteW(8,5,(const char*)TString(25).format("File numero : %4d\t\t\t%s",_nfile,(const char*)d.name())); + get_win()->WriteW(8,7,"Record Cancellati :"); + get_win()->WriteW(8,9,"Operazione in corso : COPIA DI SICUREZZA"); + get_win()->WriteW(8,11,"Record cancellato :"); + get_win()->WriteW(8,12,"Record letto :"); + get_win()->WriteW(8,14,"Errore rilevato :"); + + filecopy(); // Backup copies. Must be placed here + // otherwise I get a "File already open error" + _workf = new TTestFile(_nfile); + if (_workf->open(_excllock) == NOERR) + { + TTrec r; + r.get(_nfile); + _nkeys=r.keys(); + long i=0,j; + int k,err=NOERR; + bool step=FALSE; + get_win()->WriteW(30,9,"Cancello fino al Kriminale..."); + while (!stopped() && i<_workf->eod() && err==NOERR) + { + if (number(i)==_kriminal) + step=TRUE; // Put here a Break Point to debug step by step + err=_workf->readat(number(i)); + if (err!=NOERR || step) + _block=show_mess(1,err,number(i),number(i),0); + err=_workf->remove(); + if (err!=NOERR || step) + _block=show_mess(2,err,number(i),number(i),0); + j=i+1; + get_win()->WriteW(30,9,"TEST 2: CONTROLLO CHIAVI "); + get_win()->WriteW(30,7,(const char*)TString(20).format("%5ld/%-5ld",j,_workf->eod())); + get_win()->WriteW(30,11,(const char*)TString(10).format("%5ld",number(i))); + while (!stopped() && j<_workf->eod() && err==NOERR) + { + if (get_win()->iscancelled()) + _block=TRUE; + err=_workf->readat(number(j)); + if (err!=NOERR || step) + _block=show_mess(3,err,number(j),number(j),0); + get_win()->WriteW(30,12,(const char*)TString(10).format("%5ld",number(j))); + k=1; + while (k<=_nkeys && err==NOERR && !stopped()) + { + TToken_string def(r.keydef(k-1)); + + _workf->setkey(k); + err=_workf->read(); + if (err!=NOERR || step) + _block=show_mess(4,err,number(j),_workf->recno(),k); + if (def.get_char(1)=='X') // if keys are duplicated + { + TString ksaved(_workf->curr().key(k)); + bool Fnd=FALSE; + + while (!stopped() && err==NOERR && !Fnd && ksaved==_workf->curr().key(k)) + if (_workf->recno()==number(j)) + Fnd=TRUE; + else + { + err=_workf->next(); + if (err!=NOERR || step) + _block=show_mess(5,err,number(j),_workf->recno(),k); + } + } // if keys are duplicated + if (err!=NOERR || number(j)!=_workf->recno()) + { + _block=show_mess(6,err,number(j),number(j),0); + err=999; // So it will exit + } + k++; + } + j++; + } + get_win()->WriteW(30,9,"Cisreadrec -- Cisdelete "); + i++; + } + _workf->close(); + } + get_win()->WriteW(30,9,"RIPRISTINO ARCHIVIO "); + filecopy(FALSE); // Restore copies + get_win()->WriteW(30,9,"CANCELLAZIONE COPIE "); + remove_copy(_nfile); // Delete backup copies + + // Free pointers + if (_workf!=NULL) + delete _workf; + if (_randseq != NULL) + delete _randseq; +} + +bool TTestProc::show_mess(int act, int err, long n1, long n2, int k) +{ + switch (act) + { + case 1: + get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la readrec per rec. # %ld",n1)); + get_win()->WriteW(30,11,(const char*)TString(40).spaces()); + break; + case 2: + get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la delete per rec. # %ld",n1)); + get_win()->WriteW(30,11,(const char*)TString(10).format("%5ld",n1)); + break; + case 3: + get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la readrec per contr. chiavi")); + get_win()->WriteW(30,12,(const char*)TString(10).format("%5ld ",n1)); + break; + case 4: + get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la start con chiave %d ",k)); + get_win()->WriteW(30,12,(const char*)TString(15).format("%5ld (%ld)",n1,n2)); + break; + case 5: + get_win()->WriteW(30,9,(const char*)TString(42).format("Eseguita la next per chiavi doppie ")); + get_win()->WriteW(30,12,(const char*)TString(15).format("%5ld (%ld)",n1,n2)); + break; + case 6: + get_win()->WriteW(30,9,(const char*)TString(42).format("Record %ld non trovato nelle chiavi duplicate ",n1)); + break; + } + get_win()->WriteW(30,14,(const char*)TString(5).format("%5d",err)); + KEY tasto=get_win()->run(); + return (tasto == K_ESC); +} + +TTestProc::TTestProc() +: _block(FALSE), _ntest(0), _nfile(0), _randseq(NULL), _rmc(FALSE), _workf(NULL), _sheet(NULL), _win(NULL) +{ + _win = new TTestWin; +} + +TTestProc::~TTestProc() +{ + if (_win != NULL) + delete _win; +} + +TTestWin::TTestWin() +:TIndwin(1L,"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",TRUE,FALSE,70) +{} + +void TTestWin::handler(WINDOW w, EVENT *e) +{ + switch (e->type) + { + case E_CHAR: + if (e->v.chr.ch == K_ENTER) + stop_run(K_ENTER); + break; + default: + break; + } + TIndwin::handler(w,e); +} + +TTestReport::TTestReport(const char* title) +{ + WINDOW parent=TASK_WIN; + long flags=WSF_CLOSE | WSF_SIZE | WSF_VSCROLL | WSF_HSCROLL; + WIN_TYPE wt=W_DOC; + create(6,2,68,20,title,flags,wt,parent); + set_color(COLOR_BLACK,COLOR_WHITE); +} + +void TTestReport::load_report() +{ + FILE *fp; + char line[256]; + + fp=fopen((const char *)TString(20).format("test%creport.txt",Separator),"r"); + while (fgets(line,256,fp)!=NULL) + { + TString element(line); + _report.add(element); + } + fclose(fp); + set_scroll_max(80,_report.items()); +} + +void TTestReport::update() +{ + for (int i=0; i<_report.items(); i++) + stringat(1,i+1,(const char*)get_row(i)); +} + +bool TTestReport::on_key(KEY key) +{ + switch (key) + { + case K_ESC: + stop_run(key); + break; + default: + break; + } + return TScroll_window::on_key(key); +}