summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.c10
-rw-r--r--src/screen.c13
-rw-r--r--src/screen.h8
3 files changed, 23 insertions, 8 deletions
diff --git a/src/main.c b/src/main.c
index a3118db..49d7e6a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -56,6 +56,7 @@ main(int argc, char **argv)
{
struct speech *speech;
struct screen *screen;
+ int ret;
set_program_name(argv[0]);
@@ -67,11 +68,14 @@ main(int argc, char **argv)
screen = screen_new();
- screen_draw(screen);
- speech_play_time(speech);
+ if (screen_main(screen, speech)) {
+ ret = EXIT_SUCCESS;
+ } else {
+ ret = EXIT_FAILURE;
+ }
screen_destroy(&screen);
speech_destroy(&speech);
- return EXIT_SUCCESS;
+ return ret;
}
diff --git a/src/screen.c b/src/screen.c
index f705701..762b0bb 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -23,9 +23,11 @@
#include <assert.h>
#include <curses.h>
+#include <stdbool.h>
#include <stdlib.h>
#include "clock.h"
+#include "speech.h"
struct screen {
WINDOW *win;
@@ -43,7 +45,7 @@ screen_new(void)
}
screen->win = initscr(); /* On failure, does not return. */
- if (noecho() == ERR || raw() == ERR) {
+ if (noecho() == ERR || raw() == ERR || nodelay(screen->win, TRUE)) {
free(screen);
return NULL;
}
@@ -58,14 +60,19 @@ screen_new(void)
return screen;
}
-void
-screen_draw(struct screen *screen)
+bool
+screen_main(struct screen *screen, struct speech *speech)
{
assert(screen);
+ assert(speech);
clock_draw(screen->clock);
refresh();
+
+ speech_play_time(speech);
+
+ return true;
}
struct screen *
diff --git a/src/screen.h b/src/screen.h
index 6eaf430..8d16428 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -22,13 +22,17 @@
#ifndef SCREEN_H_
#define SCREEN_H_
+#include <stdbool.h>
+
+#include "speech.h"
+
struct screen;
struct screen *
screen_new(void);
-void
-screen_draw(struct screen *screen);
+bool
+screen_main(struct screen *screen, struct speech *speech);
struct screen *
screen_destroy(struct screen **screen_p);