Code:
#include <sys/time.h>
#include <ctype.h>
#include <curses.h>
#include <signal.h>
#include <stdlib.h>
#include <strings.h>
int ques_x, ques_y;
char _hour = 0, _min = 0, _sec = 0;
WINDOW *timer_win, *ques_win;
void disp_timer()
{
mvwprintw(timer_win, 0, 0, "%02i:%02i:%02i", _hour, _min, _sec);
wrefresh(timer_win);
/* move the cursor to where it was in ques_win */
wmove(ques_win, ques_y, ques_x);
wrefresh(ques_win);
}
void alarm_handler(int sig)
{
_sec++;
if(_sec == 60)
{
_sec = 0;
_min++;
if(_min == 60)
{
_min = 0;
_hour++;
}
}
disp_timer();
}
void finish(int sig)
{
endwin();
exit(0);
}
int main()
{
int i;
char again, ch;
struct itimerval value;
initscr();
noecho();
cbreak();
timer_win = newwin(2, 10, 3, 0);
ques_win = newwin(2, COLS, 0, 0);
disp_timer();
signal(SIGINT, finish); /* ^C exits and cleans up program */
signal(SIGALRM, alarm_handler);
bzero(&value, sizeof(value));
value.it_interval.tv_sec = 1;
value.it_value.tv_sec = 1;
setitimer(ITIMER_REAL, &value, NULL); /* alarm reset after timer countdown */
again = 1;
do
{
for(i = 0; i < 10; i++)
{
wclear(ques_win);
mvwprintw(ques_win, 0, 0, "Question %i: ", i);
getyx(ques_win, ques_y, ques_x); /* save the current cursor position */
wgetch(ques_win);
mvwprintw(ques_win, 1, 0, "Answer: %i", i);
getyx(ques_win, ques_y, ques_x);
wgetch(ques_win);
}
wclear(ques_win);
mvwaddstr(ques_win, 0, 0, "Again (y/n)? ");
getyx(ques_win, ques_y, ques_x);
ch = wgetch(ques_win);
if(toupper(ch) == 'N')
again = 0;
} while(again);
finish(0);
return 0;
}