#include "errori.h"
extern const char *kStrTitoloFP; /* usata per il titolo delle finestre */
static const char *gStrErr[] = {
"", /* zero = nessun errore */
"Memoria insufficiente. ",
"Finestra non creata. ",
"Tessera offscreen non creata. "
};
/*==============================================================================
Visualizza un messaggio di errore nel caso in cui si verifichi un errore
attribuibile al programma, ricavandolo dall'elenco in gStrErr.
==============================================================================*/
INT32 ErroreNostrano( INT32 codice, HWND genitrice ) {
INT32 indice = codice - (codice&kErrLimMinErr);
if( codice > kErrLimMinErr && codice < kErrLimMaxErr ) {
MessageBox( genitrice, gStrErr[indice],
kStrTitoloFP, MB_OK | MB_ICONERROR );
}
else {
char msg[48];
wsprintf( msg, "Errore imprevisto!\nCodice numero %d", indice );
MessageBox( genitrice, msg, kStrTitoloFP, MB_OK | MB_ICONHAND );
}
return codice;
}
/*==============================================================================
Visualizza un messaggio di errore nel caso in cui si verifichi un errore
attribuibile al malfunzionamenti del sistema, ricavandolo dalla funzione
FormatMessage().
==============================================================================*/
INT32 ErroreDiSistema( INT32 codice, HWND genitrice ) {
LPVOID msg = NULL;
DWORD esitoFM = 0;
esitoFM = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, codice, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&msg, 1, NULL );
if( esitoFM != 0 ) {
MessageBox( genitrice, (LPCSTR)msg,
kStrTitoloFP, MB_OK | MB_ICONHAND );
}
else {
MessageBox( genitrice,
"Errore di sistema non identificabile. ",
kStrTitoloFP, MB_OK | MB_ICONHAND );
}
if( msg ) LocalFree( msg );
return codice;
}
/*==============================================================================
Verifica se l'errore riportato tramite il parametro "codice" e' da attribuire
al programma o al sistema, rimandando quindi ad una delle due funzioni
predisposte alla visualizzazione del messaggio d'errore.
==============================================================================*/
INT32 Errore( INT32 codice, HWND genitrice ) {
if( codice != kErrNessunErrore ) {
if( codice & kErrLimMinErr )
return ErroreNostrano( codice, genitrice );
else return ErroreDiSistema( codice, genitrice );
}
return codice;
}
/*==============================================================================
Mostra una finestra di dialogo contenente il messaggio passato in msg, un'icona
punto esclamativo e un pulsante "Ok".
==============================================================================*/
void Notifica( const char *msg, HWND genitrice ) {
MessageBox( genitrice, msg, kStrTitoloFP, MB_OK | MB_ICONINFORMATION );
}