2o merge dalla 9702
git-svn-id: svn://10.65.10.50/trunk@4758 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									65a45f7705
								
							
						
					
					
						commit
						2f0ccd9475
					
				@ -18,8 +18,6 @@ MENUBAR MENU_BAR(2)
 | 
			
		||||
 | 
			
		||||
MENU MENU_BAR(2)
 | 
			
		||||
	SUBMENU MENU_FILE    "~File"
 | 
			
		||||
	ITEM BAR_ITEM(1)     "~Test"
 | 
			
		||||
	ITEM BAR_ITEM(2)     "~Debug"
 | 
			
		||||
 | 
			
		||||
/* ba1 -3 */
 | 
			
		||||
MENUBAR MENU_BAR(3)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										264
									
								
								ba/ba1300.cpp
									
									
									
									
									
								
							
							
						
						
									
										264
									
								
								ba/ba1300.cpp
									
									
									
									
									
								
							@ -1,25 +1,17 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <applicat.h>
 | 
			
		||||
#include <execp.h>
 | 
			
		||||
#include <isam.h>
 | 
			
		||||
#include <mask.h>
 | 
			
		||||
#include <progind.h>
 | 
			
		||||
#include <prefix.h>
 | 
			
		||||
#include <sheet.h>
 | 
			
		||||
#include <urldefid.h>
 | 
			
		||||
#include <utility.h>
 | 
			
		||||
#include <validate.h>
 | 
			
		||||
 | 
			
		||||
#include "ba1.h"
 | 
			
		||||
#include "ba1300.h"
 | 
			
		||||
#include "ba1300a.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BA1300_application:public TApplication
 | 
			
		||||
class TPackFiles_application:public TApplication
 | 
			
		||||
{
 | 
			
		||||
  TTestSheet    * _testsheet;
 | 
			
		||||
  TTestProc     * _test,
 | 
			
		||||
  * _debug;
 | 
			
		||||
  TMask         * _mask;
 | 
			
		||||
  TArray_sheet   * _selsheet;
 | 
			
		||||
  long           _firm;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
@ -27,185 +19,155 @@ protected:
 | 
			
		||||
  virtual bool create () ;
 | 
			
		||||
  virtual bool destroy();
 | 
			
		||||
  virtual bool extended_firm() const { return TRUE; }
 | 
			
		||||
 | 
			
		||||
  void build_sheet();
 | 
			
		||||
public:
 | 
			
		||||
  BA1300_application() : _testsheet(NULL), _mask(NULL) {}
 | 
			
		||||
  TTestSheet * get_sheet() {return _testsheet;}
 | 
			
		||||
  TTestProc  * get_test()  {return _test;}
 | 
			
		||||
  TMask *      get_mask()  {return _mask;}
 | 
			
		||||
  TString_array& field_sheet(TMask *);
 | 
			
		||||
 | 
			
		||||
  TPackFiles_application() : _selsheet(NULL), _firm(0) {}
 | 
			
		||||
  ~TPackFiles_application() {};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
bool TPackFiles_application::create() // initvar e arrmask
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  TApplication::create();
 | 
			
		||||
 | 
			
		||||
  _firm = get_firm();
 | 
			
		||||
  
 | 
			
		||||
  if (argc() > 2)
 | 
			
		||||
  {
 | 
			
		||||
  if (!set_firm())
 | 
			
		||||
    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);
 | 
			
		||||
  }  
 | 
			
		||||
  const bool is_prassi = user() == "PRASSI";
 | 
			
		||||
  _selsheet  = new TArray_sheet(-1, -1, -4, -4, "Selezione files",
 | 
			
		||||
                             is_prassi ? 
 | 
			
		||||
                             "@1|N.@5|Nome@20|EOD@7|EOX@7|Lung.  |Descrizione@43|Flags@7" :
 | 
			
		||||
                             "N.@5|Nome@20|EOD@7|EOX@7|Lung.  |Descrizione@43|Flags@7",
 | 
			
		||||
                             is_prassi ? 0 : 0x10);
 | 
			
		||||
  dispatch_e_menu(BAR_ITEM(1));
 | 
			
		||||
  return TRUE ;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool BA1300_application::destroy() // releasev e arrmask
 | 
			
		||||
bool TPackFiles_application::destroy()
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  if (_firm) set_firm(_firm);
 | 
			
		||||
  if (_testsheet != NULL) delete  _testsheet;
 | 
			
		||||
  if (_mask != NULL) delete  _mask;
 | 
			
		||||
  if (_selsheet != NULL) delete  _selsheet;
 | 
			
		||||
  return TApplication::destroy() ;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TString_array& BA1300_application::field_sheet(TMask * m)
 | 
			
		||||
void TPackFiles_application::build_sheet()
 | 
			
		||||
{
 | 
			
		||||
  TEdit_field& f = m->efield(F_FILE);
 | 
			
		||||
  return f.sheet()->rows_array();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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; i<nitems;i++) // fill sheet
 | 
			
		||||
  _selsheet->destroy();
 | 
			
		||||
  TDir cdir;
 | 
			
		||||
  cdir.get(LF_DIR,_nolock,_nordir,_sysdirop);
 | 
			
		||||
  const bool is_prassi = user() == "PRASSI";
 | 
			
		||||
  const int nitems = (int)cdir.eod();
 | 
			
		||||
  for (int i = 0; i < nitems; i++) // fill sheet
 | 
			
		||||
  {
 | 
			
		||||
    TToken_string riga(128);
 | 
			
		||||
      riga.cut(0);
 | 
			
		||||
      cdir->get(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);
 | 
			
		||||
    cdir.get(i+1,_nolock,_nordir,_sysdirop);
 | 
			
		||||
    if (is_prassi)
 | 
			
		||||
      riga.add("");
 | 
			
		||||
    riga.add(i+1);
 | 
			
		||||
    riga.add(cdir.name());
 | 
			
		||||
    riga.add(cdir.eod());
 | 
			
		||||
    riga.add(cdir.eox());
 | 
			
		||||
    riga.add((int)cdir.len());
 | 
			
		||||
    riga.add(cdir.des());
 | 
			
		||||
    riga.add(cdir.flags());
 | 
			
		||||
    _selsheet->add(riga);
 | 
			
		||||
  }
 | 
			
		||||
    msk->set_handler(F_SEQUENZA,seq_handler);
 | 
			
		||||
    if (msk->run()==K_ENTER)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPackFiles_application::menu(MENU_TAG m)
 | 
			
		||||
{
 | 
			
		||||
  KEY tasto;
 | 
			
		||||
  
 | 
			
		||||
  do
 | 
			
		||||
  {
 | 
			
		||||
      _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())
 | 
			
		||||
    build_sheet();
 | 
			
		||||
    switch(tasto = _selsheet->run())
 | 
			
		||||
    {
 | 
			
		||||
      case K_ENTER:  
 | 
			
		||||
      if (get_sheet()->checked()>0 && (get_mask()->get_long(F_ITERAZIONI)>0 || get_mask()->get_bool(F_CONTINUO)))
 | 
			
		||||
        if (_selsheet->checked()>0)
 | 
			
		||||
        {
 | 
			
		||||
        _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()))
 | 
			
		||||
          int status;
 | 
			
		||||
          const long items = _selsheet->items();
 | 
			
		||||
          bool retry,present;
 | 
			
		||||
          TFilename f_name,d_name;
 | 
			
		||||
          TString cmd;
 | 
			
		||||
          TDir d;
 | 
			
		||||
          for (int i = 2; i<=items; i++) // Skip LF_DIR
 | 
			
		||||
          {
 | 
			
		||||
          if (get_mask()->get_bool(F_CONTINUO))
 | 
			
		||||
            get_test()->get_win()->WriteW(33,5,format("%4ld (CONTINUO)",numtest));
 | 
			
		||||
            if (!_selsheet->checked(i-1))
 | 
			
		||||
              continue;
 | 
			
		||||
            d.get(i);
 | 
			
		||||
            const long flags = d.flags();
 | 
			
		||||
            const int module = abs((int)flags);
 | 
			
		||||
            if (flags >= 10000L)
 | 
			
		||||
              continue;    // Skip files with flags over 10000
 | 
			
		||||
            TSystemisamfile f(i);
 | 
			
		||||
            
 | 
			
		||||
            f_name = d.name();
 | 
			
		||||
            f_name.ext("dbf");
 | 
			
		||||
            retry   = FALSE;
 | 
			
		||||
            present = access(f_name,0) == 0;
 | 
			
		||||
            do
 | 
			
		||||
            {
 | 
			
		||||
              status = NOERR;
 | 
			
		||||
              if (present) // Se il file c'e' prova a compattarlo
 | 
			
		||||
              {
 | 
			
		||||
                if (f.packfile() == NOERR)
 | 
			
		||||
                  f.packindex();
 | 
			
		||||
                status = f.status();
 | 
			
		||||
                if (status == -60) // Se ritorna -60 allora il file e' aperto da qualcuno
 | 
			
		||||
                  retry = yesno_box("Il file %s non puo' essere compattato perche' aperto da altre applicazioni. Riprovare?",(const char*) f_name);
 | 
			
		||||
              } 
 | 
			
		||||
            } while  (retry); // Ci riprovo !
 | 
			
		||||
            
 | 
			
		||||
            if (!present || status == -60)
 | 
			
		||||
            {
 | 
			
		||||
              if (!present && d.len() > 0 && has_module(module,CHK_DONGLE))// Se il file non esiste lo costruisce
 | 
			
		||||
                f.build(0L);
 | 
			
		||||
              
 | 
			
		||||
              continue; // Se il file non esiste e non si ha il modulo abilitato evita inutili controlli
 | 
			
		||||
            }           // Se le pack() hanno ritornato -60 ma il file esiste, allora prosegue con il prossimo
 | 
			
		||||
            if (status != NOERR && 
 | 
			
		||||
              yesno_box("Rilevato l'errore %d cercando di compattare il file %s."
 | 
			
		||||
                       " Si desidera scaricarlo e ricaricarlo?",status,(const char*)f_name))
 | 
			
		||||
            {
 | 
			
		||||
              // Dump the file, Zap it and Reload it.
 | 
			
		||||
              d_name = "";
 | 
			
		||||
              d_name.temp("fdump");
 | 
			
		||||
              if (f.dump(d_name,0) == NOERR) // Dump
 | 
			
		||||
              {
 | 
			
		||||
                // Zap
 | 
			
		||||
                d.get(i,_nolock, _nordir,_sysdirop);               
 | 
			
		||||
                bool is_com = d.is_com();
 | 
			
		||||
                d.get(i,_nolock, is_com ? _comdir : _nordir);
 | 
			
		||||
                d.eod() = 0L;
 | 
			
		||||
                d.put(i, is_com ? _comdir : _nordir);
 | 
			
		||||
                if (f.pack() == NOERR)
 | 
			
		||||
                  if (f.load(d_name) == NOERR) // Reload
 | 
			
		||||
                    unlink(f_name);
 | 
			
		||||
                  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();
 | 
			
		||||
                    error_box("Impossibile ricaricare %s. Errore %d",(const char*) d_name, f.status());
 | 
			
		||||
                else
 | 
			
		||||
                  error_box("Impossibile azzerare %s. Errore %d",(const char*) f_name, f.status());
 | 
			
		||||
              }
 | 
			
		||||
                else
 | 
			
		||||
                  error_box("Impossibile scaricare %s. Errore %d",(const char*) d_name, f.status());
 | 
			
		||||
            }
 | 
			
		||||
        if (get_test()->rm_copy())
 | 
			
		||||
        { 
 | 
			
		||||
          get_test()->get_win()->WriteW(33,10,"CANCELLAZIONE COPIE         ");
 | 
			
		||||
          for  (int i=0;i<get_sheet()->items();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; i<get_sheet()->items();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));
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ba1300(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
  BA1300_application a;
 | 
			
		||||
  a.run(argc,argv,"Test dell'ISAM");
 | 
			
		||||
  TPackFiles_application a;
 | 
			
		||||
  a.run(argc,argv,"Compatta files");
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										105
									
								
								ba/ba1300.h
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								ba/ba1300.h
									
									
									
									
									
								
							@ -1,105 +0,0 @@
 | 
			
		||||
#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 get_row(long n, TToken_string& r);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  void sr_status(bool save=TRUE);
 | 
			
		||||
 | 
			
		||||
  TTestSheet(const char* titolo,  byte bottoni = 0x0);
 | 
			
		||||
  virtual ~TTestSheet() ;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										18
									
								
								ba/ba1300a.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								ba/ba1300a.h
									
									
									
									
									
								
							@ -1,18 +0,0 @@
 | 
			
		||||
#ifndef __BA1300A_H
 | 
			
		||||
#define __BA1300A_H  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define F_CONTINUO              101
 | 
			
		||||
#define F_ITERAZIONI    102
 | 
			
		||||
#define F_LABEL                         103
 | 
			
		||||
#define DLG_FILES                       104
 | 
			
		||||
#define DLG_REPORT              105
 | 
			
		||||
#define DLG_TEST                        106
 | 
			
		||||
 | 
			
		||||
#define DLG_RESET                       201  // Reset button for sheet mask
 | 
			
		||||
 | 
			
		||||
#define F_FILE        101
 | 
			
		||||
#define F_NOMEFILE    102
 | 
			
		||||
#define F_SEQUENZA    103
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@ -1,54 +0,0 @@
 | 
			
		||||
#include <defmask.h>
 | 
			
		||||
#include <tokens.h>
 | 
			
		||||
#include "ba1300a.h"
 | 
			
		||||
 | 
			
		||||
PAGE "Selezione principale" -1 -1 44 9
 | 
			
		||||
 | 
			
		||||
GROUPBOX DLG_NULL 20 5
 | 
			
		||||
BEGIN
 | 
			
		||||
 PROMPT 1 1 "Opzioni"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BOOLEAN F_CONTINUO
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 2 2 "   Continuo"
 | 
			
		||||
        MESSAGE TRUE DISABLE,F_ITERAZIONI|RESET,F_ITERAZIONI
 | 
			
		||||
        MESSAGE FALSE ENABLE,F_ITERAZIONI
 | 
			
		||||
        HELP "Tipo di test da svolgere"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
NUMBER F_ITERAZIONI 3
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 2 4 ""
 | 
			
		||||
        HELP "Numero di iterazioni del test"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
TEXT F_LABEL
 | 
			
		||||
BEGIN
 | 
			
		||||
        PROMPT 9 4 "Iterazioni"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_FILES 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 29 1 "~Files"
 | 
			
		||||
  MESSAGE EXIT,K_F4
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_REPORT 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 29 3 "~Report"
 | 
			
		||||
  MESSAGE EXIT,K_F5
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_TEST 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 29 5 "~Test"
 | 
			
		||||
  MESSAGE EXIT,K_ENTER
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_CANCEL 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 29 7 ""
 | 
			
		||||
END
 | 
			
		||||
ENDMASK
 | 
			
		||||
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
#include <defmask.h>
 | 
			
		||||
#include <tokens.h>
 | 
			
		||||
#include "ba1300a.h"
 | 
			
		||||
 | 
			
		||||
PAGE "Debugging" -1 -1 42 8
 | 
			
		||||
 | 
			
		||||
NUMBER F_FILE 3
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 2 1 "Numero file  "
 | 
			
		||||
        SHEET "N.@5|Nome@20|EOD@7|EOX@7|Lung.  |Descrizione@43"
 | 
			
		||||
        INPUT F_FILE
 | 
			
		||||
        OUTPUT F_FILE
 | 
			
		||||
        HELP "Numero del file da esaminare"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING F_SEQUENZA 20
 | 
			
		||||
BEGIN
 | 
			
		||||
        PROMPT 2 3 "File Random  "
 | 
			
		||||
  HELP "Nome del file della sequenza"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_OK 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
        PROMPT -12 6 ""
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_CANCEL 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
        PROMPT -22 6 ""
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
ENDMASK
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										601
									
								
								ba/ba1301.cpp
									
									
									
									
									
								
							
							
						
						
									
										601
									
								
								ba/ba1301.cpp
									
									
									
									
									
								
							@ -1,601 +0,0 @@
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <applicat.h>
 | 
			
		||||
#include <files.h>
 | 
			
		||||
#include <utility.h>
 | 
			
		||||
#include <expr.h>
 | 
			
		||||
#include <isam.h>
 | 
			
		||||
#include <mask.h>
 | 
			
		||||
#include <sheet.h>
 | 
			
		||||
#include <msksheet.h>
 | 
			
		||||
#include <urldefid.h>
 | 
			
		||||
#include <validate.h>
 | 
			
		||||
#include <utility.h>
 | 
			
		||||
#include <progind.h>
 | 
			
		||||
 | 
			
		||||
#if XVT_OS!=XVT_OS_SCOUNIX
 | 
			
		||||
#include <direct.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ba1300.h"
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
  void cgettime(char *);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TTestSheet::TTestSheet(const char* titolo, byte bottoni)
 | 
			
		||||
:TDir_sheet(titolo, bottoni, "@1|N.@5|Nome@20|EOD@7|EOX@7|Lung.  |Descrizione@43|Flags@7") 
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
TTestSheet::~TTestSheet()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void TTestSheet::get_row(long n, TToken_string& l)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  dir()->get((int)n,_nolock,_nordir,_sysdirop);
 | 
			
		||||
  l.cut(0);
 | 
			
		||||
  l.add("");
 | 
			
		||||
  l.add(n); // Numero progressivo del file
 | 
			
		||||
  l.add(dir()->name());
 | 
			
		||||
  const TRecnotype eod = dir()->eod();
 | 
			
		||||
  l.add(eod);
 | 
			
		||||
  const TRecnotype eox = dir()->eox();
 | 
			
		||||
  l.add(eox);
 | 
			
		||||
  const word len = dir()->len();
 | 
			
		||||
  l.add(format("%u", len));
 | 
			
		||||
  l.add(dir()->des());
 | 
			
		||||
  l.add(format("%ld", dir()->flags()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TTestSheet::sr_status(bool save)
 | 
			
		||||
{
 | 
			
		||||
  for (int i=0; i<items();i++)
 | 
			
		||||
    if (save)
 | 
			
		||||
      _oldstatus.set(i,checked(i));
 | 
			
		||||
    else
 | 
			
		||||
      check(i,_oldstatus[i]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char* TTestProc::fmttime(const long tm)
 | 
			
		||||
{
 | 
			
		||||
  TString st;
 | 
			
		||||
  int sec=(int) tm%60;
 | 
			
		||||
  int min=(int) tm/60;
 | 
			
		||||
  int hour=min/60;
 | 
			
		||||
  min%=60;
 | 
			
		||||
  st.format("%03d:%02d:%02d",hour,min,sec);
 | 
			
		||||
  return (const char*) st;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char * TTestProc::get_base() 
 | 
			
		||||
{
 | 
			
		||||
  TTestFile fn(1);
 | 
			
		||||
  fn.open();
 | 
			
		||||
  const char * name =(const char *) fn.file_name();
 | 
			
		||||
  fn.close();
 | 
			
		||||
  char *com;
 | 
			
		||||
  com=strrchr(name,Separator);
 | 
			
		||||
  if (com!=NULL)
 | 
			
		||||
    *(++com)='\0';
 | 
			
		||||
  return name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TTestProc::filecopy(bool save)
 | 
			
		||||
{
 | 
			
		||||
  TString St0,St1,St2;
 | 
			
		||||
  TTestFile fn(_nfile);
 | 
			
		||||
 | 
			
		||||
  fn.open();
 | 
			
		||||
  St0=fn.file_name();
 | 
			
		||||
  fn.close();
 | 
			
		||||
  St1=St0;
 | 
			
		||||
  St0.rtrim(4);  // cut extension
 | 
			
		||||
  St2=St0 << ".sta";
 | 
			
		||||
  /// Save/Restore data files
 | 
			
		||||
    if (save)
 | 
			
		||||
      fcopy((const char*)St1,(const char*)St2);
 | 
			
		||||
    else
 | 
			
		||||
      fcopy((const char*)St2,(const char*)St1);
 | 
			
		||||
  St0.rtrim(4);
 | 
			
		||||
  St1=St0 << ".ndx";
 | 
			
		||||
  St0.rtrim(4);
 | 
			
		||||
  St2=St0 << ".sdx";
 | 
			
		||||
  if (save)
 | 
			
		||||
    fcopy((const char*)St1,(const char*)St2);
 | 
			
		||||
  else
 | 
			
		||||
    fcopy((const char*)St2,(const char*)St1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TTestProc::remove_copy(int n)
 | 
			
		||||
{
 | 
			
		||||
  TString base(get_base());                 
 | 
			
		||||
  TDir d;
 | 
			
		||||
  d.get(n,_nolock,_nordir,_sysdirop);
 | 
			
		||||
  TString nome(d.name());
 | 
			
		||||
  TString fpath;
 | 
			
		||||
 | 
			
		||||
  nome.ltrim(1);
 | 
			
		||||
  nome.rtrim(4);
 | 
			
		||||
  fpath << base << nome << ".sta";
 | 
			
		||||
  remove((const char*)fpath);
 | 
			
		||||
  fpath.rtrim(4);
 | 
			
		||||
  fpath << ".sdx";
 | 
			
		||||
  remove((const char*)fpath);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void  TTestProc::do_random(long eod)
 | 
			
		||||
{
 | 
			
		||||
  long i,j,com;
 | 
			
		||||
  unsigned int cbits,scale,parm,rnd;
 | 
			
		||||
  time_t  tloc;
 | 
			
		||||
 | 
			
		||||
  // Initialize array to mix
 | 
			
		||||
  for (i=1; i<=eod;i++)
 | 
			
		||||
    _randseq[i-1]=i;
 | 
			
		||||
  // Compute scale
 | 
			
		||||
  i=eod;
 | 
			
		||||
  cbits=0;
 | 
			
		||||
  while (i)
 | 
			
		||||
  {
 | 
			
		||||
    i=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<eod;i++)
 | 
			
		||||
  {
 | 
			
		||||
    rnd=rand();
 | 
			
		||||
    rnd&=scale;
 | 
			
		||||
    for (j=1;j<=(long)(16-cbits);j++)
 | 
			
		||||
      rnd=rnd>>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 && i<EOD && !_block)
 | 
			
		||||
        {
 | 
			
		||||
          if ((err=_workf->readat(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 && i<EOD && err==NOERR)
 | 
			
		||||
    {
 | 
			
		||||
      _workf->readat(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 && j<EOD && err==NOERR)
 | 
			
		||||
      {
 | 
			
		||||
        if (get_win()->iscancelled()) _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[12] = "08-08-1883";
 | 
			
		||||
  TString RandomFile,ReportFile;
 | 
			
		||||
  FILE * fp;
 | 
			
		||||
 | 
			
		||||
  get_win()->WriteW(33,15,(const char*)TString(35).format("File nr. %d   Test nr. %ld",_nfile,_ntest));
 | 
			
		||||
  
 | 
			
		||||
  if (!fexist("test"))   // create directory
 | 
			
		||||
#if XVT_OS==XVT_OS_SCOUNIX 
 | 
			
		||||
    mkdir("test",0777);
 | 
			
		||||
#else
 | 
			
		||||
#ifdef __WATCOMC__
 | 
			
		||||
  mkdir("test");
 | 
			
		||||
#else
 | 
			
		||||
  _mkdir("test");
 | 
			
		||||
#endif
 | 
			
		||||
#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;i<d.eod() && !feof(fp);i++)
 | 
			
		||||
    {
 | 
			
		||||
      fscanf(fp,"%9ld%c",&_randseq[i],&c);
 | 
			
		||||
      if (c=='*')
 | 
			
		||||
        _kriminal=_randseq[i];
 | 
			
		||||
      if (_randseq[i]>d.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);
 | 
			
		||||
}
 | 
			
		||||
@ -35,6 +35,6 @@ int main(int argc, char** argv)
 | 
			
		||||
  default:
 | 
			
		||||
    error_box(usage, argv[0]) ; break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  exit(0);
 | 
			
		||||
  return rt ;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1830,10 +1830,13 @@ bool BA3800_application::user_destroy()
 | 
			
		||||
 | 
			
		||||
int ba3800 (int argc, char* argv[])
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if (argc > 3)
 | 
			
		||||
  {
 | 
			
		||||
    BA3800_application a(*argv[2]);
 | 
			
		||||
 | 
			
		||||
    a.run(argc, argv, "Stampa Tabella IV Direttiva CEE");
 | 
			
		||||
  }
 | 
			
		||||
    else
 | 
			
		||||
      error_box("Usage: BA3 -7 {D|S}");
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -83,6 +83,7 @@ public:
 | 
			
		||||
  virtual TRelation* get_relation() const { return _rel;}
 | 
			
		||||
  virtual int rewrite(const TMask& m);
 | 
			
		||||
  virtual int write(const TMask& m);
 | 
			
		||||
  virtual bool remove();
 | 
			
		||||
  virtual ~TDitte_application() {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -333,6 +334,19 @@ int TDitte_application::rewrite(const TMask& m)
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TDitte_application::remove()
 | 
			
		||||
{
 | 
			
		||||
  // Removes all activities
 | 
			
		||||
  const long firm = _msk->get_long(FLD_GD1_CODDITTA);
 | 
			
		||||
  _attiv->zero();
 | 
			
		||||
  TRecfield att_firm(_attiv->curr(),"CODDITTA");
 | 
			
		||||
  att_firm = firm;
 | 
			
		||||
  for (_attiv->read(_isgteq);_attiv->good() && firm == (long)att_firm; _attiv->next())
 | 
			
		||||
    _attiv->remove();
 | 
			
		||||
  // Removes firm  
 | 
			
		||||
  return TRelation_application::remove();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TDitte_application::init_query_mode(TMask& m)
 | 
			
		||||
{
 | 
			
		||||
  if (filtered())
 | 
			
		||||
 | 
			
		||||
@ -150,6 +150,7 @@
 | 
			
		||||
14|Ripristino indici libro unico|cg5 -4 inl
 | 
			
		||||
15|Manutenzione|4
 | 
			
		||||
15|Archivi|ba1
 | 
			
		||||
15|Compatta tutti i files|ba1 -2
 | 
			
		||||
15|Utenti|ba1 -3
 | 
			
		||||
15|Attivazione|ba1 -4
 | 
			
		||||
15|Backup|ba2 -1
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user