campo-sirio/omnia/checks.cpp

182 lines
6.0 KiB
C++
Raw Normal View History

#include <windows.h>
#include <stdarg.h>
#include <stdio.h>
#include "checks.h"
const char* const AppTitle = "Omnia";
#define buildmsg() char msg[256];va_list argptr;va_start(argptr,fmt);vsprintf(msg,fmt,argptr);va_end(argptr)
// @doc EXTERNAL
// @msg fatal_box | Crea una finestra di ERRORE FATALE con il relativo messaggio
bool fatal_box(
const char* fmt, ...) // @parm Messaggio da stampare nella finestra
// (il formato e' come nella printf del C)
// @comm Il programma viene interrotto al momento in cui si e' verificato l'errore.
{
buildmsg();
MessageBox(NULL, msg, AppTitle, MB_OK | MB_ICONSTOP);
exit(0);
return false;
}
// @doc EXTERNAL
// @msg error_box | Crea una finestra di ERRORE con il relativo messaggio
bool error_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con il bottone OK
// e l'icona punto esclamativo.
{
buildmsg();
MessageBox(NULL, msg, AppTitle, MB_OK | MB_ICONERROR);
return false;
}
// @doc EXTERNAL
// @msg warning_box | Crea una finestra di ATTENZIONE con il relativo messaggio
bool warning_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con il bottone OK
// e l'icona punto di domanda.
{
buildmsg();
MessageBox(NULL, msg, AppTitle, MB_OK | MB_ICONEXCLAMATION);
return 0;
}
// @doc EXTERNAL
// @msg message_box | Crea una finestra di INFORMAZIONE con relativo il messaggio
bool message_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con il bottone OK
// e l'icona informazioni.
{
buildmsg();
MessageBox(NULL, msg, AppTitle, MB_OK | MB_ICONINFORMATION);
return false;
}
// @doc EXTERNAL
// @msg sorry_box | Crea una finestra di SCUSE con il relativo messaggio
bool sorry_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con il bottone OK
// e l'icona informazioni.
{
buildmsg();
MessageBox(NULL, msg, AppTitle, MB_OK | MB_ICONINFORMATION);
return false;
}
// @msg yesno_box | Crea una finestra di RICHIESTA con il relativo messaggio
bool noyes_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
{
buildmsg();
int ret = MessageBox(NULL, msg, AppTitle, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2);
return ret == IDYES;
}
// @doc EXTERNAL
// @msg yesno_box | Crea una finestra di RICHIESTA con il relativo messaggio
bool yesno_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con i bottni SI e NO
// e l'icona col punto di domanda.
//
// @rdesc Ritorna il risultato della richiesta:
//
// @flag 1 | Se viene premuto il taso SI
// @flag 0 | Se viene premuto il taso NO
{
buildmsg();
int ret = MessageBox(NULL, msg, AppTitle, MB_ICONQUESTION | MB_YESNO);
return ret == IDYES;
}
// @doc EXTERNAL
// @msg yesnofatal_box | Crea una finestra di RICHIESTA con il relativo
// messaggio, ma permette di terminare il programma
bool yesnofatal_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con i bottoni SI e NO
// e l'icona col punto di domanda.
// <nl>A differenza della <m yesno_box> permette di terminare il programma
// se viene premuto il tasto SI
//
// @rdesc Ritorna il risultato della richiesta:
//
// @flag 1 | Se viene premuto il tasto SI
// @flag 0 | Se viene premuto il tasto NO
//
// @xref <m yesno_box> <m yesnofatal_box>
{
buildmsg();
#ifdef DBG
char s[256]; sprintf(s, "%s\nContinuare ugualmente?", msg);
const bool ret = yesno_box("%s", s);
if (!ret)
#endif
fatal_box(msg);
return FALSE;
}
// @doc EXTERNAL
// @msg yesnocancel_box | Crea una finestra di RICHIESTA con il relativo messaggio
int yesnocancel_box(
const char* fmt, // @parm Messaggio da stampare nella finestra
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Se si opera in ambiente Windows crea la finestra con i bottoni SI e NO
// e l'icona col punto di domanda.
//
// @rdesc Ritorna il risultato della richiesta:
//
// @flag K_YES | Se viene premuto il tasto SI
// @flag K_NO | Se viene premuto il tasto NO
// @flag K_ESC | Se viene premuto il tosto ESC
//
// @xref <m yesno_box> <m yesnofatal_box>
{
buildmsg();
int ret = MessageBox(NULL, msg, AppTitle, MB_ICONQUESTION | MB_YESNOCANCEL);
return ret;
}
// @doc EXTERNAL
// @msg __trace | Permette di mandare dei messaggi nel file trace.log
bool __trace(
const char* fmt, // @parm Messaggio da stampare
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
// @comm Usato in fase di debug, permette di vedere se il programma ha
// fatto certe operazioni (deve essere definito il simbolo TRC in
// fase di compilazione).
//
// @rdesc Ritorna non 0 se riesca ad aprire il file trace.log
{
static FILE* f = NULL;
if (f == NULL)
f = fopen("trace.log", "w");
if (f != NULL)
{
buildmsg();
fprintf(f, "%s\n", msg);
fflush(f);
}
return f != NULL;
}