1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/**********************************************************************
* This source code is copyright 1999 by Gus Hartmann & Peter Keller *
* It may be distributed under the terms of the GNU General Purpose *
* License, version 2 or above; see the file COPYING for more *
* information. *
* *
* $Id: error.c,v 1.8 2000-11-07 05:34:17 hartmann Exp $
* *
**********************************************************************/
#include "sweep.h"
static WINDOW* ErrFrame;
static WINDOW* ErrWin;
/* Although the alert preference is set by the user, SweepAlert() needs to
not take an argument. So it gets set into a static variable. Gross, but
effective. */
static int ErrAlert;
/* SweepError() is the method for putting erros into the console window
at the bottom of the screen. Passing a null pointer as the message will
invoke a call to ClearError(). */
void SweepError(char* format, ...)
{
char NewErrMsg[42];
va_list args;
if (format==NULL)
{
ClearError();
}
else
{
ClearError();
va_start(args, format);
#if defined HAVE_VSNPRINTF
vsnprintf(NewErrMsg,41,format,args);
#elif HAVE_VSPRINTF
vsprintf(NewErrMsg,format,args);
#else
#error "Need either vsnprintf() (preferred) or vsprintf()"
#endif
va_end(args);
mvwprintw(ErrWin,0,0,NewErrMsg);
SweepAlert();
}
wnoutrefresh(ErrWin);
move(0,0);
noutrefresh();
return;
}
int InitErrorWin(GameStats* Game)
{
if ((ErrFrame=newwin(3,42,LINES-4,(COLS/2)-21))==NULL)
{
return 1;
}
else if ((ErrWin=derwin(ErrFrame,1,40,1,1))==NULL)
{
return 1;
}
wborder(ErrFrame,CharSet.VLine,CharSet.VLine,CharSet.HLine,CharSet.HLine,
CharSet.ULCorner, CharSet.URCorner,CharSet.LLCorner,CharSet.LRCorner);
wnoutrefresh(ErrWin);
wnoutrefresh(ErrFrame);
ErrAlert=Game->Alert;
return 0;
}
void ClearError()
{
wmove(ErrWin,0,0);
wclrtoeol(ErrWin);
wnoutrefresh(ErrWin);
move(0,0);
noutrefresh();
return;
}
int RedrawErrorWin()
{
return ((wborder(ErrFrame,CharSet.VLine,CharSet.VLine,CharSet.HLine,
CharSet.HLine,CharSet.ULCorner,CharSet.URCorner,CharSet.LLCorner,
CharSet.LRCorner)!=OK)?ERR:wnoutrefresh(ErrFrame));
}
void SweepAlert()
{
switch (ErrAlert)
{
case NO_ALERT:
break;
case FLASH:
flash();
break;
case BEEP: default:
/* No preference gets a beep. */
beep();
break;
}
return;
}
void SweepMessage(char* format, ...)
{
char NewErrMsg[42];
va_list args;
ClearError();
if ( format == NULL)
{
return;
}
va_start(args, format);
#if defined HAVE_VSNPRINTF
vsnprintf(NewErrMsg,41,format,args);
#elif HAVE_VSPRINTF
vsprintf(NewErrMsg,format,args);
#else
#error "Need either vsnprintf() (preferred) or vsprintf()"
#endif
va_end(args);
mvwprintw(ErrWin,0,0,NewErrMsg);
wnoutrefresh(ErrWin);
move(0,0);
noutrefresh();
return;
}
void ChangeSweepAlert(int NewAlert)
{
ErrAlert = NewAlert;
return;
}
|