/*
    czx81 - ZX81 CURSES emulator
    Copyright (C) 2020 Ian Cowburn
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see .
*/
#include "wide_curses.h"
#include 
#include 
#include 
#include 
static long TimeDiff(const struct timespec *start,
		     const struct timespec *end)
{
    long diff;
    diff = (end->tv_nsec - start->tv_nsec) +
    		(end->tv_sec - start->tv_sec) * 1000000000L;
    return diff;
}
int main(void)
{
    struct timespec start;
    int quit = FALSE;
    setlocale(LC_ALL, "");
    initscr();
    raw();
    noecho();
    keypad(stdscr, TRUE);
    nodelay(stdscr, TRUE);
    clock_gettime(CLOCK_MONOTONIC, &start);
    while(!quit)
    {
	struct timespec end;
	struct timespec pause = {0};
	int ch;
	clear();
	ch = getch();
	if (ch == 3)
	{
	    quit = TRUE;
	}
	refresh();
	clock_gettime(CLOCK_MONOTONIC, &end);
	start = end;
	pause.tv_nsec = 20000000 - TimeDiff(&start, &end);
	if (pause.tv_nsec > 0)
	{
	    nanosleep(&pause, NULL);
	}
    }
    endwin();
    return EXIT_SUCCESS;
}