Eliminata funzione di matteo

git-svn-id: svn://10.65.10.50/trunk@3674 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-09-26 15:30:11 +00:00
parent 9a5d61570a
commit c7d7a67725

View File

@ -662,103 +662,83 @@ HIDDEN bool _not_empty_chkfld_val(TMask_field& f, KEY k)
HIDDEN bool _sconto_val(TMask_field& f, KEY key) HIDDEN bool _sconto_val(TMask_field& f, KEY key)
{ {
bool ok = TRUE;
if ( f.to_check( key ) ) if ( f.to_check( key ) )
{ {
TString work( f.get( ) ); const TString80 work(f.get());
TString goodexp; TString80 goodexp;
TString num;
// Elimina gli spazi molesti // Elimina gli spazi molesti
work.strip_spaces( ); // work.strip_spaces( );
// Per ora nessun errore if (work.not_empty())
int _errorpos = -1;
int i = 0;
const int wlen = work.len( );
// Flag che indica se sono nella parte decimale di un numero
bool dec = FALSE;
// Flag che indica se si attende l'inizio di un numero
bool startnum = TRUE;
// Flag che indica se siamo all'inizio di un numero
while ( i < wlen && _errorpos < 0 )
{
char c = work[ i++ ];
switch( c )
{
case '+':
case '-':
// Se ero in in numero ...
if( !startnum )
{
real newval( num );
if( newval >= 0 )
goodexp << '+';
goodexp << num;
}
// Inizia il nuovo numero
num = ( c == '-' )?"-":"";
startnum = TRUE;
dec = FALSE;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
num << c;
startnum = FALSE;
break;
case '.':
case ',':
// Se siamo già nella parte decimale ...
if( dec )
{
// Segnala un errore
_errorpos = i;
break;
}
// Se occorreva un numero ci metto lo 0
if( startnum )
num << '0';
// Interpreto la virgola come punto
num << '.';
dec = TRUE;
startnum = TRUE;
break;
default:
_errorpos = i;
break;
}
}
// Controlla la validità
bool _valid = ( _errorpos < 0 );
// Se richiesto segnala l'errore
if( !_valid )
warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 );
if( _valid )
{ {
// Aggiunge l'ultimo numero preso TString80 num;
real lastval( num ); bool dec = FALSE; // Flag che indica se si attende l'inizio di un numero
if( lastval >= 0 ) bool startnum = TRUE; // Flag che indica se siamo all'inizio di un numero
goodexp << '+'; int errorchar = ' ';
goodexp << num;
// Assegna la nuova espressione formattata bene // Flag che indica se sono nella parte decimale di un numero
f.set( goodexp ); for (const char * s = (const char *)work; *s && errorchar == ' '; s++)
// Bravo, hai vinto una bambolina {
return TRUE; const char c = *s;
} switch(c)
else {
{ case '+':
// Validate fallito case '-':
return FALSE; // Se ero in in numero ...
if( !startnum )
goodexp << num;
// Inizia il nuovo numero
num = (c == '-') ? "-" : "+";
startnum = TRUE;
dec = FALSE;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
num << c;
startnum = FALSE;
break;
case '.':
case ',':
if(!dec)
{
if( startnum )
num << '0'; // Se occorreva un numero ci metto lo 0
num << '.'; // Interpreto la virgola come punto
dec = TRUE;
startnum = TRUE;
}
else
errorchar = c; // Se siamo gi` nella parte decimale segnala un errore
break;
case ' ':
break;
default:
errorchar = c;
break;
}
}
// Controlla la validita`
ok = errorchar == ' ';
if (ok)
{
goodexp << num; // Assegna la nuova espressione formattata bene
f.set(goodexp);
}
else
f.error_box( "Espressione di sconto non valida. Errore sul carattere %c", errorchar);
}
} }
} return ok;
return TRUE;
} }
HIDDEN bool _ora_val(TMask_field& f, KEY key) HIDDEN bool _ora_val(TMask_field& f, KEY key)