Files correlati : ba0.exe ba1.exe Ricompilazione Demo : [ ] Commento : ba0.exe Vietato aggiungere ai preveriti voci di primo livello del menu ba1.exe Consente anche di aggiornare e non solo inserire da file .txt git-svn-id: svn://10.65.10.50/branches/R_10_00@21513 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1207 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1207 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <extcdecl.h>
 | 
						|
 | 
						|
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <colors.h>
 | 
						|
#include <filetext.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <sheet.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include "ba1800.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Utilities
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
HIDDEN int get_isamfiles()
 | 
						|
{
 | 
						|
  FileDes dir;
 | 
						|
  CGetFile(LF_DIR, &dir, _nolock, NORDIR);
 | 
						|
  return (int)dir.EOD;
 | 
						|
}
 | 
						|
 | 
						|
HIDDEN int str2isamfile(const TString& str)
 | 
						|
{
 | 
						|
  int logic_num = 0;
 | 
						|
  if (!str.blank())
 | 
						|
  {                                          
 | 
						|
    const int logic = atoi(str);
 | 
						|
    if (logic > 0)
 | 
						|
    {              
 | 
						|
      if (logic > LF_DIR && logic < LF_EXTERNAL)
 | 
						|
      {
 | 
						|
        if (logic < get_isamfiles())
 | 
						|
        {
 | 
						|
          TBaseisamfile file(logic);
 | 
						|
          if (file.is_valid(FALSE) == NOERR)
 | 
						|
            logic_num = logic;
 | 
						|
        }  
 | 
						|
      }
 | 
						|
    }  
 | 
						|
    else
 | 
						|
    {
 | 
						|
      const int len = str.len();
 | 
						|
      if (len == 3 || (str[0] == '%' && len == 4))
 | 
						|
      {
 | 
						|
        const int first = len == 3 ? 0 : 1;
 | 
						|
        if (isalpha(str[first]) && isalnum(str[first+1]) && isalnum(str[first+2]))
 | 
						|
          logic_num = str[0] == '%' ? LF_TABCOM : LF_TAB;
 | 
						|
      }
 | 
						|
    }  
 | 
						|
  }
 | 
						|
  return logic_num;
 | 
						|
}
 | 
						|
 | 
						|
HIDDEN int choose_isamfile(int selected)
 | 
						|
{
 | 
						|
  TArray_sheet sht(-1,-1,-4,-4,TR("Selezione archivio"), HR("Codice|Descrizione archivio@70"));
 | 
						|
  TToken_string tt(80);
 | 
						|
  
 | 
						|
  long sel = 0;
 | 
						|
  
 | 
						|
  const int nfiles = get_isamfiles();
 | 
						|
  for (int logic = LF_TABCOM; logic < nfiles; logic++)
 | 
						|
  {     
 | 
						|
    if (logic == selected)
 | 
						|
      sel = sht.items();
 | 
						|
    const TFixed_string desc = prefix().description(logic);
 | 
						|
    if (desc.full() && desc.compare("File non presente", -1, true) != 0)
 | 
						|
    {
 | 
						|
      tt.format("%d", logic);
 | 
						|
      tt.add(desc);
 | 
						|
      sht.add(tt);
 | 
						|
    }  
 | 
						|
  }
 | 
						|
  
 | 
						|
  sht.select(sel);
 | 
						|
  if (sht.run() == K_ENTER)
 | 
						|
  {
 | 
						|
    sel = sht.selected();
 | 
						|
    selected = sht.row(sel).get_int(0);
 | 
						|
  }
 | 
						|
  else
 | 
						|
    selected = 0;  
 | 
						|
  return selected;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TColumnizer_win & TColumnizer_field
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TColumnizer_field;
 | 
						|
 | 
						|
class TColumnizer_win : public TField_window
 | 
						|
{ 
 | 
						|
  enum { RULER_HEIGHT = 2, NUM_WIDTH = 5 };
 | 
						|
 | 
						|
  TString_array _rows;        // Righe di testo da stampare
 | 
						|
  TPointer_array _column;     // Array delle posizioni di inizio campo
 | 
						|
  bool _clickable;            // E' possibile cliccare
 | 
						|
 | 
						|
protected: // TScroll_window
 | 
						|
  virtual long handler(WINDOW win, EVENT* ep);
 | 
						|
  virtual void update();
 | 
						|
 | 
						|
protected: // Internal use
 | 
						|
  int on_column(long col);                                            
 | 
						|
 | 
						|
public:
 | 
						|
  void recalc_layout(int dx, int dy);
 | 
						|
 | 
						|
  bool clickable() const { return _clickable; }
 | 
						|
  void set_clickable(bool on = TRUE) { _clickable = on; }
 | 
						|
  
 | 
						|
  void destroy_rows() { _rows.destroy(); }
 | 
						|
  void add_row(const char* row) { _rows.add(row); }
 | 
						|
  
 | 
						|
  void destroy_columns() { _column.destroy(); }
 | 
						|
  long add_column(long col) { return _column.add_long(col); }
 | 
						|
  long get_column(int index) const { return _column.get_long(index); }
 | 
						|
 | 
						|
  TColumnizer_win(int x, int y, int dx, int dy, WINDOW parent, TColumnizer_field* field);
 | 
						|
  virtual ~TColumnizer_win() { }
 | 
						|
};
 | 
						|
 | 
						|
class TColumnizer_field : public TWindowed_field
 | 
						|
{   
 | 
						|
protected: // TWindowed_field
 | 
						|
  virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent)
 | 
						|
  { return new TColumnizer_win(x, y, dx, dy, parent, this); }
 | 
						|
 | 
						|
protected: // Internal use
 | 
						|
  TColumnizer_win& col_win() const 
 | 
						|
  { return (TColumnizer_win&)win(); }
 | 
						|
  
 | 
						|
public:
 | 
						|
  void destroy_rows() { col_win().destroy_rows(); }
 | 
						|
  void add_row(const char* row) { col_win().add_row(row); }
 | 
						|
  void recalc_layout(int dx, int dy) const { col_win().recalc_layout(dx, dy); }
 | 
						|
  int visible_rows() const { return col_win().rows() - 1; }
 | 
						|
  
 | 
						|
  void destroy_columns() { col_win().destroy_columns(); }
 | 
						|
  void add_column(long col) { col_win().add_column(col); }
 | 
						|
  long get_column(int index) const { return col_win().get_column(index); }
 | 
						|
 | 
						|
  TColumnizer_field(TMask* m) : TWindowed_field(m) { }
 | 
						|
  virtual ~TColumnizer_field() { }
 | 
						|
};
 | 
						|
 | 
						|
int TColumnizer_win::on_column(long col)
 | 
						|
{  
 | 
						|
  int index = -1;            
 | 
						|
  if (col > 0)
 | 
						|
  {              
 | 
						|
    int action = 1;  // 1 = Add, 2 = Remove
 | 
						|
    int i;
 | 
						|
    for (i = _column.items()-1; i >= 0; i--)
 | 
						|
    {
 | 
						|
      const long cur_col = _column.get_long(i);
 | 
						|
      if (cur_col == col)
 | 
						|
      {
 | 
						|
        action = 2;
 | 
						|
        break;
 | 
						|
      }  
 | 
						|
      if (cur_col < col)
 | 
						|
      {
 | 
						|
        action = 1;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    
 | 
						|
    TSheet_field& sf = owner().mask().sfield(F_FIELDS);
 | 
						|
    switch(action)
 | 
						|
    {
 | 
						|
    case 1:
 | 
						|
      index = _column.insert_long(col, i+1);
 | 
						|
      break;
 | 
						|
    case 2:
 | 
						|
      _column.destroy(i, TRUE);
 | 
						|
      index = i;
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
    }  
 | 
						|
  }    
 | 
						|
  return index;
 | 
						|
}
 | 
						|
 | 
						|
void TColumnizer_win::update()
 | 
						|
{
 | 
						|
  const int x = int(origin().x);  
 | 
						|
  const int maxx = x + columns() + 1;
 | 
						|
  const int y = int(origin().y);  
 | 
						|
  const int maxy = y + rows() + 1;
 | 
						|
  int i;
 | 
						|
  TString80 str; 
 | 
						|
 | 
						|
  TField_window::update();
 | 
						|
 | 
						|
  set_color(NORMAL_COLOR, NORMAL_BACK_COLOR);
 | 
						|
  for (i = y; i < maxy-RULER_HEIGHT; i++)
 | 
						|
  {
 | 
						|
    TToken_string* row = (TToken_string*)_rows.objptr(i);
 | 
						|
    if (row)
 | 
						|
      stringat(NUM_WIDTH, i+RULER_HEIGHT, _rows.row(i));
 | 
						|
    else
 | 
						|
      break;  
 | 
						|
  }  
 | 
						|
  
 | 
						|
  set_brush(DISABLED_BACK_COLOR);
 | 
						|
 | 
						|
  bar(x, y, maxx, y+RULER_HEIGHT);
 | 
						|
  TString points(maxx); 
 | 
						|
  points.fill('.');
 | 
						|
  for (int n = x+1; n < maxx; n++) 
 | 
						|
  {
 | 
						|
    if ((n % 5) == 0)
 | 
						|
    {
 | 
						|
      if ((n & 0x1) == 0)
 | 
						|
      {
 | 
						|
        str.format("%d", n);
 | 
						|
        points.overwrite(str, n - str.len());
 | 
						|
      }
 | 
						|
      else
 | 
						|
        points.overwrite(":", n-1);
 | 
						|
    }
 | 
						|
  }  
 | 
						|
  stringat(NUM_WIDTH, y, points);
 | 
						|
  
 | 
						|
  bar(x, y, x+NUM_WIDTH, maxy);
 | 
						|
  for (i = y; i < maxy; i++)
 | 
						|
  {         
 | 
						|
    str.format("%*d", NUM_WIDTH, i+1);
 | 
						|
    stringat(x, i+RULER_HEIGHT, str);
 | 
						|
  }  
 | 
						|
 | 
						|
  set_pen(COLOR_BLACK);
 | 
						|
  
 | 
						|
  int last_column = 0;
 | 
						|
  for (i = 0; i < _column.items(); i++)
 | 
						|
  {
 | 
						|
    const int j = (int)_column.get_long(i);
 | 
						|
    if (j > x)  
 | 
						|
    {
 | 
						|
      _pixmap = TRUE;                
 | 
						|
      line((j+NUM_WIDTH)*CHARX, (y+1)*CHARY, (j+NUM_WIDTH)*CHARX, maxy*CHARY);
 | 
						|
      _pixmap = FALSE;
 | 
						|
    }               
 | 
						|
    
 | 
						|
    const int available = j-last_column;
 | 
						|
    str.format("%d(%d)", i+1, available);
 | 
						|
    int len = str.len();
 | 
						|
    if (len > available)
 | 
						|
    {
 | 
						|
      len = str.find('(');
 | 
						|
      str.cut(len);
 | 
						|
    }
 | 
						|
    if (len <= available)
 | 
						|
    {                   
 | 
						|
      int cx = (j+last_column-len) / 2;
 | 
						|
      if (cx >= x)
 | 
						|
        stringat(cx+NUM_WIDTH, y+1, str);
 | 
						|
    }      
 | 
						|
 | 
						|
    last_column = j;
 | 
						|
  }
 | 
						|
  
 | 
						|
  _pixmap = TRUE;                
 | 
						|
  line((x+NUM_WIDTH)*CHARX, (y+1)*CHARY, maxx*CHARX, (y+1)*CHARY);
 | 
						|
  line(x*CHARX, (y+RULER_HEIGHT)*CHARY, maxx*CHARX, (y+RULER_HEIGHT)*CHARY);
 | 
						|
  line((x+NUM_WIDTH)*CHARX, y*CHARY, (x+NUM_WIDTH)*CHARX, maxy*CHARY);
 | 
						|
  _pixmap = FALSE;
 | 
						|
}
 | 
						|
 | 
						|
long TColumnizer_win::handler(WINDOW win, EVENT* ep)
 | 
						|
{             
 | 
						|
  switch(ep->type)  
 | 
						|
  {
 | 
						|
  case E_MOUSE_DOWN:
 | 
						|
    if (_clickable)
 | 
						|
    {
 | 
						|
      long column = (ep->v.mouse.where.h + CHARX/2) / CHARX;
 | 
						|
      column += origin().x - NUM_WIDTH;
 | 
						|
      if (on_column(column) >= 0)
 | 
						|
        force_update();
 | 
						|
    }  
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return TField_window::handler(win, ep);
 | 
						|
}
 | 
						|
 | 
						|
void TColumnizer_win::recalc_layout(int dx, int dy)
 | 
						|
{            
 | 
						|
  long maxy = _rows.items() - rows()/2 + 1;
 | 
						|
  long maxx = dx;
 | 
						|
  if (maxx <= 0)
 | 
						|
    maxx = _column.get_long(_column.items()-1) + 384;
 | 
						|
  maxx -= columns()/2 + NUM_WIDTH;
 | 
						|
  if (maxx < 0) maxx = 0;
 | 
						|
  if (maxy < 0) maxy = 0;
 | 
						|
  set_scroll_max(maxx, maxy);
 | 
						|
  update_thumb(0, 0);
 | 
						|
  force_update();
 | 
						|
}
 | 
						|
 | 
						|
TColumnizer_win::TColumnizer_win(int x, int y, int dx, int dy, 
 | 
						|
                                 WINDOW parent, TColumnizer_field* field) 
 | 
						|
               : TField_window(x, y, dx, dy, parent, field), 
 | 
						|
                 _clickable(field->enabled())
 | 
						|
{ 
 | 
						|
  set_scroll_max(columns(), rows());
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TWizard_mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TWizard_mask : public TAutomask
 | 
						|
{        
 | 
						|
  TRelation* _rel;
 | 
						|
  TRelation_description* _reldesc;
 | 
						|
 | 
						|
  bool _frozen;
 | 
						|
 | 
						|
protected:  // TMask
 | 
						|
  virtual TMask_field* parse_field(TScanner& scanner);
 | 
						|
 | 
						|
protected: // TAutomask
 | 
						|
  virtual bool on_field_event(TOperable_field& f, TField_event e, long jolly);
 | 
						|
 | 
						|
protected: // Internal use only
 | 
						|
  bool file_open(TFilename& name) const;
 | 
						|
  void load_ini(const TString& ininame);
 | 
						|
  void save_ini(const TFilename& ininame) const;
 | 
						|
  bool load_aga(const TFilename& name);
 | 
						|
  void file_preview() const;
 | 
						|
  bool is_aga_file(const TFilename& name) const;
 | 
						|
  bool import_file();
 | 
						|
 | 
						|
  TRelation_description* rel_desc(int logicnum);
 | 
						|
 
 | 
						|
  // First non-static handlers in history!
 | 
						|
  bool file_handler(TOperable_field& f, TField_event e);
 | 
						|
  bool ini_handler(TOperable_field& f, TField_event e);
 | 
						|
  bool isamfile_handler(TOperable_field& f, TField_event e);
 | 
						|
 | 
						|
public:  
 | 
						|
  TRelation_description* rel_desc();
 | 
						|
 | 
						|
  TWizard_mask();
 | 
						|
  virtual ~TWizard_mask();
 | 
						|
};
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TFields_mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TFields_mask : public TAutomask
 | 
						|
{ 
 | 
						|
  
 | 
						|
protected: // Internal use 
 | 
						|
  bool field_handler(TOperable_field& of, TField_event fe);
 | 
						|
 
 | 
						|
public:
 | 
						|
  virtual bool on_field_event(TOperable_field& of, TField_event fe, long jolly);
 | 
						|
  TRelation_description* rel_desc() const;
 | 
						|
  
 | 
						|
  TFields_mask(const char* name, int number);
 | 
						|
  virtual ~TFields_mask();
 | 
						|
};
 | 
						|
 | 
						|
bool TFields_mask::on_field_event(TOperable_field& of, TField_event fe, long jolly)
 | 
						|
{  
 | 
						|
  bool ok = TRUE;
 | 
						|
  switch(of.dlg())
 | 
						|
  {       
 | 
						|
  case F_FIELD:
 | 
						|
    ok = field_handler(of, fe);
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
TRelation_description* TFields_mask::rel_desc() const
 | 
						|
{
 | 
						|
  TSheet_field* sf = get_sheet();
 | 
						|
  TWizard_mask& wm = (TWizard_mask&)sf->mask();
 | 
						|
  TRelation_description* rd = wm.rel_desc();
 | 
						|
  return rd;
 | 
						|
}
 | 
						|
 | 
						|
bool TFields_mask::field_handler(TOperable_field& of, TField_event fe)
 | 
						|
{           
 | 
						|
  bool ok = TRUE;
 | 
						|
 | 
						|
  if (fe == fe_button)
 | 
						|
  {                             
 | 
						|
    TRelation_description* rd = rel_desc();
 | 
						|
    if (rd)
 | 
						|
    {
 | 
						|
      if (rd->choose_field(of.get()))
 | 
						|
      {
 | 
						|
        of.set(rd->field_name());
 | 
						|
        fe = fe_modify;
 | 
						|
      }  
 | 
						|
    }  
 | 
						|
    else
 | 
						|
      ok = error_box(TR("Selezionare un file valido"));
 | 
						|
  }
 | 
						|
 | 
						|
  if (fe == fe_modify || fe_close)
 | 
						|
  {                               
 | 
						|
    const TString& n = of.get();
 | 
						|
    if (n.not_empty())
 | 
						|
    {
 | 
						|
      TRelation_description* rd = rel_desc();
 | 
						|
      if (rd)
 | 
						|
      {
 | 
						|
        const char* d = rd->get_field_description(n);
 | 
						|
        if (d && *d)
 | 
						|
          set(F_DESCR, d);
 | 
						|
        else
 | 
						|
          ok = error_box(FR("Il campo %s non esiste"), 
 | 
						|
                         (const char*)n, rd->file_desc());
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
TFields_mask::TFields_mask(const char* name, int number)
 | 
						|
            : TAutomask(name, number)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
TFields_mask::~TFields_mask()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TFields_sheet
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TFields_sheet : public TSheet_field
 | 
						|
{     
 | 
						|
  TFields_mask* _sheet_mask;
 | 
						|
 
 | 
						|
protected: // TSheet_field
 | 
						|
  virtual void create(WINDOW win);
 | 
						|
 | 
						|
public:
 | 
						|
  void describe_fields();
 | 
						|
  virtual TMask& sheet_mask() const;
 | 
						|
 | 
						|
  TFields_sheet(TAutomask* m);
 | 
						|
  virtual ~TFields_sheet();
 | 
						|
};
 | 
						|
 | 
						|
TMask& TFields_sheet::sheet_mask() const
 | 
						|
{                    
 | 
						|
  return _sheet_mask ? *(TMask*)_sheet_mask : TSheet_field::sheet_mask();
 | 
						|
}
 | 
						|
 | 
						|
void TFields_sheet::create(WINDOW win)
 | 
						|
{
 | 
						|
  TSheet_field::create(win);
 | 
						|
 
 | 
						|
  const TFilename& name = sheet_mask().source_file();
 | 
						|
  const int number = sheet_mask().number();
 | 
						|
  
 | 
						|
  _sheet_mask = new TFields_mask(name, number);
 | 
						|
  _sheet_mask->set_sheet(this);
 | 
						|
}
 | 
						|
 | 
						|
void TFields_sheet::describe_fields()
 | 
						|
{
 | 
						|
  TRelation_description* rd = _sheet_mask->rel_desc();
 | 
						|
  if (rd)
 | 
						|
  {
 | 
						|
    TString str;
 | 
						|
    for (int r = items()-1; r >= 0; r--)
 | 
						|
    {           
 | 
						|
      TToken_string& riga = row(r);
 | 
						|
      str = riga.get(0);
 | 
						|
      str = rd->get_field_description(str);
 | 
						|
      if (str.not_empty()) 
 | 
						|
        riga.add(str, F_DESCR-FIRST_FIELD);
 | 
						|
    }
 | 
						|
    force_update();
 | 
						|
  }  
 | 
						|
}
 | 
						|
 | 
						|
TFields_sheet::TFields_sheet(TAutomask* m)
 | 
						|
             : TSheet_field(m), _sheet_mask(NULL)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
TFields_sheet::~TFields_sheet()
 | 
						|
{
 | 
						|
  if (_sheet_mask)
 | 
						|
    delete _sheet_mask;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::file_open(TFilename& fname) const
 | 
						|
{
 | 
						|
  DIRECTORY dir; 
 | 
						|
  xvt_fsys_get_dir(&dir); // Save dir
 | 
						|
 | 
						|
  FILE_SPEC fs;
 | 
						|
  xvt_fsys_convert_str_to_fspec(fname, &fs);
 | 
						|
    
 | 
						|
  const bool good = xvt_dm_post_file_open(&fs, TR("Selezionare il file ...")) == FL_OK;
 | 
						|
  xvt_fsys_set_dir(&dir); // Restore dir
 | 
						|
                 
 | 
						|
  if (good)                 
 | 
						|
    fname = fs.name;
 | 
						|
  
 | 
						|
  return good;
 | 
						|
}
 | 
						|
 | 
						|
void TWizard_mask::load_ini(const TString& ininame)
 | 
						|
{                 
 | 
						|
  TWait_cursor hourglass;
 | 
						|
  if (!_frozen)
 | 
						|
  {
 | 
						|
    _frozen = TRUE;
 | 
						|
  
 | 
						|
    TConfig ini(ininame, "MAIN");
 | 
						|
    const int recsize = ini.get_int("RECORDSIZE");
 | 
						|
    if (recsize > 0)
 | 
						|
    {                    
 | 
						|
      set(F_FIXEDLEN, "X", TRUE);
 | 
						|
      set(F_RECLEN, recsize, TRUE);
 | 
						|
    }
 | 
						|
    else
 | 
						|
      set(F_RECSEP, ini.get("RECORDSEP").left(4), TRUE);
 | 
						|
    set(F_SKIPLINES, ini.get_int("SKIPLINES"));
 | 
						|
    
 | 
						|
    const TString16 fldsep = ini.get("FIELDSEP").left(1);
 | 
						|
    set(F_FIELDSEP, fldsep, TRUE);
 | 
						|
    
 | 
						|
    ini.set_paragraph("RECORD");
 | 
						|
  
 | 
						|
    if (fldsep.empty())
 | 
						|
    {                                                                             
 | 
						|
      TColumnizer_field& cf = (TColumnizer_field&)field(F_COLUMNIZER);
 | 
						|
      for (int i = 0; ; i++)
 | 
						|
      {                        
 | 
						|
        if (i > 0) 
 | 
						|
        {
 | 
						|
          const long position = ini.get_long("POSITION", NULL, i);
 | 
						|
          if (position > 0)
 | 
						|
            cf.add_column(position);
 | 
						|
          else
 | 
						|
            break;  
 | 
						|
        }    
 | 
						|
        else  
 | 
						|
          cf.destroy_columns();
 | 
						|
      }
 | 
						|
    }
 | 
						|
    
 | 
						|
    TString use = ini.get("USE");
 | 
						|
    if (use.not_empty())
 | 
						|
      set(F_ISAM, use);
 | 
						|
    
 | 
						|
    TRelation_description* rd = rel_desc();
 | 
						|
    
 | 
						|
    TFields_sheet& fs = (TFields_sheet&)sfield(F_FIELDS);
 | 
						|
    TFieldref fr;
 | 
						|
    for (int i = 0; ini.exist("NAME", i) || ini.exist("POSITION", i); i++)
 | 
						|
    {                  
 | 
						|
      const TString& campo = ini.get("FIELD", NULL, i);
 | 
						|
      TToken_string& row = fs.row(i);
 | 
						|
      if (campo.not_empty())
 | 
						|
      {
 | 
						|
        fr = campo;
 | 
						|
        row = fr.name();
 | 
						|
        
 | 
						|
        if (rd == NULL)
 | 
						|
        {
 | 
						|
          int isam = fr.file();
 | 
						|
          if (isam)
 | 
						|
          {
 | 
						|
            set(F_ISAM, isam);
 | 
						|
            rd = rel_desc();
 | 
						|
          }  
 | 
						|
        }
 | 
						|
        
 | 
						|
        if (rd)
 | 
						|
          row.add(rd->get_field_description(fr.name()));
 | 
						|
      }  
 | 
						|
    }
 | 
						|
    fs.force_update();
 | 
						|
    _frozen = FALSE;  
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TWizard_mask::save_ini(const TFilename& ininame) const
 | 
						|
{                 
 | 
						|
  if (!ininame.blank())
 | 
						|
  {
 | 
						|
    if (!ininame.exist() || 
 | 
						|
        yesno_box(FR("Si desidera sovrascrivere il file %s"), (const char*)ininame))
 | 
						|
    {    
 | 
						|
      TConfig ini(ininame, "MAIN");
 | 
						|
      ini.remove_all();
 | 
						|
      ini.set("RECORDSEP", get(F_RECSEP));
 | 
						|
      ini.set("RECORDSIZE", get(F_RECLEN));
 | 
						|
      ini.set("SKIPLINES", get(F_SKIPLINES));
 | 
						|
      const TString& fieldsep = get(F_FIELDSEP);
 | 
						|
      ini.set("FIELDSEP", fieldsep);
 | 
						|
      ini.set("TYPEFIELD", -1);
 | 
						|
 
 | 
						|
      ini.set_paragraph("RECORD");
 | 
						|
      ini.remove_all();
 | 
						|
      ini.set("USE", get(F_ISAM));
 | 
						|
 | 
						|
      if (fieldsep.empty())
 | 
						|
      {        
 | 
						|
        const TColumnizer_field& cf = (const TColumnizer_field&)field(F_COLUMNIZER);
 | 
						|
        long last_column = 0;
 | 
						|
        for (int i = 0; ; i++)
 | 
						|
        {
 | 
						|
          const long column = cf.get_column(i);
 | 
						|
          if (column <= 0)
 | 
						|
            break; 
 | 
						|
          const long len = column - last_column;
 | 
						|
          ini.set("POSITION", last_column, NULL, TRUE, i);  
 | 
						|
          ini.set("LENGTH", len, NULL, TRUE, i);
 | 
						|
          last_column = column;
 | 
						|
        }
 | 
						|
      }
 | 
						|
      
 | 
						|
      TSheet_field& sf = sfield(F_FIELDS);
 | 
						|
      FOR_EACH_SHEET_ROW(sf, r, row)
 | 
						|
      {                             
 | 
						|
        ini.set("FIELD", row->get(0), NULL, TRUE, r);
 | 
						|
        
 | 
						|
        const char* name = row->get(1);
 | 
						|
        if (name == NULL || *name <= ' ')
 | 
						|
          name = row->get(0);
 | 
						|
        ini.set("NAME", name, NULL, TRUE, r);
 | 
						|
      }
 | 
						|
    }  
 | 
						|
  }  
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::is_aga_file(const TFilename& name) const
 | 
						|
{
 | 
						|
  bool yes = xvt_str_compare_ignoring_case(name.ext(), "txt") == 0;
 | 
						|
  if (yes)
 | 
						|
  {
 | 
						|
    TScanner aga(name);
 | 
						|
    yes = aga.paragraph("Data"); // Esiste il paragrafo dati?
 | 
						|
  }
 | 
						|
  return yes;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::load_aga(const TFilename& name)
 | 
						|
{   
 | 
						|
  TWait_cursor hourglass;
 | 
						|
  if (!_frozen)
 | 
						|
  {
 | 
						|
    _frozen = TRUE;
 | 
						|
    TSheet_field& sf = sfield(F_FIELDS);
 | 
						|
    TScanner aga(name);
 | 
						|
    TToken_string riga(1024);
 | 
						|
    TToken_string campo(15, ',');
 | 
						|
    TString isam;
 | 
						|
    bool inside_header = FALSE;
 | 
						|
    
 | 
						|
    while (aga.line().not_empty())
 | 
						|
    {     
 | 
						|
      riga = aga.token(); 
 | 
						|
  
 | 
						|
      if (riga.compare("[Data]", -1, TRUE) == 0)  
 | 
						|
      {
 | 
						|
        set(F_FIXEDLEN, "", TRUE);
 | 
						|
        set(F_RECLEN, "", TRUE);
 | 
						|
        set(F_RECSEP, "", TRUE);
 | 
						|
        set(F_FIELDSEP, "|", TRUE);
 | 
						|
        set(F_SKIPLINES, aga.linenum(), TRUE);
 | 
						|
        if (isam.not_empty())
 | 
						|
          set(F_ISAM, isam, TRUE);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
  
 | 
						|
      if (inside_header)
 | 
						|
      {
 | 
						|
        if (riga.compare("Fields", 6, TRUE) == 0)  
 | 
						|
        {
 | 
						|
          const int uguale = riga.find('=');
 | 
						|
          if (uguale >= 0)
 | 
						|
          {
 | 
						|
            riga.ltrim(uguale+1);
 | 
						|
            for(campo = riga.get(0); campo.not_empty(); campo = riga.get())
 | 
						|
            {
 | 
						|
              sf.row(-1) = campo.get(0);
 | 
						|
              sf.check_row(sf.items()-1);
 | 
						|
            }
 | 
						|
          }
 | 
						|
        } else
 | 
						|
        if (riga.compare("File", 4, TRUE) == 0)  
 | 
						|
        {
 | 
						|
          const int uguale = riga.find('=');
 | 
						|
          if (uguale >= 0)
 | 
						|
          {
 | 
						|
            isam = riga.mid(uguale+1);
 | 
						|
            isam.trim();
 | 
						|
          }
 | 
						|
        }
 | 
						|
        else
 | 
						|
          inside_header = riga[0] != '[';
 | 
						|
      } 
 | 
						|
      else
 | 
						|
      {
 | 
						|
        if (riga.compare("[Header]", -1, TRUE) == 0)
 | 
						|
        {
 | 
						|
          sf.destroy();
 | 
						|
          inside_header = TRUE;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    _frozen = FALSE;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TWizard_mask::file_preview() const
 | 
						|
{                 
 | 
						|
  TWait_cursor hourglass;
 | 
						|
  if (_frozen)
 | 
						|
    return;
 | 
						|
  
 | 
						|
  const int MAXLINE = 8192;
 | 
						|
  const bool fixedlen = get_bool(F_FIXEDLEN);
 | 
						|
  const int reclen = fixedlen ? get_int(F_RECLEN) : 0;
 | 
						|
  const long skiplines = get_long(F_SKIPLINES);
 | 
						|
  const TString& recsep = get(F_RECSEP);
 | 
						|
  const TString& fieldsep = get(F_FIELDSEP);
 | 
						|
 | 
						|
  const TString& fname = get(F_FILE);
 | 
						|
  int flags = ios::in;
 | 
						|
  if (fixedlen)
 | 
						|
    flags |= ios::binary;
 | 
						|
  ifstream f(fname, flags);
 | 
						|
 | 
						|
  if (fixedlen)
 | 
						|
  {
 | 
						|
    streamoff offset = reclen * skiplines;
 | 
						|
    f.seekg(offset, ios::beg);
 | 
						|
  }  
 | 
						|
  else
 | 
						|
  {
 | 
						|
    for (long s = skiplines; s > 0; s--)
 | 
						|
    {
 | 
						|
      if (*recsep)
 | 
						|
        f.ignore(MAXLINE, *recsep);
 | 
						|
      else  
 | 
						|
        f.ignore(MAXLINE, '\n');
 | 
						|
    }  
 | 
						|
  }
 | 
						|
  
 | 
						|
  TColumnizer_field& cf = (TColumnizer_field&)field(F_COLUMNIZER);
 | 
						|
  
 | 
						|
  int displines = get_int(F_DISPLINES);
 | 
						|
  if (displines <= 0) 
 | 
						|
    displines = cf.visible_rows();
 | 
						|
  
 | 
						|
  TString_array righe;
 | 
						|
	int l;
 | 
						|
  for (l = 0; l < displines; l++)
 | 
						|
  {
 | 
						|
    righe.add(new TToken_string(MAXLINE), l);
 | 
						|
    TToken_string& riga = righe.row(l);
 | 
						|
    char* buff = riga.get_buffer();
 | 
						|
    
 | 
						|
    if (fixedlen)
 | 
						|
    {   
 | 
						|
      f.read(buff, reclen);
 | 
						|
      riga.cut(reclen);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {   
 | 
						|
      if (*recsep)
 | 
						|
      {
 | 
						|
        f.getline(buff, riga.size(), *recsep);
 | 
						|
        f.ignore(strlen(recsep)-1);
 | 
						|
      }  
 | 
						|
      else
 | 
						|
        f.getline(buff, riga.size());
 | 
						|
    }
 | 
						|
    if (f.eof()) 
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (fieldsep.blank())
 | 
						|
  {   
 | 
						|
    cf.enable();
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    TPointer_array maxlen;
 | 
						|
    int maxcol = 0;
 | 
						|
    int l;
 | 
						|
    for (l = righe.items()-1; l >= 0; l--)
 | 
						|
    {
 | 
						|
      TToken_string& riga = righe.row(l);
 | 
						|
      riga.separator(fieldsep[0]);
 | 
						|
      int col = 0;
 | 
						|
      FOR_EACH_TOKEN(riga, tok)
 | 
						|
      {
 | 
						|
        const long len = *tok ? strlen(tok) : 1;
 | 
						|
        if (len > maxlen.get_long(col))
 | 
						|
          maxlen.add_long(len, col);
 | 
						|
        col++;
 | 
						|
      }
 | 
						|
      if (col > maxcol)
 | 
						|
        maxcol = col;
 | 
						|
    }
 | 
						|
    cf.disable();
 | 
						|
    cf.destroy_columns();
 | 
						|
    long last_column = 0;
 | 
						|
    for (l = 0; l < maxcol; l++)
 | 
						|
    {
 | 
						|
      const long len = maxlen.get_long(l);
 | 
						|
      last_column += len;
 | 
						|
      cf.add_column(last_column);
 | 
						|
    }  
 | 
						|
    
 | 
						|
    TToken_string oldrow;
 | 
						|
    TString str;
 | 
						|
    for (l = righe.items()-1; l >= 0; l--)
 | 
						|
    {
 | 
						|
      TToken_string& riga = righe.row(l);
 | 
						|
      oldrow = riga;
 | 
						|
      riga.cut(0);
 | 
						|
      int col = 0;
 | 
						|
      FOR_EACH_TOKEN(oldrow, tok)
 | 
						|
      {
 | 
						|
        const int len = (int)maxlen.get_long(col);
 | 
						|
        str = tok;        
 | 
						|
        if (str[0] =='#' || real::is_real(str))
 | 
						|
          str.right_just(len);
 | 
						|
        else
 | 
						|
          str.left_just(len);
 | 
						|
        riga << str;
 | 
						|
        col++;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  cf.destroy_rows();
 | 
						|
  for (int m = 0; m < righe.items(); m++)
 | 
						|
  {
 | 
						|
    TToken_string& riga = righe.row(m);
 | 
						|
    cf.add_row(riga);
 | 
						|
  }  
 | 
						|
  cf.recalc_layout(reclen, righe.items());
 | 
						|
}   
 | 
						|
 | 
						|
TRelation_description* TWizard_mask::rel_desc(int logicnum)
 | 
						|
{             
 | 
						|
  if (_rel && _rel->lfile().num() != logicnum)
 | 
						|
  {
 | 
						|
    delete _rel;
 | 
						|
    _rel = NULL;
 | 
						|
    delete _reldesc;
 | 
						|
    _reldesc = NULL;
 | 
						|
  }
 | 
						|
  if (_rel == NULL && logicnum > 0)
 | 
						|
  {
 | 
						|
    _rel = new TRelation(logicnum);
 | 
						|
    _reldesc = new TRelation_description(*_rel);
 | 
						|
  }  
 | 
						|
    
 | 
						|
  return _reldesc;
 | 
						|
}
 | 
						|
 | 
						|
TRelation_description* TWizard_mask::rel_desc()
 | 
						|
{           
 | 
						|
  TRelation_description* rd = NULL;
 | 
						|
  const TString& isam = get(F_ISAM);
 | 
						|
  const int logicnum = str2isamfile(isam);
 | 
						|
  if (logicnum > 0)
 | 
						|
    rd = rel_desc(logicnum);
 | 
						|
  return rd;  
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::file_handler(TOperable_field& f, TField_event e)
 | 
						|
{ 
 | 
						|
  bool ok = TRUE;
 | 
						|
  
 | 
						|
  if (e == fe_button)
 | 
						|
  {
 | 
						|
    TFilename n("*.txt");
 | 
						|
    if (file_open(n))
 | 
						|
    {
 | 
						|
      f.set(n);
 | 
						|
      e = fe_modify;
 | 
						|
    }  
 | 
						|
  }     
 | 
						|
  
 | 
						|
  if (e == fe_modify)
 | 
						|
  {            
 | 
						|
    TFilename n = f.get();
 | 
						|
    if (n.exist())
 | 
						|
    {    
 | 
						|
      if (is_aga_file(n))
 | 
						|
      {
 | 
						|
        load_aga(n);
 | 
						|
      }  
 | 
						|
      else
 | 
						|
      {
 | 
						|
        const char* ext[] = { "imp", "ini", NULL };
 | 
						|
        for (int e = 0; ext[e]; e++)
 | 
						|
        {
 | 
						|
          n.ext(ext[e]);
 | 
						|
          if (n.exist())
 | 
						|
          {
 | 
						|
            set(F_INI, n, TRUE);
 | 
						|
            return TRUE;
 | 
						|
          }  
 | 
						|
        }
 | 
						|
      }  
 | 
						|
      
 | 
						|
      n = n.name();
 | 
						|
      n.ext("");   
 | 
						|
      if ((n[0] == 'f' || n[0] == 'F') && atoi(n.mid(1,-1)))
 | 
						|
        n.ltrim(1);
 | 
						|
      if (str2isamfile(n))
 | 
						|
        set(F_ISAM, n, TRUE);
 | 
						|
      
 | 
						|
      file_preview();
 | 
						|
    }  
 | 
						|
    else
 | 
						|
      ok = error_box(TR("Il file non esiste"));
 | 
						|
  }
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::ini_handler(TOperable_field& f, TField_event e)
 | 
						|
{           
 | 
						|
  bool ok = TRUE;
 | 
						|
  switch (e)
 | 
						|
  {        
 | 
						|
  case fe_button:
 | 
						|
    {
 | 
						|
      TFilename n("*.imp");
 | 
						|
      if (file_open(n))
 | 
						|
        f.set(n);
 | 
						|
      else
 | 
						|
        break;  
 | 
						|
    }  
 | 
						|
  case fe_init:
 | 
						|
  case fe_modify:
 | 
						|
    {                       
 | 
						|
      const TFilename n = f.get();
 | 
						|
      const bool pieno = !n.blank();
 | 
						|
      enable(F_SAVE, pieno);
 | 
						|
      if (pieno)
 | 
						|
      {   
 | 
						|
        if (n.exist())
 | 
						|
        {
 | 
						|
          load_ini(n);
 | 
						|
          file_preview();
 | 
						|
        }  
 | 
						|
      }  
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::isamfile_handler(TOperable_field& f, TField_event e)
 | 
						|
{          
 | 
						|
  bool ok = TRUE;
 | 
						|
  switch (e)
 | 
						|
  {
 | 
						|
  case fe_init:
 | 
						|
    disable(F_IMPORT);
 | 
						|
    break;
 | 
						|
  case fe_button:
 | 
						|
    {
 | 
						|
      int logicnum = str2isamfile(f.get());
 | 
						|
      logicnum = choose_isamfile(logicnum);
 | 
						|
      if (logicnum > 0)
 | 
						|
        f.set(logicnum);
 | 
						|
      else
 | 
						|
        break;
 | 
						|
    }
 | 
						|
  case fe_modify:
 | 
						|
    {              
 | 
						|
      bool can_import = str2isamfile(f.get()) > 0;
 | 
						|
      if (can_import)
 | 
						|
      {   
 | 
						|
        TFields_sheet& fs = (TFields_sheet&)sfield(F_FIELDS); 
 | 
						|
        fs.describe_fields();
 | 
						|
      }
 | 
						|
      else
 | 
						|
        ok = error_box(TR("File dati non valido"));
 | 
						|
      can_import &= fexist(get(F_FILE));
 | 
						|
      enable(F_IMPORT, can_import);
 | 
						|
      reset(F_ZAP);
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  }  
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::import_file()
 | 
						|
{
 | 
						|
  bool ok = FALSE;
 | 
						|
 | 
						|
  const TFilename filename = get(F_FILE);
 | 
						|
  if (!filename.exist())
 | 
						|
    return error_box(FR("Il file %s non esiste"), (const char*)filename);
 | 
						|
 | 
						|
  const int logicnum = str2isamfile(get(F_ISAM));
 | 
						|
  if (logicnum <= 0)
 | 
						|
    return error_box(TR("E' necessario specificare un file di destinazione valido"));
 | 
						|
 | 
						|
  rel_desc(0);  // Chiude il file isam correntemente in uso, altrimenti niente _excllock
 | 
						|
  TSystemisamfile sif(logicnum);
 | 
						|
  int err = sif.open_ex(_excllock);
 | 
						|
  if (err != NOERR)
 | 
						|
    return error_box(FR("Impossibile aprire il file %d: errore %d"), logicnum, err);
 | 
						|
  const bool empty = sif.items() == 0L;
 | 
						|
  sif.close();
 | 
						|
    
 | 
						|
  if (get_bool(F_ZAP))  
 | 
						|
  {
 | 
						|
    if (!empty && yesno_box(FR("Procedere con l'azzeramento del file %d?"), logicnum))
 | 
						|
      sif.packfile(FALSE, TRUE);
 | 
						|
  }
 | 
						|
  
 | 
						|
  const TFilename ininame = get(F_INI);
 | 
						|
  if (ininame.exist())
 | 
						|
  { 
 | 
						|
    TFile_text txt(filename, ininame);
 | 
						|
    err = txt.open('r');
 | 
						|
    if (err == NOERR)
 | 
						|
    {
 | 
						|
      TRecord_text rec;
 | 
						|
      for (long numrec = 1; txt.read(rec) == NOERR; numrec++)
 | 
						|
      {
 | 
						|
        err = txt.autosave(rec);
 | 
						|
        if (err != NOERR)
 | 
						|
        {
 | 
						|
          ok = error_box(FR("Errore %d durante la scrittura del record %ld:"),
 | 
						|
                         err, numrec);
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else  
 | 
						|
      ok = error_box(FR("Impossibile leggere il file %s"), (const char*)filename);
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    if (is_aga_file(filename))
 | 
						|
    {
 | 
						|
      err = sif.open_ex(_excllock);
 | 
						|
      if (err == NOERR)
 | 
						|
        ok = sif.load(filename) == NOERR;
 | 
						|
      else
 | 
						|
        ok = error_box(FR("Impossibile aprire il file %d: errore %d"), logicnum, err);
 | 
						|
      sif.close();
 | 
						|
    }
 | 
						|
    else
 | 
						|
      ok = error_box(FR("Il file %s non esiste"), (const char*)ininame);
 | 
						|
  }
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
 | 
						|
bool TWizard_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  bool ok = TRUE;
 | 
						|
	
 | 
						|
	if (jolly == 0)
 | 
						|
	{
 | 
						|
		switch(f.dlg())
 | 
						|
		{
 | 
						|
			case F_FILE:
 | 
						|
				ok = file_handler(f, e);
 | 
						|
				break;
 | 
						|
			case F_INI:
 | 
						|
				ok = ini_handler(f, e);
 | 
						|
				break;
 | 
						|
			case F_RECLEN:
 | 
						|
			case F_RECSEP:  
 | 
						|
			case F_FIELDSEP:
 | 
						|
			case F_SKIPLINES:
 | 
						|
			case F_DISPLINES:
 | 
						|
			case F_FIXEDLEN:
 | 
						|
				if (e == fe_modify)
 | 
						|
					file_preview();
 | 
						|
				break;  
 | 
						|
			case F_ISAM:  
 | 
						|
				ok = isamfile_handler(f, e);
 | 
						|
				break;
 | 
						|
			case F_SAVE:
 | 
						|
				if (e == fe_button)
 | 
						|
					save_ini(get(F_INI));
 | 
						|
				break;  
 | 
						|
			case F_IMPORT:  
 | 
						|
				if (e == fe_button)
 | 
						|
					import_file();
 | 
						|
				break;  
 | 
						|
			case F_COLUMNIZER:
 | 
						|
				if (e == fe_init)
 | 
						|
					file_preview();   // Indispensabile!
 | 
						|
				break;
 | 
						|
			default:
 | 
						|
				break;  
 | 
						|
		}         
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		TFields_sheet& fs = (TFields_sheet&)sfield(F_FIELDS); 
 | 
						|
 | 
						|
		ok = ((TFields_mask&)fs.sheet_mask()).on_field_event(f, e, 0);
 | 
						|
	}
 | 
						|
  return ok;
 | 
						|
}
 | 
						|
                                                 
 | 
						|
TMask_field* TWizard_mask::parse_field(TScanner& scanner)
 | 
						|
{
 | 
						|
  const TString& key = scanner.key();
 | 
						|
  if (key == "BR") 
 | 
						|
    return new TColumnizer_field(this);
 | 
						|
  if (key == "SP") 
 | 
						|
    return new TFields_sheet(this);
 | 
						|
  return TAutomask::parse_field(scanner);
 | 
						|
}
 | 
						|
 | 
						|
TWizard_mask::TWizard_mask()
 | 
						|
            : _frozen(FALSE), _reldesc(NULL), _rel(NULL)
 | 
						|
{                           
 | 
						|
  read_mask("ba1800a", 0, 1);
 | 
						|
  set_handlers();
 | 
						|
}
 | 
						|
 | 
						|
TWizard_mask::~TWizard_mask() 
 | 
						|
{
 | 
						|
  if (_reldesc)
 | 
						|
    delete _reldesc;
 | 
						|
  if (_rel)  
 | 
						|
    delete _rel;
 | 
						|
}           
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Wizard main app
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TImport_wizard : public TSkeleton_application
 | 
						|
{      
 | 
						|
protected: // TSkeleton_application
 | 
						|
  virtual void main_loop();
 | 
						|
 | 
						|
public:
 | 
						|
  void import();
 | 
						|
};  
 | 
						|
 | 
						|
void TImport_wizard::import()
 | 
						|
{
 | 
						|
  const int nLogicNum = atoi(argv(2));
 | 
						|
  if (nLogicNum >= LF_USER)
 | 
						|
  {  
 | 
						|
    const TFilename strName = argv(3);
 | 
						|
    if (strName.exist())
 | 
						|
    {
 | 
						|
      TSystemisamfile file(nLogicNum);
 | 
						|
      file.load(strName);
 | 
						|
    }
 | 
						|
    else
 | 
						|
      error_box("Nome file errato: %s", (const char*)strName);
 | 
						|
  }
 | 
						|
  else
 | 
						|
    error_box("Numero file errato: %d", nLogicNum);
 | 
						|
}
 | 
						|
 | 
						|
void TImport_wizard::main_loop()
 | 
						|
{ 
 | 
						|
  if (argc() < 3)
 | 
						|
  {
 | 
						|
    TWizard_mask m;
 | 
						|
    m.run();
 | 
						|
  }
 | 
						|
  else
 | 
						|
    import();
 | 
						|
}
 | 
						|
 | 
						|
int ba1800(int argc, char* argv[])
 | 
						|
{          
 | 
						|
  TImport_wizard of_oz;
 | 
						|
  of_oz.run(argc, argv, TR("Import Wizard"));
 | 
						|
  return 0;
 | 
						|
}
 |