701 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			701 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 | 
						||
 | 
						||
   "Compilatore di profili" per la gestione vendite.
 | 
						||
   Considerando:
 | 
						||
   - Profilo documento
 | 
						||
   - Configurazione vendite per la ditta
 | 
						||
   - Condizioni atmosferiche
 | 
						||
   genera le maschere appropriate.
 | 
						||
   Accetta sulla riga di comando il nome del profilo documento per cui deve generare 
 | 
						||
   la maschera. Il nome del file .MSK viene dedotto dal profilo documento stesso.
 | 
						||
   
 | 
						||
   * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 | 
						||
 | 
						||
#ifndef XVT_INCL_DEFS
 | 
						||
#include <xvt_defs.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#include "veuml.h"
 | 
						||
 | 
						||
#ifndef __CHECKS_H
 | 
						||
#include <checks.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __FSTREAM_H
 | 
						||
#include <fstream.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __SCANNER_H
 | 
						||
#include <scanner.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __CONFIG_H
 | 
						||
#include <config.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __APPLICATION_H
 | 
						||
#include <applicat.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __UTILITY_H
 | 
						||
#include <utility.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __DEFMASK_H
 | 
						||
#include <defmask.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef __VE0100_H
 | 
						||
#include "ve0100.h"
 | 
						||
#endif
 | 
						||
 | 
						||
// Costanti simboliche per i tipi di campo
 | 
						||
 | 
						||
#define T_DATE                                                                    1
 | 
						||
#define T_STRING                                                                  2
 | 
						||
#define T_NUMBER                                                                  3
 | 
						||
#define T_BOOLEAN                                                                 4
 | 
						||
#define T_LISTBOX                                                                 5
 | 
						||
#define T_MEMO                                                                    6
 | 
						||
 | 
						||
// Costanti simboliche per flags del campo
 | 
						||
 | 
						||
#define FS_HIDDEN                                         0
 | 
						||
#define FS_DISABLED                                       1
 | 
						||
#define FS_NORMAL                                         2
 | 
						||
#define FS_REQUIRED                                       3
 | 
						||
 | 
						||
// Significato delle colonne nella tabella _tab0300a
 | 
						||
 | 
						||
#define A_NOME                                                                    0
 | 
						||
#define A_FILEFLD                                                                 1
 | 
						||
#define A_MSKFLD                                                                  2
 | 
						||
#define A_MSKTYPE                                                                 3
 | 
						||
#define A_DESCR                                                                   4
 | 
						||
#define A_MSKSIZE                                                                 5
 | 
						||
#define A_FLAG                                                                    6
 | 
						||
#define A_USE                                             7
 | 
						||
#define A_INPUT                                                                   8
 | 
						||
#define A_DISPLAY                                                                 9
 | 
						||
#define A_OUTPUT                                                                 10
 | 
						||
#define A_SPECIAL                                                                11
 | 
						||
#define A_ITEMS                                                                  12
 | 
						||
 | 
						||
// Significato delle colonne nella tabella _tab0300b
 | 
						||
#define B_NOME                                                                    0
 | 
						||
#define B_MSKTYPE                                                                 1
 | 
						||
#define B_MSKSIZE                                                                 2
 | 
						||
#define B_DESCR                                                                   3
 | 
						||
#define B_WIDTH                                                                 4
 | 
						||
 | 
						||
// Numero massimo di linee per pagina
 | 
						||
 | 
						||
#define MAX_LINES_PER_PAGE                               14
 | 
						||
 | 
						||
 | 
						||
class TMask_generator
 | 
						||
{
 | 
						||
 | 
						||
private:
 | 
						||
 | 
						||
  // Identificatore corrente per lo sheet
 | 
						||
  int _curid;
 | 
						||
 | 
						||
  // Linea corrente
 | 
						||
  int _curline;
 | 
						||
 | 
						||
  // Pagina corrente
 | 
						||
  int _curpage;
 | 
						||
 | 
						||
  // Vero se la pagina <20> aperta
 | 
						||
  bool _pageopen;
 | 
						||
 | 
						||
  // nome del file di .INI di input
 | 
						||
  TFilename _proname;
 | 
						||
 | 
						||
  // File .INI di input
 | 
						||
  TConfig* _pro;
 | 
						||
 | 
						||
  // File .MSK di output
 | 
						||
  ofstream* _out;
 | 
						||
 | 
						||
  // Ultima linea letta
 | 
						||
  TToken_string _line;
 | 
						||
  
 | 
						||
  // Tabelle per la generazione
 | 
						||
  
 | 
						||
  // Campi dei documenti
 | 
						||
  TString_array _tab0300a;
 | 
						||
  
 | 
						||
  // Campi dello sheet
 | 
						||
  TString_array _tab0300b;
 | 
						||
 | 
						||
protected:
 | 
						||
 | 
						||
  // Carica un file di tabella in un TString array
 | 
						||
  void carica_tabella( const TFilename& fn, TString_array& tabella );
 | 
						||
  
 | 
						||
  // Scrive sul file di output una serie di righe uguali per funzione ( DISPLAY, ecc. )
 | 
						||
  void outline( const TString& s = "", const TString& prefix = "", const char sep = '~' );
 | 
						||
 | 
						||
 | 
						||
  // Crea un controllo del tipo specificato
 | 
						||
  void control( const int type, const int id = DLG_NULL, const int size = -1 );
 | 
						||
 | 
						||
  // Ritorna vero se una componente della maschera <20> presente
 | 
						||
  int present( const int i, TToken_string line ){ const TString s = line.get( i ); return !(s.blank( )); };
 | 
						||
 | 
						||
  // Funzioni per generare la maschera
 | 
						||
  // ---------------------------------
 | 
						||
 | 
						||
  // CHECKTYPE
 | 
						||
  void check( const int i );
 | 
						||
  
 | 
						||
  // PAGE
 | 
						||
  void pagina( const int i ){ (*_out) << "PA \"Pagina " << i << "\" 11 60 14\n"; };
 | 
						||
  
 | 
						||
  // PROMPT
 | 
						||
  void prompt( const int x, const int y, const TString& s = "" ){ (*_out) << "PR " << x << " " << y << " \"" << s << "\"\n"; };
 | 
						||
  
 | 
						||
  // BEGIN
 | 
						||
  void begin( void ) { outline ( "BE" ); };
 | 
						||
 | 
						||
  // END
 | 
						||
  void end( void ) { outline ( "EN" ); };
 | 
						||
 | 
						||
  // ENDMASK
 | 
						||
  void endmask( void ) { outline ( "ENDMASK" ); };
 | 
						||
 | 
						||
  // FLAG
 | 
						||
  void flag( const TString& s ) { (*_out) << "FLAG \"" << s << "\"\n"; };
 | 
						||
 | 
						||
  // GROUP
 | 
						||
  void group( const int g ) { (*_out) << "GR " << g << "\n"; };
 | 
						||
 | 
						||
  // FIELD
 | 
						||
  void field( const TString& s ) { outline( s, "FI "); };
 | 
						||
 | 
						||
  // ITEM
 | 
						||
  void item( const TString& s );
 | 
						||
 | 
						||
  // MESSAGE
 | 
						||
  void message( const TString& s ) { outline( s, "ME "); };
 | 
						||
 | 
						||
  // USE
 | 
						||
  void use( const TString& s ){ outline( s, "US " ); };
 | 
						||
 | 
						||
  // DISPLAY
 | 
						||
  void display( const TString& s ){ outline( s, "DI " ); };
 | 
						||
 | 
						||
  // INPUT
 | 
						||
  void input( const TString& s ){ outline( s, "IN " ); };
 | 
						||
 | 
						||
  // OUTPUT
 | 
						||
  void output( const TString& s ){ outline( s, "OU " ); };
 | 
						||
 | 
						||
  // Funzioni di accesso alle variabili private
 | 
						||
  // ------------------------------------------
 | 
						||
 | 
						||
  // Funzioni per la lettura/scrittura di ID. Si incrementa da solo.
 | 
						||
  int id ( ) { return( _curid++ ); };
 | 
						||
  void id( const int i ){ _curid = i; };
 | 
						||
  
 | 
						||
  // Funzioni per la lettura/scrittura di CURPAGE
 | 
						||
  int page( ) { return _curpage; };
 | 
						||
  void page( const int i ){ _curpage = i; };
 | 
						||
  
 | 
						||
  // Funzioni per la lettura/scrittura di CURLINE
 | 
						||
  int line( ) { return _curline; };
 | 
						||
  void line( const int i ){ _curline = i; };
 | 
						||
 | 
						||
  // Funzioni di generazione ad alto livello
 | 
						||
  // ---------------------------------------
 | 
						||
 | 
						||
  // Genera un campo a partire da una linea del file VE0300A.DAT
 | 
						||
  void genera_campo( TToken_string _line );
 | 
						||
 | 
						||
  // Genera un campo dello sheet a partire da una linea del file VE0300B.DAT
 | 
						||
  void genera_campo_sheet( TToken_string _line );
 | 
						||
 | 
						||
  
 | 
						||
  // Genera la colonna dello sheet a partire da una linea del file VE0300B.DAT
 | 
						||
  void genera_item_sheet( TToken_string _line );
 | 
						||
  
 | 
						||
  // Genera l'intestazione di una pagina ( non la prima )
 | 
						||
  void intestazione_pagina( );
 | 
						||
 | 
						||
public:
 | 
						||
 | 
						||
  // Costruttore, vuole il nome del file .INI
 | 
						||
  TMask_generator( const TString& profilo );
 | 
						||
 | 
						||
  // Attiva la generazione della maschera
 | 
						||
  void genera( );
 | 
						||
 | 
						||
  // Distruttore
 | 
						||
  virtual ~TMask_generator( );
 | 
						||
 | 
						||
};
 | 
						||
 | 
						||
// Definizione dei metodi di TMask_generator
 | 
						||
// -----------------------------------------
 | 
						||
 | 
						||
TMask_generator::TMask_generator( const TString& profilo ) : _proname( profilo )
 | 
						||
{ 
 | 
						||
  // All'inizio la pagina <20> 'chiusa'
 | 
						||
  _pageopen = FALSE;
 | 
						||
 | 
						||
  // La pagina iniziale <20> la 1
 | 
						||
  _curpage = 1;
 | 
						||
  
 | 
						||
  // La linea iniziale <20> la 8
 | 
						||
  _curline = 8;
 | 
						||
 | 
						||
  // Forza l'estensione al profilo
 | 
						||
  _proname.ext( "ini" );
 | 
						||
 | 
						||
  // Se il file di profilo non esiste, esci con un errore fatale
 | 
						||
  if ( !fexist( _proname ) )
 | 
						||
    fatal_box( "Il file %s non esiste!", _proname );
 | 
						||
  
 | 
						||
  CHECK( fexist( "ve0300a.dat" ), "Il file ve0300a.dat non esiste!" );
 | 
						||
  carica_tabella( "ve0300a.dat", _tab0300a );
 | 
						||
  CHECK( fexist( "ve0300b.dat" ), "Il file ve0300b.dat non esiste!" );
 | 
						||
  carica_tabella( "ve0300b.dat", _tab0300b );
 | 
						||
  
 | 
						||
};
 | 
						||
 | 
						||
TMask_generator::~TMask_generator( )
 | 
						||
{ 
 | 
						||
  delete _out;
 | 
						||
};
 | 
						||
 | 
						||
void TMask_generator::carica_tabella( const TFilename& fn, TString_array& tabella )
 | 
						||
{ TScanner in( fn  );
 | 
						||
  TToken_string line = in.line();
 | 
						||
  while( line.not_empty( ) )   
 | 
						||
  { // Attacca tutte le righe che finiscono con <20>
 | 
						||
    while ( line.right( 1 ) == "<EFBFBD>" )
 | 
						||
    { line.rtrim( 1 );
 | 
						||
      line << in.line( );
 | 
						||
    };
 | 
						||
    tabella.add( line );
 | 
						||
    line = in.line();     
 | 
						||
  }
 | 
						||
};
 | 
						||
 | 
						||
void TMask_generator::outline( const TString& s, const TString& prefix, const char sep )
 | 
						||
{ 
 | 
						||
  if ( s.left( 1 ) == "<EFBFBD>" )
 | 
						||
    (*_out) << "CO " << prefix << s.mid( 1 ) << "\n";
 | 
						||
  else 
 | 
						||
  { TToken_string u( s, sep );
 | 
						||
    for ( int i = 0; i < u.items(); i ++ )
 | 
						||
      (*_out) << prefix << u.get( i ) << "\n";
 | 
						||
  }
 | 
						||
};
 | 
						||
 | 
						||
void TMask_generator::check( const int i )
 | 
						||
{ 
 | 
						||
  switch( i ) 
 | 
						||
  {
 | 
						||
  case FS_REQUIRED:
 | 
						||
    outline ( "CH REQUIRED" );
 | 
						||
    break;
 | 
						||
  default:
 | 
						||
    outline ( "CH NORMAL" );
 | 
						||
    break;
 | 
						||
  }
 | 
						||
};
 | 
						||
 | 
						||
void TMask_generator::control( const int type, const int id, const int size )
 | 
						||
{ 
 | 
						||
  switch ( type )
 | 
						||
  { case T_DATE    : (*_out) << "DA"; break;
 | 
						||
                   case T_STRING  : (*_out) << "ST"; break;
 | 
						||
                   case T_BOOLEAN : (*_out) << "BO"; break;                 
 | 
						||
                   case T_NUMBER  : (*_out) << "NU"; break;
 | 
						||
                   case T_LISTBOX : (*_out) << "LI"; break;
 | 
						||
                   };                                         
 | 
						||
  (*_out) << " " << id;
 | 
						||
  if ( size > 0 )
 | 
						||
    if ( size > 100 )
 | 
						||
      (*_out) << " " << ( int )( size / 100 ) << " " << ( size % 100 );
 | 
						||
    else 
 | 
						||
      (*_out) << " " << size;
 | 
						||
  (*_out) << "\n";
 | 
						||
}; 
 | 
						||
 | 
						||
void TMask_generator::item( const TString& str ) 
 | 
						||
{  int i, j;
 | 
						||
   TToken_string u( str, '~' );
 | 
						||
   TString s, mess;
 | 
						||
   
 | 
						||
   for( i = 0; i < u.items(); i ++ )
 | 
						||
   { s = u.get( i );
 | 
						||
     if ( ( j = s.find( "<EFBFBD>" ) ) != -1 )
 | 
						||
     { mess = s.mid( j + 1 );
 | 
						||
       s = s.left( j );
 | 
						||
     };
 | 
						||
     if ( ( j = s.find ( "<EFBFBD>" ) ) != -1 )
 | 
						||
       s[ j ] = '|';
 | 
						||
     (*_out) << "IT \"" << s << "\"\n"; 
 | 
						||
     if ( mess.not_empty( ) )
 | 
						||
       (*_out) << "ME " << mess << "\n";
 | 
						||
   }
 | 
						||
 }
 | 
						||
 | 
						||
void TMask_generator::genera_campo_sheet( TToken_string _line )
 | 
						||
{
 | 
						||
  const int type( _line.get_int( B_MSKTYPE ) );
 | 
						||
  control( type, id( ), _line.get_int( B_MSKSIZE ) );
 | 
						||
  begin( );
 | 
						||
  prompt( 2, 2 );
 | 
						||
  end( );
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera_item_sheet( TToken_string _line )
 | 
						||
{
 | 
						||
  (*_out) << "IT \"" << _line.get( B_DESCR );
 | 
						||
  (*_out) << "@" << _line.get_int( B_WIDTH ) << "\"\n";
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera_campo( TToken_string _line )
 | 
						||
{  
 | 
						||
  TString s;
 | 
						||
  
 | 
						||
  const int type( _line.get_int( A_MSKTYPE ) );
 | 
						||
  const int size( _line.get_int( A_MSKSIZE ) );
 | 
						||
  if ( present( A_MSKSIZE, _line ) )
 | 
						||
    control( type, _line.get_int( A_MSKFLD ), size );
 | 
						||
  else
 | 
						||
    control( type, _line.get_int( A_MSKFLD ) );
 | 
						||
  begin();
 | 
						||
  
 | 
						||
  TString name( _line.get( A_NOME ) );
 | 
						||
  name.trim();
 | 
						||
  int value = _pro->get_int( name, "PROFILO" );
 | 
						||
  switch( value )
 | 
						||
  {  case FS_HIDDEN:
 | 
						||
    prompt( 2, 2 );
 | 
						||
    s = "H";
 | 
						||
    s << _line.get( A_FLAG );
 | 
						||
    flag( s ) ;
 | 
						||
    break;
 | 
						||
  case FS_DISABLED :
 | 
						||
    prompt( 2, line( ), _line.get( A_DESCR ) );
 | 
						||
    s = "D";
 | 
						||
    s << _line.get( A_FLAG );
 | 
						||
    flag( s ) ;
 | 
						||
    line( line( ) + 1 );
 | 
						||
    break;
 | 
						||
  case FS_NORMAL :
 | 
						||
  case FS_REQUIRED :
 | 
						||
    prompt( 2, line( ), _line.get( A_DESCR ) );
 | 
						||
    flag( _line.get( A_FLAG ) );
 | 
						||
    line( line( ) + 1 );
 | 
						||
    break;
 | 
						||
  }
 | 
						||
  const TString chiave( _line.get( A_NOME ) );
 | 
						||
  check( _pro->get_int( chiave, "PROFILO" ) );
 | 
						||
  if ( present( A_FILEFLD, _line ) ) field( _line.get( A_FILEFLD ) );
 | 
						||
  if ( present( A_ITEMS, _line ) ) item( _line.get( A_ITEMS ) );
 | 
						||
  if ( present( A_USE, _line ) ) use( _line.get( A_USE ) );
 | 
						||
  if ( present( A_INPUT, _line ) ) input( _line.get( A_INPUT ) );
 | 
						||
  if ( present( A_DISPLAY, _line ) ) display( _line.get( A_DISPLAY ) );
 | 
						||
  if ( present( A_OUTPUT, _line ) ) output( _line.get( A_OUTPUT ) );
 | 
						||
  if ( present( A_SPECIAL, _line ) ) outline( _line.get( A_SPECIAL ) );                    
 | 
						||
  end();
 | 
						||
  if ( ( line() > MAX_LINES_PER_PAGE ) && ( _pageopen == TRUE)) 
 | 
						||
  {  end();
 | 
						||
     _pageopen = FALSE;
 | 
						||
     line( 8 );
 | 
						||
   };
 | 
						||
}    
 | 
						||
 | 
						||
void TMask_generator::intestazione_pagina( )
 | 
						||
{
 | 
						||
  page( page( ) + 1 );
 | 
						||
  pagina( page( ) );
 | 
						||
  (*_out) << "GR " << DLG_NULL << " 77 4\n";
 | 
						||
  begin();
 | 
						||
  prompt( 1, 1 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, DLG_NULL, 4 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 2, "Codice numerazione " );
 | 
						||
  group( 2 );
 | 
						||
  flag( "DUZ" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, DLG_NULL, 40 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 2 );
 | 
						||
  flag( "DU" );
 | 
						||
  group( 3 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, DLG_NULL, 12 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 3, "Profilo :" );
 | 
						||
  flag( "DU" );
 | 
						||
  group( 4 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, DLG_NULL, 4 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 3, "Esercizio " );
 | 
						||
  flag( "D" );
 | 
						||
  group( 5 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_LISTBOX, DLG_NULL, 14 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 5, "Numerazione " );
 | 
						||
  item( "P<EFBFBD>Provvisoria" );
 | 
						||
  item( "D<EFBFBD>Definitiva " );
 | 
						||
  flag( "D" );
 | 
						||
  group( 6 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_NUMBER, DLG_NULL, 7 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 5, "Numero documento " );
 | 
						||
  group( 7 );
 | 
						||
  flag( "DZ" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_NUMBER, DLG_NULL, 1 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 6, "Stato corrente " );
 | 
						||
  group( 8 );
 | 
						||
  flag( "D" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_DATE );
 | 
						||
  begin();
 | 
						||
  prompt( 51, 6, "Data documento " );
 | 
						||
  group( 9 );
 | 
						||
  flag( "D" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
}
 | 
						||
 | 
						||
void TMask_generator::genera( )
 | 
						||
{  
 | 
						||
  int i; 
 | 
						||
  
 | 
						||
  _pro = new TConfig( _proname );   
 | 
						||
  
 | 
						||
  TFilename _mskname( _pro->get( "MSKFILE", "MAIN") );
 | 
						||
  _mskname.ext( "msk" );
 | 
						||
  _out = new ofstream( _mskname );
 | 
						||
  
 | 
						||
  // Definizione della toolbar
 | 
						||
 | 
						||
  
 | 
						||
  outline( "TOOLBAR \"\" 0 20 0 2" );
 | 
						||
  outline( "BU 18 8 2" );
 | 
						||
  begin();
 | 
						||
  prompt( -15, -1,  "~Registra" );
 | 
						||
  message( "EXIT,20082" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  outline( "BU 17 8 2" );
 | 
						||
  begin();
 | 
						||
  prompt( -25, -1, "~Elimina" );
 | 
						||
  message( "EXIT,127" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  outline( "BU 99 8 2" );
 | 
						||
  begin();
 | 
						||
  prompt( -35, -1, "E~labora" );
 | 
						||
  message( "EXIT,345" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  outline( "BU 24 8 2" );
 | 
						||
  begin();
 | 
						||
  prompt( -45, -1 );
 | 
						||
  message( "EXIT,346" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  outline( "BU 2 8 2" );
 | 
						||
  begin();
 | 
						||
  prompt( -55, -1 );
 | 
						||
  message( "EXIT,27" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  // End della toolbar
 | 
						||
  end();
 | 
						||
  
 | 
						||
  
 | 
						||
  // Header della prima pagina
 | 
						||
  
 | 
						||
  outline( "PA \"Pagina \" 11 60 14" );
 | 
						||
  (*_out) << "GR " << DLG_NULL << " 77 4\n";
 | 
						||
  begin();
 | 
						||
  prompt( 1, 1 );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, F_CODNUM, 4 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 2, "Codice numerazione " );
 | 
						||
  field( "CODNUM" );
 | 
						||
  flag( "GDUZ" );
 | 
						||
  message( "CO,2@" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, F_DESNUM, 40 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 2 );
 | 
						||
  flag( "GDU" );
 | 
						||
  message( "CO,3@" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, F_PROFILO, 12 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 3, "Profilo :" );
 | 
						||
  flag( "GDU" );
 | 
						||
  message( "CO,4@" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_STRING, F_ANNO, 4 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 3, "Esercizio " );
 | 
						||
  field( "ANNO" );
 | 
						||
  flag( "GD" );
 | 
						||
  message( "CO,5@" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_LISTBOX, F_PROVV, 14 );
 | 
						||
  begin();
 | 
						||
  prompt( 32, 5, "Numerazione " );
 | 
						||
  field( "PROVV" );
 | 
						||
  item( "P<EFBFBD>Provvisoria<EFBFBD>CO,6@" );
 | 
						||
  item( "D<EFBFBD>Definitiva <20>CO,6@" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_NUMBER, F_NDOC, 7 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 5, "Numero documento " );
 | 
						||
  field(  "NDOC" );
 | 
						||
  message( "CO, 7@" );
 | 
						||
  flag( "Z" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_NUMBER, F_STATO, 1 );
 | 
						||
  begin();
 | 
						||
  prompt( 2, 6, "Stato corrente " );
 | 
						||
  field( "STATO" );
 | 
						||
  message( "CO,8@" );
 | 
						||
  flag( "GD" );
 | 
						||
  end();
 | 
						||
  
 | 
						||
  control( T_DATE, F_DATADOC );
 | 
						||
  begin();
 | 
						||
  prompt( 51, 6, "Data documento " );
 | 
						||
  message( "CO,9@" ); 
 | 
						||
  field( "DATADOC" );
 | 
						||
  end();     
 | 
						||
  
 | 
						||
  // Generazione   
 | 
						||
  _pageopen = TRUE;
 | 
						||
  
 | 
						||
  for( i = 0; i < _tab0300a.items( ); i ++ )
 | 
						||
  { if (_pageopen == FALSE)
 | 
						||
    { intestazione_pagina( );
 | 
						||
      _pageopen = TRUE;
 | 
						||
    }
 | 
						||
    genera_campo( _tab0300a.row( i ) );
 | 
						||
  }
 | 
						||
  if ( _pageopen == TRUE ) end( );
 | 
						||
  intestazione_pagina( );
 | 
						||
  
 | 
						||
  // Generazione dello sheet : vedi il profilo
 | 
						||
  TScanner sheet_in( "ve0300b.dat" );
 | 
						||
  (*_out) << "SPREADSHEET " << F_SHEET << "\n";
 | 
						||
  begin();
 | 
						||
  prompt( 2, 7 );
 | 
						||
  for( i = 0; i < _tab0300b.items( ); i ++ )
 | 
						||
    genera_item_sheet( _tab0300b.row( i ) );
 | 
						||
  end();
 | 
						||
  end();
 | 
						||
  
 | 
						||
  // Generazione pagina dei piedi
 | 
						||
  TToken_string s(_pro->get( "PROGPIEDE", "MAIN" ) );
 | 
						||
  if ( s.not_empty() )
 | 
						||
  { intestazione_pagina(  );
 | 
						||
    TConfig ditta(CONFIG_DITTA);
 | 
						||
    int cp = 1;
 | 
						||
    int piede = s.get_int();;
 | 
						||
    while ( piede != 0 )
 | 
						||
    { control( T_NUMBER, BASE_PIEDE + cp, 1805 );
 | 
						||
      begin();
 | 
						||
      TString header = ditta.get( "PIEDE", "ve", piede );
 | 
						||
      while( header.len() < 40 ) header << " ";
 | 
						||
      prompt( 2, 7 + cp, header );
 | 
						||
      flag( "D" );
 | 
						||
      end();
 | 
						||
      cp ++;   
 | 
						||
      piede = s.get_int();
 | 
						||
    }
 | 
						||
    end();
 | 
						||
  };
 | 
						||
  endmask( );
 | 
						||
  // Stategia al 30/06/95
 | 
						||
  // Creo una maschera con tutte le colonne, poi, a RUNTIME, 
 | 
						||
  // dal motore, nascondo e adatto le colonne.
 | 
						||
  
 | 
						||
  // Generazione maschera dello sheet
 | 
						||
  (*_out) << "PA \"Pagina 1\" 8 5 64 13\n";
 | 
						||
  
 | 
						||
  id( 101 );
 | 
						||
  for( i = 0; i < _tab0300b.items( ); i ++ )
 | 
						||
    genera_campo_sheet( _tab0300b.row( i ) );
 | 
						||
  end();
 | 
						||
  end();
 | 
						||
  endmask( );
 | 
						||
  delete _pro;
 | 
						||
  delete _out;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
// Applicazione guscio
 | 
						||
 | 
						||
class TGenMask_application : public TApplication
 | 
						||
{
 | 
						||
  
 | 
						||
protected:
 | 
						||
  
 | 
						||
  virtual bool create( );
 | 
						||
  virtual bool menu( MENU_TAG m );
 | 
						||
  
 | 
						||
}; 
 | 
						||
 | 
						||
 | 
						||
bool TGenMask_application::menu(MENU_TAG m)
 | 
						||
{
 | 
						||
  TMask_generator a( argv( 2 ) );
 | 
						||
  a.genera( );   
 | 
						||
  return( TRUE );
 | 
						||
};
 | 
						||
 | 
						||
bool TGenMask_application::create( )
 | 
						||
{
 | 
						||
  TApplication::create();
 | 
						||
  menu( 0 );
 | 
						||
  return FALSE;
 | 
						||
};
 | 
						||
 | 
						||
int ve0300( int argc, char** argv )
 | 
						||
{
 | 
						||
  
 | 
						||
  if ( argc < 3 )
 | 
						||
    fatal_box( "Sintassi: VE0 -3 <Nome file di profilo>" );
 | 
						||
  
 | 
						||
  TGenMask_application a;
 | 
						||
  a.run ( argc, argv, "Generazione in corso ..." );
 | 
						||
  return 0;    
 | 
						||
}
 |