]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/xmas.c
ncurses 5.7 - patch 20081206
[ncurses.git] / test / xmas.c
index d99b8219c3062bb37f2039cc3ad90e8242b81e6b..b838bae2bc2de7c0c67f296e6392305ba4dd7f5f 100644 (file)
 /******************************************************************************/
 
 /*
- * $Id: xmas.c,v 1.15 2000/09/02 18:45:53 tom Exp $
+ * $Id: xmas.c,v 1.24 2008/08/03 11:08:59 tom Exp $
  */
 #include <test.priv.h>
 
-#include <signal.h>
-
 #define FROMWHO "Mark Hessling - (M.Hessling@gu.edu.au)"
 
 static int my_bg = COLOR_BLACK;
@@ -133,6 +131,7 @@ static WINDOW *lookdeer3;
 static WINDOW *lookdeer4;
 static WINDOW *w_holiday;
 static WINDOW *w_del_msg;
+static bool *my_pairs;
 
 static int boxit(void);
 static int seas(void);
@@ -149,20 +148,18 @@ static int strng5(void);
 static int reindeer(void);
 static int blinkit(void);
 
-static RETSIGTYPE
-done(int sig) GCC_NORETURN;
+static RETSIGTYPE done(int sig) GCC_NORETURN;
 
-     static void
-       set_color(WINDOW *win, chtype color)
+static void
+set_color(WINDOW *win, chtype color)
 {
     if (has_colors()) {
-       static bool *pairs;
        int n = (color + 1);
-       if (pairs == 0)
-           pairs = (bool *) calloc(COLORS + 1, sizeof(bool));
-       if (!pairs[n]) {
+       if (my_pairs == 0)
+           my_pairs = typeCalloc(bool, COLORS + 1);
+       if (!my_pairs[n]) {
            init_pair(n, color, my_bg);
-           pairs[n] = TRUE;
+           my_pairs[n] = TRUE;
        }
        wattroff(win, A_COLOR);
        wattron(win, COLOR_PAIR(n));
@@ -191,16 +188,15 @@ main(int argc GCC_UNUSED, char **argv GCC_UNUSED)
 {
     int loopy;
 
+    setlocale(LC_ALL, "");
+
     initscr();
     noecho();
     nonl();
     refresh();
-    signal(SIGINT, done);
-    signal(SIGTERM, done);
-#if !defined   DOS && !defined OS2
-    signal(SIGHUP, done);
-    signal(SIGQUIT, done);
-#endif
+
+    CATCHALL(done);
+
     if (has_colors()) {
        start_color();
 #if HAVE_USE_DEFAULT_COLORS
@@ -210,44 +206,48 @@ main(int argc GCC_UNUSED, char **argv GCC_UNUSED)
     }
     curs_set(0);
 
-    treescrn = newwin(16, 27, 3, 53);
-    treescrn2 = newwin(16, 27, 3, 53);
-    treescrn3 = newwin(16, 27, 3, 53);
-    treescrn4 = newwin(16, 27, 3, 53);
-    treescrn5 = newwin(16, 27, 3, 53);
-    treescrn6 = newwin(16, 27, 3, 53);
-    treescrn7 = newwin(16, 27, 3, 53);
-    treescrn8 = newwin(16, 27, 3, 53);
-
-    dotdeer0 = newwin(3, 71, 0, 8);
-
-    stardeer0 = newwin(4, 56, 0, 8);
-
-    lildeer0 = newwin(7, 53, 0, 8);
-    lildeer1 = newwin(2, 4, 0, 0);
-    lildeer2 = newwin(2, 4, 0, 0);
-    lildeer3 = newwin(2, 4, 0, 0);
-
-    middeer0 = newwin(15, 42, 0, 8);
-    middeer1 = newwin(3, 7, 0, 0);
-    middeer2 = newwin(3, 7, 0, 0);
-    middeer3 = newwin(3, 7, 0, 0);
-
-    bigdeer0 = newwin(10, 23, 0, 0);
-    bigdeer1 = newwin(10, 23, 0, 0);
-    bigdeer2 = newwin(10, 23, 0, 0);
-    bigdeer3 = newwin(10, 23, 0, 0);
-    bigdeer4 = newwin(10, 23, 0, 0);
-
-    lookdeer0 = newwin(10, 25, 0, 0);
-    lookdeer1 = newwin(10, 25, 0, 0);
-    lookdeer2 = newwin(10, 25, 0, 0);
-    lookdeer3 = newwin(10, 25, 0, 0);
-    lookdeer4 = newwin(10, 25, 0, 0);
-
-    w_holiday = newwin(1, 26, 3, 27);
-
-    w_del_msg = newwin(1, 19, 23, 60);
+    if ((treescrn = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn2 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn3 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn4 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn5 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn6 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn7 = newwin(16, 27, 3, 53)) == 0 ||
+       (treescrn8 = newwin(16, 27, 3, 53)) == 0 ||
+
+       (dotdeer0 = newwin(3, 71, 0, 8)) == 0 ||
+
+       (stardeer0 = newwin(4, 56, 0, 8)) == 0 ||
+
+       (lildeer0 = newwin(7, 53, 0, 8)) == 0 ||
+       (lildeer1 = newwin(2, 4, 0, 0)) == 0 ||
+       (lildeer2 = newwin(2, 4, 0, 0)) == 0 ||
+       (lildeer3 = newwin(2, 4, 0, 0)) == 0 ||
+
+       (middeer0 = newwin(15, 42, 0, 8)) == 0 ||
+       (middeer1 = newwin(3, 7, 0, 0)) == 0 ||
+       (middeer2 = newwin(3, 7, 0, 0)) == 0 ||
+       (middeer3 = newwin(3, 7, 0, 0)) == 0 ||
+
+       (bigdeer0 = newwin(10, 23, 0, 0)) == 0 ||
+       (bigdeer1 = newwin(10, 23, 0, 0)) == 0 ||
+       (bigdeer2 = newwin(10, 23, 0, 0)) == 0 ||
+       (bigdeer3 = newwin(10, 23, 0, 0)) == 0 ||
+       (bigdeer4 = newwin(10, 23, 0, 0)) == 0 ||
+
+       (lookdeer0 = newwin(10, 25, 0, 0)) == 0 ||
+       (lookdeer1 = newwin(10, 25, 0, 0)) == 0 ||
+       (lookdeer2 = newwin(10, 25, 0, 0)) == 0 ||
+       (lookdeer3 = newwin(10, 25, 0, 0)) == 0 ||
+       (lookdeer4 = newwin(10, 25, 0, 0)) == 0 ||
+
+       (w_holiday = newwin(1, 26, 3, 27)) == 0 ||
+
+       (w_del_msg = newwin(1, 19, 23, 60)) == 0) {
+       endwin();
+       fprintf(stderr, "Cannot create windows - screen too small\n");
+       ExitProgram(EXIT_FAILURE);
+    }
 
     mvwaddstr(w_del_msg, 0, 0, "Hit any key to quit");
 
@@ -1146,15 +1146,17 @@ reindeer(void)
 static RETSIGTYPE
 done(int sig GCC_UNUSED)
 {
-    signal(SIGINT, done);
-    signal(SIGTERM, done);
-#if !defined   DOS && !defined OS2
-    signal(SIGHUP, done);
-    signal(SIGQUIT, done);
-#endif
+    CATCHALL(done);
+
     move(LINES - 1, 0);
     refresh();
     endwin();
     curs_set(1);
-    exit(EXIT_SUCCESS);
+
+#if NO_LEAKS
+    if (my_pairs != 0)
+       free(my_pairs);
+#endif
+
+    ExitProgram(EXIT_SUCCESS);
 }