ncurses 6.0 - patch 20170930
[ncurses.git] / test / xmas.c
index 4204fe70393898eba81f1ed4af787c9fcdaa969f..f66ba6f04c612b8e70dcd5f189d115804c023d7b 100644 (file)
 /*                                                                            */
 /******************************************************************************/
 
+/*
+ * $Id: xmas.c,v 1.33 2017/09/30 19:14:13 tom Exp $
+ */
 #include <test.priv.h>
 
-#include <signal.h>
-
 #define FROMWHO "Mark Hessling - (M.Hessling@gu.edu.au)"
 
+static int my_bg = COLOR_BLACK;
 static int y_pos, x_pos;
 
-static WINDOW
-       *treescrn, *treescrn2,*treescrn3, *treescrn4,*treescrn5, *treescrn6,
-       *treescrn7, *treescrn8,
-       *dotdeer0,
-       *stardeer0,
-       *lildeer0, *lildeer1, *lildeer2, *lildeer3,
-       *middeer0, *middeer1, *middeer2, *middeer3,
-       *bigdeer0, *bigdeer1, *bigdeer2, *bigdeer3, *bigdeer4,
-       *lookdeer0, *lookdeer1, *lookdeer2, *lookdeer3, *lookdeer4,
-       *w_holiday,
-       *w_del_msg;
-
-static int boxit(void);
-static int seas(void);
-static int greet(void);
-static int fromwho(void);
-static int tree(void);
-static int balls(void);
-static int star(void);
-static int strng1(void);
-static int strng2(void);
-static int strng3(void);
-static int strng4(void);
-static int strng5(void);
-static int reindeer(void);
-static int blinkit(void);
-static RETSIGTYPE done(int sig) GCC_NORETURN ;
-
-int main(
-       int argc GCC_UNUSED,
-       char **argv GCC_UNUSED)
-{
-int loopy;
-
-       initscr();
-       noecho();
-       nonl();
-       refresh();
-       signal(SIGINT,done);
-       signal(SIGTERM,done);
-#if !defined   DOS && !defined OS2
-       signal(SIGHUP,done);
-       signal(SIGQUIT,done);
-#endif
-
-       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);
-
-       mvwaddstr(w_del_msg,0,0,"Hit any key to quit");
-
-       mvwaddstr(w_holiday,0,0,"H A P P Y  H O L I D A Y S");
-
-       /* set up the windows for our various reindeer */
-
-       /* lildeer1 */
-       mvwaddch(lildeer1,0,0,(chtype)'V');
-       mvwaddch(lildeer1,1,0,(chtype)'@');
-       mvwaddch(lildeer1,1,1,(chtype)'<');
-       mvwaddch(lildeer1,1,2,(chtype)'>');
-       mvwaddch(lildeer1,1,3,(chtype)'~');
-
-       /* lildeer2 */
-       mvwaddch(lildeer2,0,0,(chtype)'V');
-       mvwaddch(lildeer2,1,0,(chtype)'@');
-       mvwaddch(lildeer2,1,1,(chtype)'|');
-       mvwaddch(lildeer2,1,2,(chtype)'|');
-       mvwaddch(lildeer2,1,3,(chtype)'~');
-
-       /* lildeer3 */
-       mvwaddch(lildeer3,0,0,(chtype)'V');
-       mvwaddch(lildeer3,1,0,(chtype)'@');
-       mvwaddch(lildeer3,1,1,(chtype)'>');
-       mvwaddch(lildeer3,1,2,(chtype)'<');
-       mvwaddch(lildeer2,1,3,(chtype)'~');
-
-
-       /* middeer1 */
-       mvwaddch(middeer1,0,2,(chtype)'y');
-       mvwaddch(middeer1,0,3,(chtype)'y');
-       mvwaddch(middeer1,1,2,(chtype)'0');
-       mvwaddch(middeer1,1,3,(chtype)'(');
-       mvwaddch(middeer1,1,4,(chtype)'=');
-       mvwaddch(middeer1,1,5,(chtype)')');
-       mvwaddch(middeer1,1,6,(chtype)'~');
-       mvwaddch(middeer1,2,3,(chtype)'\\');
-       mvwaddch(middeer1,2,4,(chtype)'/');
-
-       /* middeer2 */
-       mvwaddch(middeer2,0,2,(chtype)'y');
-       mvwaddch(middeer2,0,3,(chtype)'y');
-       mvwaddch(middeer2,1,2,(chtype)'0');
-       mvwaddch(middeer2,1,3,(chtype)'(');
-       mvwaddch(middeer2,1,4,(chtype)'=');
-       mvwaddch(middeer2,1,5,(chtype)')');
-       mvwaddch(middeer2,1,6,(chtype)'~');
-       mvwaddch(middeer2,2,3,(chtype)'|');
-       mvwaddch(middeer2,2,5,(chtype)'|');
-
-       /* middeer3 */
-       mvwaddch(middeer3,0,2,(chtype)'y');
-       mvwaddch(middeer3,0,3,(chtype)'y');
-       mvwaddch(middeer3,1,2,(chtype)'0');
-       mvwaddch(middeer3,1,3,(chtype)'(');
-       mvwaddch(middeer3,1,4,(chtype)'=');
-       mvwaddch(middeer3,1,5,(chtype)')');
-       mvwaddch(middeer3,1,6,(chtype)'~');
-       mvwaddch(middeer3,2,2,(chtype)'/');
-       mvwaddch(middeer3,2,6,(chtype)'\\');
-
-
-       /* bigdeer1 */
-       mvwaddch(bigdeer1,0,17,(chtype)'\\');
-       mvwaddch(bigdeer1,0,18,(chtype)'/');
-       mvwaddch(bigdeer1,0,20,(chtype)'\\');
-       mvwaddch(bigdeer1,0,21,(chtype)'/');
-       mvwaddch(bigdeer1,1,18,(chtype)'\\');
-       mvwaddch(bigdeer1,1,20,(chtype)'/');
-       mvwaddch(bigdeer1,2,19,(chtype)'|');
-       mvwaddch(bigdeer1,2,20,(chtype)'_');
-       mvwaddch(bigdeer1,3,18,(chtype)'/');
-       mvwaddch(bigdeer1,3,19,(chtype)'^');
-       mvwaddch(bigdeer1,3,20,(chtype)'0');
-       mvwaddch(bigdeer1,3,21,(chtype)'\\');
-       mvwaddch(bigdeer1,4,17,(chtype)'/');
-       mvwaddch(bigdeer1,4,18,(chtype)'/');
-       mvwaddch(bigdeer1,4,19,(chtype)'\\');
-       mvwaddch(bigdeer1,4,22,(chtype)'\\');
-       mvwaddstr(bigdeer1,5,7,"^~~~~~~~~//  ~~U");
-       mvwaddstr(bigdeer1,6,7,"( \\_____( /");
-       mvwaddstr(bigdeer1,7,8,"( )    /");
-       mvwaddstr(bigdeer1,8,9,"\\\\   /");
-       mvwaddstr(bigdeer1,9,11,"\\>/>");
-
-       /* bigdeer2 */
-       mvwaddch(bigdeer2,0,17,(chtype)'\\');
-       mvwaddch(bigdeer2,0,18,(chtype)'/');
-       mvwaddch(bigdeer2,0,20,(chtype)'\\');
-       mvwaddch(bigdeer2,0,21,(chtype)'/');
-       mvwaddch(bigdeer2,1,18,(chtype)'\\');
-       mvwaddch(bigdeer2,1,20,(chtype)'/');
-       mvwaddch(bigdeer2,2,19,(chtype)'|');
-       mvwaddch(bigdeer2,2,20,(chtype)'_');
-       mvwaddch(bigdeer2,3,18,(chtype)'/');
-       mvwaddch(bigdeer2,3,19,(chtype)'^');
-       mvwaddch(bigdeer2,3,20,(chtype)'0');
-       mvwaddch(bigdeer2,3,21,(chtype)'\\');
-       mvwaddch(bigdeer2,4,17,(chtype)'/');
-       mvwaddch(bigdeer2,4,18,(chtype)'/');
-       mvwaddch(bigdeer2,4,19,(chtype)'\\');
-       mvwaddch(bigdeer2,4,22,(chtype)'\\');
-       mvwaddstr(bigdeer2,5,7,"^~~~~~~~~//  ~~U");
-       mvwaddstr(bigdeer2,6,7,"(( )____( /");
-       mvwaddstr(bigdeer2,7,7,"( /      |");
-       mvwaddstr(bigdeer2,8,8,"\\/      |");
-       mvwaddstr(bigdeer2,9,9,"|>     |>");
-
-       /* bigdeer3 */
-       mvwaddch(bigdeer3,0,17,(chtype)'\\');
-       mvwaddch(bigdeer3,0,18,(chtype)'/');
-       mvwaddch(bigdeer3,0,20,(chtype)'\\');
-       mvwaddch(bigdeer3,0,21,(chtype)'/');
-       mvwaddch(bigdeer3,1,18,(chtype)'\\');
-       mvwaddch(bigdeer3,1,20,(chtype)'/');
-       mvwaddch(bigdeer3,2,19,(chtype)'|');
-       mvwaddch(bigdeer3,2,20,(chtype)'_');
-       mvwaddch(bigdeer3,3,18,(chtype)'/');
-       mvwaddch(bigdeer3,3,19,(chtype)'^');
-       mvwaddch(bigdeer3,3,20,(chtype)'0');
-       mvwaddch(bigdeer3,3,21,(chtype)'\\');
-       mvwaddch(bigdeer3,4,17,(chtype)'/');
-       mvwaddch(bigdeer3,4,18,(chtype)'/');
-       mvwaddch(bigdeer3,4,19,(chtype)'\\');
-       mvwaddch(bigdeer3,4,22,(chtype)'\\');
-       mvwaddstr(bigdeer3,5,7,"^~~~~~~~~//  ~~U");
-       mvwaddstr(bigdeer3,6,6,"( ()_____( /");
-       mvwaddstr(bigdeer3,7,6,"/ /       /");
-       mvwaddstr(bigdeer3,8,5,"|/          \\");
-       mvwaddstr(bigdeer3,9,5,"/>           \\>");
-
-       /* bigdeer4 */
-       mvwaddch(bigdeer4,0,17,(chtype)'\\');
-       mvwaddch(bigdeer4,0,18,(chtype)'/');
-       mvwaddch(bigdeer4,0,20,(chtype)'\\');
-       mvwaddch(bigdeer4,0,21,(chtype)'/');
-       mvwaddch(bigdeer4,1,18,(chtype)'\\');
-       mvwaddch(bigdeer4,1,20,(chtype)'/');
-       mvwaddch(bigdeer4,2,19,(chtype)'|');
-       mvwaddch(bigdeer4,2,20,(chtype)'_');
-       mvwaddch(bigdeer4,3,18,(chtype)'/');
-       mvwaddch(bigdeer4,3,19,(chtype)'^');
-       mvwaddch(bigdeer4,3,20,(chtype)'0');
-       mvwaddch(bigdeer4,3,21,(chtype)'\\');
-       mvwaddch(bigdeer4,4,17,(chtype)'/');
-       mvwaddch(bigdeer4,4,18,(chtype)'/');
-       mvwaddch(bigdeer4,4,19,(chtype)'\\');
-       mvwaddch(bigdeer4,4,22,(chtype)'\\');
-       mvwaddstr(bigdeer4,5,7,"^~~~~~~~~//  ~~U");
-       mvwaddstr(bigdeer4,6,6,"( )______( /");
-       mvwaddstr(bigdeer4,7,5,"(/          \\");
-       mvwaddstr(bigdeer4,8,0,"v___=             ----^");
-
-
-       /* lookdeer1 */
-       mvwaddstr(lookdeer1,0,16,"\\/     \\/");
-       mvwaddstr(lookdeer1,1,17,"\\Y/ \\Y/");
-       mvwaddstr(lookdeer1,2,19,"\\=/");
-       mvwaddstr(lookdeer1,3,17,"^\\o o/^");
-       mvwaddstr(lookdeer1,4,17,"//( )");
-       mvwaddstr(lookdeer1,5,7,"^~~~~~~~~// \\O/");
-       mvwaddstr(lookdeer1,6,7,"( \\_____( /");
-       mvwaddstr(lookdeer1,7,8,"( )    /");
-       mvwaddstr(lookdeer1,8,9,"\\\\   /");
-       mvwaddstr(lookdeer1,9,11,"\\>/>");
-
-       /* lookdeer2 */
-       mvwaddstr(lookdeer2,0,16,"\\/     \\/");
-       mvwaddstr(lookdeer2,1,17,"\\Y/ \\Y/");
-       mvwaddstr(lookdeer2,2,19,"\\=/");
-       mvwaddstr(lookdeer2,3,17,"^\\o o/^");
-       mvwaddstr(lookdeer2,4,17,"//( )");
-       mvwaddstr(lookdeer2,5,7,"^~~~~~~~~// \\O/");
-       mvwaddstr(lookdeer2,6,7,"(( )____( /");
-       mvwaddstr(lookdeer2,7,7,"( /      |");
-       mvwaddstr(lookdeer2,8,8,"\\/      |");
-       mvwaddstr(lookdeer2,9,9,"|>     |>");
-
-       /* lookdeer3 */
-       mvwaddstr(lookdeer3,0,16,"\\/     \\/");
-       mvwaddstr(lookdeer3,1,17,"\\Y/ \\Y/");
-       mvwaddstr(lookdeer3,2,19,"\\=/");
-       mvwaddstr(lookdeer3,3,17,"^\\o o/^");
-       mvwaddstr(lookdeer3,4,17,"//( )");
-       mvwaddstr(lookdeer3,5,7,"^~~~~~~~~// \\O/");
-       mvwaddstr(lookdeer3,6,6,"( ()_____( /");
-       mvwaddstr(lookdeer3,7,6,"/ /       /");
-       mvwaddstr(lookdeer3,8,5,"|/          \\");
-       mvwaddstr(lookdeer3,9,5,"/>           \\>");
-
-       /* lookdeer4 */
-       mvwaddstr(lookdeer4,0,16,"\\/     \\/");
-       mvwaddstr(lookdeer4,1,17,"\\Y/ \\Y/");
-       mvwaddstr(lookdeer4,2,19,"\\=/");
-       mvwaddstr(lookdeer4,3,17,"^\\o o/^");
-       mvwaddstr(lookdeer4,4,17,"//( )");
-       mvwaddstr(lookdeer4,5,7,"^~~~~~~~~// \\O/");
-       mvwaddstr(lookdeer4,6,6,"( )______( /");
-       mvwaddstr(lookdeer4,7,5,"(/          \\");
-       mvwaddstr(lookdeer4,8,0,"v___=             ----^");
-
-
-
-       /***********************************************/
-       cbreak();
-       nodelay(stdscr,TRUE);
-       do {
-         clear();
-         werase(treescrn);
-         touchwin(w_del_msg);
-         touchwin(treescrn);
-         werase(treescrn2);
-         touchwin(treescrn2);
-         werase(treescrn8);
-         touchwin(treescrn8);
-         refresh();
-         napms(150);
-         boxit();
-         refresh();
-         napms(150);
-         seas();
-         refresh();
-         napms(150);
-         greet();
-         refresh();
-         napms(150);
-         fromwho();
-         refresh();
-         napms(150);
-         tree();
-         napms(150);
-         balls();
-         napms(150);
-         star();
-         napms(150);
-         strng1();
-         strng2();
-         strng3();
-         strng4();
-         strng5();
-
-
-       /* set up the windows for our blinking trees */
-       /* **************************************** */
-       /* treescrn3 */
-
-          overlay(treescrn, treescrn3);
-
-          /*balls*/
-          mvwaddch(treescrn3, 4, 18, ' ');
-          mvwaddch(treescrn3, 7, 6, ' ');
-          mvwaddch(treescrn3, 8, 19, ' ');
-          mvwaddch(treescrn3, 11, 22, ' ');
-
-          /*star*/
-          mvwaddch(treescrn3, 0, 12, '*');
-
-          /*strng1*/
-          mvwaddch(treescrn3, 3, 11, ' ');
-
-          /*strng2*/
-          mvwaddch(treescrn3, 5, 13, ' ');
-          mvwaddch(treescrn3, 6, 10, ' ');
-
-          /*strng3*/
-          mvwaddch(treescrn3, 7, 16, ' ');
-          mvwaddch(treescrn3, 7, 14, ' ');
-
-                  /*strng4*/
-          mvwaddch(treescrn3, 10, 13, ' ');
-          mvwaddch(treescrn3, 10, 10, ' ');
-          mvwaddch(treescrn3, 11, 8, ' ');
-
-                  /*strng5*/
-          mvwaddch(treescrn3, 11, 18, ' ');
-          mvwaddch(treescrn3, 12, 13, ' ');
-
-
-       /* treescrn4 */
-
-          overlay(treescrn, treescrn4);
-
-          /*balls*/
-          mvwaddch(treescrn4, 3, 9, ' ');
-          mvwaddch(treescrn4, 4, 16, ' ');
-          mvwaddch(treescrn4, 7, 6, ' ');
-          mvwaddch(treescrn4, 8, 19, ' ');
-          mvwaddch(treescrn4, 11, 2, ' ');
-          mvwaddch(treescrn4, 12, 23, ' ');
-
-          /*star*/
-          wstandout(treescrn4);
-          mvwaddch(treescrn4, 0, 12, '*');
-          wstandend(treescrn4);
-
-          /*strng1*/
-          mvwaddch(treescrn4, 3, 13, ' ');
-
-          /*strng2*/
-
-          /*strng3*/
-          mvwaddch(treescrn4, 7, 15, ' ');
-          mvwaddch(treescrn4, 8, 11, ' ');
-
-          /*strng4*/
-          mvwaddch(treescrn4, 9, 16, ' ');
-          mvwaddch(treescrn4, 10, 12, ' ');
-          mvwaddch(treescrn4, 11, 8, ' ');
-
-          /*strng5*/
-          mvwaddch(treescrn4, 11, 18, ' ');
-          mvwaddch(treescrn4, 12, 14, ' ');
-
-
-       /* treescrn5 */
-
-          overlay(treescrn, treescrn5);
-
-          /*balls*/
-          mvwaddch(treescrn5, 3, 15, ' ');
-          mvwaddch(treescrn5, 10, 20, ' ');
-          mvwaddch(treescrn5, 12, 1, ' ');
-
-          /*star*/
-          mvwaddch(treescrn5, 0, 12, '*');
-
-          /*strng1*/
-          mvwaddch(treescrn5, 3, 11, ' ');
-
-          /*strng2*/
-          mvwaddch(treescrn5, 5, 12, ' ');
-
-          /*strng3*/
-          mvwaddch(treescrn5, 7, 14, ' ');
-          mvwaddch(treescrn5, 8, 10, ' ');
-
-          /*strng4*/
-          mvwaddch(treescrn5, 9, 15, ' ');
-          mvwaddch(treescrn5, 10, 11, ' ');
-          mvwaddch(treescrn5, 11, 7, ' ');
-
-          /*strng5*/
-          mvwaddch(treescrn5, 11, 17, ' ');
-          mvwaddch(treescrn5, 12, 13, ' ');
-
-       /* treescrn6 */
-
-          overlay(treescrn, treescrn6);
-
-          /*balls*/
-          mvwaddch(treescrn6, 6, 7, ' ');
-          mvwaddch(treescrn6, 7, 18, ' ');
-          mvwaddch(treescrn6, 10, 4, ' ');
-          mvwaddch(treescrn6, 11, 23, ' ');
-
-          /*star*/
-          wstandout(treescrn6);
-          mvwaddch(treescrn6, 0, 12, '*');
-          wstandend(treescrn6);
-
-          /*strng1*/
-
-          /*strng2*/
-          mvwaddch(treescrn6, 5, 11, ' ');
-
-          /*strng3*/
-          mvwaddch(treescrn6, 7, 13, ' ');
-          mvwaddch(treescrn6, 8, 9, ' ');
-
-          /*strng4*/
-          mvwaddch(treescrn6, 9, 14, ' ');
-          mvwaddch(treescrn6, 10, 10, ' ');
-          mvwaddch(treescrn6, 11, 6, ' ');
-
-          /*strng5*/
-          mvwaddch(treescrn6, 11, 16, ' ');
-          mvwaddch(treescrn6, 12, 12, ' ');
+static WINDOW *treescrn;
+static WINDOW *treescrn2;
+static WINDOW *treescrn3;
+static WINDOW *treescrn4;
+static WINDOW *treescrn5;
+static WINDOW *treescrn6;
+static WINDOW *treescrn7;
+static WINDOW *treescrn8;
+static WINDOW *dotdeer0;
+static WINDOW *stardeer0;
+static WINDOW *lildeer0;
+static WINDOW *lildeer1;
+static WINDOW *lildeer2;
+static WINDOW *lildeer3;
+static WINDOW *middeer0;
+static WINDOW *middeer1;
+static WINDOW *middeer2;
+static WINDOW *middeer3;
+static WINDOW *bigdeer0;
+static WINDOW *bigdeer1;
+static WINDOW *bigdeer2;
+static WINDOW *bigdeer3;
+static WINDOW *bigdeer4;
+static WINDOW *lookdeer0;
+static WINDOW *lookdeer1;
+static WINDOW *lookdeer2;
+static WINDOW *lookdeer3;
+static WINDOW *lookdeer4;
+static WINDOW *w_holiday;
+static WINDOW *w_del_msg;
+static bool *my_pairs;
+
+static void done(int sig) GCC_NORETURN;
 
-       /* treescrn7 */
-
-          overlay(treescrn, treescrn7);
-
-          /*balls*/
-          mvwaddch(treescrn7, 3, 15, ' ');
-          mvwaddch(treescrn7, 6, 7, ' ');
-          mvwaddch(treescrn7, 7, 18, ' ');
-          mvwaddch(treescrn7, 10, 4, ' ');
-          mvwaddch(treescrn7, 11, 22, ' ');
-
-          /*star*/
-          mvwaddch(treescrn7, 0, 12, '*');
-
-          /*strng1*/
-          mvwaddch(treescrn7, 3, 12, ' ');
-
-          /*strng2*/
-          mvwaddch(treescrn7, 5, 13, ' ');
-          mvwaddch(treescrn7, 6, 9, ' ');
-
-          /*strng3*/
-          mvwaddch(treescrn7, 7, 15, ' ');
-          mvwaddch(treescrn7, 8, 11, ' ');
-
-          /*strng4*/
-          mvwaddch(treescrn7, 9, 16, ' ');
-          mvwaddch(treescrn7, 10, 12, ' ');
-          mvwaddch(treescrn7, 11, 8, ' ');
-
-          /*strng5*/
-          mvwaddch(treescrn7, 11, 18, ' ');
-          mvwaddch(treescrn7, 12, 14, ' ');
-
-
-          napms(150);
-          reindeer();
-
-          touchwin(w_holiday);
-          wrefresh(w_holiday);
-          wrefresh(w_del_msg);
-
-          napms(500);
-          for(loopy = 0;loopy < 100;loopy++) {
-               blinkit();
-          }
+static void
+set_color(WINDOW *win, chtype color)
+{
+    if (has_colors()) {
+       int n = (int) (color + 1);
+       if (my_pairs == 0)
+           my_pairs = typeCalloc(bool, (size_t) (COLORS + 1));
+       if (!my_pairs[n]) {
+           init_pair((short) n, (short) color, (short) my_bg);
+           my_pairs[n] = TRUE;
+       }
+       wattroff(win, A_COLOR);
+       wattron(win, COLOR_PAIR(n));
+    }
+}
 
-#ifdef NOLOOP
-          done(0);
-#endif
+static void
+unset_color(WINDOW *win)
+{
+    if (has_colors())
+       (void) wattrset(win, COLOR_PAIR(0));
+}
 
-       }
-       while(getch() == (ERR));
-/*  while(!typeahead(stdin));*/
+static void
+look_out(int msecs)
+{
+    napms(msecs);
+    if (getch() != ERR) {
+       beep();
        done(0);
-       /*NOTREACHED*/
+    }
 }
 
-static int boxit(void)
+static int
+boxit(void)
 {
- int x = 0;
   int x = 0;
 
-       while(x < 20) {
-         mvaddch(x, 7, '|');
-         ++x;
-       }
+    while (x < 20) {
+       MvAddCh(x, 7, '|');
+       ++x;
+    }
 
-       x = 8;
+    x = 8;
 
-       while(x < 80) {
-         mvaddch(19, x, '_');
-         ++x;
-       }
+    while (x < 80) {
+       MvAddCh(19, x, '_');
+       ++x;
+    }
 
-       x = 0;
+    x = 0;
 
-       while(x < 80) {
-         mvaddch(22, x, '_');
-         ++x;
-       }
+    while (x < 80) {
+       MvAddCh(22, x, '_');
+       ++x;
+    }
 
-       return( 0 );
+    return (0);
 }
 
-static int seas(void)
+static int
+seas(void)
 {
-       mvaddch(4, 1, 'S');
-       mvaddch(6, 1, 'E');
-       mvaddch(8, 1, 'A');
-       mvaddch(10, 1, 'S');
-       mvaddch(12, 1, 'O');
-       mvaddch(14, 1, 'N');
-       mvaddch(16, 1, '`');
-       mvaddch(18, 1, 'S');
-
-       return( 0 );
+    MvAddCh(4, 1, 'S');
+    MvAddCh(6, 1, 'E');
+    MvAddCh(8, 1, 'A');
+    MvAddCh(10, 1, 'S');
+    MvAddCh(12, 1, 'O');
+    MvAddCh(14, 1, 'N');
+    MvAddCh(16, 1, '`');
+    MvAddCh(18, 1, 'S');
+
+    return (0);
 }
 
-
-static int greet(void)
+static int
+greet(void)
 {
-       mvaddch(3, 5, 'G');
-       mvaddch(5, 5, 'R');
-       mvaddch(7, 5, 'E');
-       mvaddch(9, 5, 'E');
-       mvaddch(11, 5, 'T');
-       mvaddch(13, 5, 'I');
-       mvaddch(15, 5, 'N');
-       mvaddch(17, 5, 'G');
-       mvaddch(19, 5, 'S');
-
-       return( 0 );
+    MvAddCh(3, 5, 'G');
+    MvAddCh(5, 5, 'R');
+    MvAddCh(7, 5, 'E');
+    MvAddCh(9, 5, 'E');
+    MvAddCh(11, 5, 'T');
+    MvAddCh(13, 5, 'I');
+    MvAddCh(15, 5, 'N');
+    MvAddCh(17, 5, 'G');
+    MvAddCh(19, 5, 'S');
+
+    return (0);
 }
 
-
-static int fromwho(void)
+static int
+fromwho(void)
 {
-       mvaddstr(21, 13, FROMWHO);
-       return( 0 );
+    MvAddStr(21, 13, FROMWHO);
+    return (0);
 }
 
-static int tree(void)
+static int
+tree(void)
 {
-       mvwaddch(treescrn, 1, 11, (chtype)'/');
-       mvwaddch(treescrn, 2, 11, (chtype)'/');
-       mvwaddch(treescrn, 3, 10, (chtype)'/');
-       mvwaddch(treescrn, 4, 9, (chtype)'/');
-       mvwaddch(treescrn, 5, 9, (chtype)'/');
-       mvwaddch(treescrn, 6, 8, (chtype)'/');
-       mvwaddch(treescrn, 7, 7, (chtype)'/');
-       mvwaddch(treescrn, 8, 6, (chtype)'/');
-       mvwaddch(treescrn, 9, 6, (chtype)'/');
-       mvwaddch(treescrn, 10, 5, (chtype)'/');
-       mvwaddch(treescrn, 11, 3, (chtype)'/');
-       mvwaddch(treescrn, 12, 2, (chtype)'/');
-
-       mvwaddch(treescrn, 1, 13, (chtype)'\\');
-       mvwaddch(treescrn, 2, 13, (chtype)'\\');
-       mvwaddch(treescrn, 3, 14, (chtype)'\\');
-       mvwaddch(treescrn, 4, 15, (chtype)'\\');
-       mvwaddch(treescrn, 5, 15, (chtype)'\\');
-       mvwaddch(treescrn, 6, 16, (chtype)'\\');
-       mvwaddch(treescrn, 7, 17, (chtype)'\\');
-       mvwaddch(treescrn, 8, 18, (chtype)'\\');
-       mvwaddch(treescrn, 9, 18, (chtype)'\\');
-       mvwaddch(treescrn, 10, 19, (chtype)'\\');
-       mvwaddch(treescrn, 11, 21, (chtype)'\\');
-       mvwaddch(treescrn, 12, 22, (chtype)'\\');
-
-       mvwaddch(treescrn, 4, 10, (chtype)'_');
-       mvwaddch(treescrn, 4, 14, (chtype)'_');
-       mvwaddch(treescrn, 8, 7, (chtype)'_');
-       mvwaddch(treescrn, 8, 17, (chtype)'_');
-
-       mvwaddstr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\");
-
-       mvwaddstr(treescrn, 14, 11, "| |");
-       mvwaddstr(treescrn, 15, 11, "|_|");
-
-       wrefresh(treescrn);
-       wrefresh(w_del_msg);
-
-       return( 0 );
+    set_color(treescrn, COLOR_GREEN);
+    MvWAddCh(treescrn, 1, 11, (chtype) '/');
+    MvWAddCh(treescrn, 2, 11, (chtype) '/');
+    MvWAddCh(treescrn, 3, 10, (chtype) '/');
+    MvWAddCh(treescrn, 4, 9, (chtype) '/');
+    MvWAddCh(treescrn, 5, 9, (chtype) '/');
+    MvWAddCh(treescrn, 6, 8, (chtype) '/');
+    MvWAddCh(treescrn, 7, 7, (chtype) '/');
+    MvWAddCh(treescrn, 8, 6, (chtype) '/');
+    MvWAddCh(treescrn, 9, 6, (chtype) '/');
+    MvWAddCh(treescrn, 10, 5, (chtype) '/');
+    MvWAddCh(treescrn, 11, 3, (chtype) '/');
+    MvWAddCh(treescrn, 12, 2, (chtype) '/');
+
+    MvWAddCh(treescrn, 1, 13, (chtype) '\\');
+    MvWAddCh(treescrn, 2, 13, (chtype) '\\');
+    MvWAddCh(treescrn, 3, 14, (chtype) '\\');
+    MvWAddCh(treescrn, 4, 15, (chtype) '\\');
+    MvWAddCh(treescrn, 5, 15, (chtype) '\\');
+    MvWAddCh(treescrn, 6, 16, (chtype) '\\');
+    MvWAddCh(treescrn, 7, 17, (chtype) '\\');
+    MvWAddCh(treescrn, 8, 18, (chtype) '\\');
+    MvWAddCh(treescrn, 9, 18, (chtype) '\\');
+    MvWAddCh(treescrn, 10, 19, (chtype) '\\');
+    MvWAddCh(treescrn, 11, 21, (chtype) '\\');
+    MvWAddCh(treescrn, 12, 22, (chtype) '\\');
+
+    MvWAddCh(treescrn, 4, 10, (chtype) '_');
+    MvWAddCh(treescrn, 4, 14, (chtype) '_');
+    MvWAddCh(treescrn, 8, 7, (chtype) '_');
+    MvWAddCh(treescrn, 8, 17, (chtype) '_');
+
+    MvWAddStr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\");
+
+    MvWAddStr(treescrn, 14, 11, "| |");
+    MvWAddStr(treescrn, 15, 11, "|_|");
+
+    unset_color(treescrn);
+    wrefresh(treescrn);
+    wrefresh(w_del_msg);
+
+    return (0);
 }
 
-
-static int balls(void)
+static int
+balls(void)
 {
-
-       overlay(treescrn, treescrn2);
-
-       mvwaddch(treescrn2, 3, 9, (chtype)'@');
-       mvwaddch(treescrn2, 3, 15, (chtype)'@');
-       mvwaddch(treescrn2, 4, 8, (chtype)'@');
-       mvwaddch(treescrn2, 4, 16, (chtype)'@');
-       mvwaddch(treescrn2, 5, 7, (chtype)'@');
-       mvwaddch(treescrn2, 5, 17, (chtype)'@');
-       mvwaddch(treescrn2, 7, 6, (chtype)'@');
-       mvwaddch(treescrn2, 7, 18, (chtype)'@');
-       mvwaddch(treescrn2, 8, 5, (chtype)'@');
-       mvwaddch(treescrn2, 8, 19, (chtype)'@');
-       mvwaddch(treescrn2, 10, 4, (chtype)'@');
-       mvwaddch(treescrn2, 10, 20, (chtype)'@');
-       mvwaddch(treescrn2, 11, 2, (chtype)'@');
-       mvwaddch(treescrn2, 11, 22, (chtype)'@');
-       mvwaddch(treescrn2, 12, 1, (chtype)'@');
-       mvwaddch(treescrn2, 12, 23, (chtype)'@');
-
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
+    overlay(treescrn, treescrn2);
+
+    set_color(treescrn2, COLOR_BLUE);
+    MvWAddCh(treescrn2, 3, 9, (chtype) '@');
+    MvWAddCh(treescrn2, 3, 15, (chtype) '@');
+    MvWAddCh(treescrn2, 4, 8, (chtype) '@');
+    MvWAddCh(treescrn2, 4, 16, (chtype) '@');
+    MvWAddCh(treescrn2, 5, 7, (chtype) '@');
+    MvWAddCh(treescrn2, 5, 17, (chtype) '@');
+    MvWAddCh(treescrn2, 7, 6, (chtype) '@');
+    MvWAddCh(treescrn2, 7, 18, (chtype) '@');
+    MvWAddCh(treescrn2, 8, 5, (chtype) '@');
+    MvWAddCh(treescrn2, 8, 19, (chtype) '@');
+    MvWAddCh(treescrn2, 10, 4, (chtype) '@');
+    MvWAddCh(treescrn2, 10, 20, (chtype) '@');
+    MvWAddCh(treescrn2, 11, 2, (chtype) '@');
+    MvWAddCh(treescrn2, 11, 22, (chtype) '@');
+    MvWAddCh(treescrn2, 12, 1, (chtype) '@');
+    MvWAddCh(treescrn2, 12, 23, (chtype) '@');
+
+    unset_color(treescrn2);
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
 }
 
-
-static int star(void)
+static int
+star(void)
 {
-       wstandout(treescrn2);
-       mvwaddch(treescrn2, 0, 12, (chtype)'*');
-       wstandend(treescrn2);
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_YELLOW);
 
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
-}
+    MvWAddCh(treescrn2, 0, 12, (chtype) '*');
+    (void) wstandend(treescrn2);
 
+    unset_color(treescrn2);
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
+}
 
-static int strng1(void)
+static int
+strng1(void)
 {
-       mvwaddch(treescrn2, 3, 13, (chtype)'\'');
-       mvwaddch(treescrn2, 3, 12, (chtype)':');
-       mvwaddch(treescrn2, 3, 11, (chtype)'.');
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_WHITE);
 
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
-}
+    MvWAddCh(treescrn2, 3, 13, (chtype) '\'');
+    MvWAddCh(treescrn2, 3, 12, (chtype) ':');
+    MvWAddCh(treescrn2, 3, 11, (chtype) '.');
 
+    wattroff(treescrn2, A_BOLD | A_BLINK);
+    unset_color(treescrn2);
 
-static int strng2(void)
-{
-       mvwaddch(treescrn2, 5, 14, (chtype)'\'');
-       mvwaddch(treescrn2, 5, 13, (chtype)':');
-       mvwaddch(treescrn2, 5, 12, (chtype)'.');
-       mvwaddch(treescrn2, 5, 11, (chtype)',');
-       mvwaddch(treescrn2, 6, 10, (chtype)'\'');
-       mvwaddch(treescrn2, 6, 9, (chtype)':');
-
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
 }
 
-
-static int strng3(void)
+static int
+strng2(void)
 {
-       mvwaddch(treescrn2, 7, 16, (chtype)'\'');
-       mvwaddch(treescrn2, 7, 15, (chtype)':');
-       mvwaddch(treescrn2, 7, 14, (chtype)'.');
-       mvwaddch(treescrn2, 7, 13, (chtype)',');
-       mvwaddch(treescrn2, 8, 12, (chtype)'\'');
-       mvwaddch(treescrn2, 8, 11, (chtype)':');
-       mvwaddch(treescrn2, 8, 10, (chtype)'.');
-       mvwaddch(treescrn2, 8, 9, (chtype)',');
-
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_WHITE);
+
+    MvWAddCh(treescrn2, 5, 14, (chtype) '\'');
+    MvWAddCh(treescrn2, 5, 13, (chtype) ':');
+    MvWAddCh(treescrn2, 5, 12, (chtype) '.');
+    MvWAddCh(treescrn2, 5, 11, (chtype) ',');
+    MvWAddCh(treescrn2, 6, 10, (chtype) '\'');
+    MvWAddCh(treescrn2, 6, 9, (chtype) ':');
+
+    wattroff(treescrn2, A_BOLD | A_BLINK);
+    unset_color(treescrn2);
+
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
 }
 
-
-static int strng4(void)
+static int
+strng3(void)
 {
-       mvwaddch(treescrn2, 9, 17, (chtype)'\'');
-       mvwaddch(treescrn2, 9, 16, (chtype)':');
-       mvwaddch(treescrn2, 9, 15, (chtype)'.');
-       mvwaddch(treescrn2, 9, 14, (chtype)',');
-       mvwaddch(treescrn2, 10, 13, (chtype)'\'');
-       mvwaddch(treescrn2, 10, 12, (chtype)':');
-       mvwaddch(treescrn2, 10, 11, (chtype)'.');
-       mvwaddch(treescrn2, 10, 10, (chtype)',');
-       mvwaddch(treescrn2, 11, 9, (chtype)'\'');
-       mvwaddch(treescrn2, 11, 8, (chtype)':');
-       mvwaddch(treescrn2, 11, 7, (chtype)'.');
-       mvwaddch(treescrn2, 11, 6, (chtype)',');
-       mvwaddch(treescrn2, 12, 5, (chtype)'\'');
-
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_WHITE);
+
+    MvWAddCh(treescrn2, 7, 16, (chtype) '\'');
+    MvWAddCh(treescrn2, 7, 15, (chtype) ':');
+    MvWAddCh(treescrn2, 7, 14, (chtype) '.');
+    MvWAddCh(treescrn2, 7, 13, (chtype) ',');
+    MvWAddCh(treescrn2, 8, 12, (chtype) '\'');
+    MvWAddCh(treescrn2, 8, 11, (chtype) ':');
+    MvWAddCh(treescrn2, 8, 10, (chtype) '.');
+    MvWAddCh(treescrn2, 8, 9, (chtype) ',');
+
+    wattroff(treescrn2, A_BOLD | A_BLINK);
+    unset_color(treescrn2);
+
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
 }
 
-
-static int strng5(void)
+static int
+strng4(void)
 {
-       mvwaddch(treescrn2, 11, 19, (chtype)'\'');
-       mvwaddch(treescrn2, 11, 18, (chtype)':');
-       mvwaddch(treescrn2, 11, 17, (chtype)'.');
-       mvwaddch(treescrn2, 11, 16, (chtype)',');
-       mvwaddch(treescrn2, 12, 15, (chtype)'\'');
-       mvwaddch(treescrn2, 12, 14, (chtype)':');
-       mvwaddch(treescrn2, 12, 13, (chtype)'.');
-       mvwaddch(treescrn2, 12, 12, (chtype)',');
-
-       /* save a fully lit tree */
-       overlay(treescrn2, treescrn);
-
-       wrefresh(treescrn2);
-       wrefresh(w_del_msg);
-       return( 0 );
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_WHITE);
+
+    MvWAddCh(treescrn2, 9, 17, (chtype) '\'');
+    MvWAddCh(treescrn2, 9, 16, (chtype) ':');
+    MvWAddCh(treescrn2, 9, 15, (chtype) '.');
+    MvWAddCh(treescrn2, 9, 14, (chtype) ',');
+    MvWAddCh(treescrn2, 10, 13, (chtype) '\'');
+    MvWAddCh(treescrn2, 10, 12, (chtype) ':');
+    MvWAddCh(treescrn2, 10, 11, (chtype) '.');
+    MvWAddCh(treescrn2, 10, 10, (chtype) ',');
+    MvWAddCh(treescrn2, 11, 9, (chtype) '\'');
+    MvWAddCh(treescrn2, 11, 8, (chtype) ':');
+    MvWAddCh(treescrn2, 11, 7, (chtype) '.');
+    MvWAddCh(treescrn2, 11, 6, (chtype) ',');
+    MvWAddCh(treescrn2, 12, 5, (chtype) '\'');
+
+    wattroff(treescrn2, A_BOLD | A_BLINK);
+    unset_color(treescrn2);
+
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
 }
 
-
-
-static int blinkit(void)
+static int
+strng5(void)
 {
-static int cycle;
-
-       if(cycle > 4) {
-         cycle = 0;
-       }
-
-
-       touchwin(treescrn8);
-
-       switch(cycle) {
-         case 0:
-                    overlay(treescrn3, treescrn8);
-                    wrefresh(treescrn8);
-                    wrefresh(w_del_msg);
-                    break;
-         case 1:
-                    overlay(treescrn4, treescrn8);
-                    wrefresh(treescrn8);
-                    wrefresh(w_del_msg);
-                    break;
-         case 2:
-                    overlay(treescrn5, treescrn8);
-                    wrefresh(treescrn8);
-                    wrefresh(w_del_msg);
-                    break;
-         case 3:
-                    overlay(treescrn6, treescrn8);
-                    wrefresh(treescrn8);
-                    wrefresh(w_del_msg);
-                    break;
-         case 4:
-                    overlay(treescrn7, treescrn8);
-                    wrefresh(treescrn8);
-                    wrefresh(w_del_msg);
-                    break;
-       }
-        touchwin(treescrn8);
-
-        /*ALL ON***************************************************/
-
-        overlay(treescrn, treescrn8);
-        wrefresh(treescrn8);
-        wrefresh(w_del_msg);
+    (void) wattrset(treescrn2, A_BOLD | A_BLINK);
+    set_color(treescrn2, COLOR_WHITE);
+
+    MvWAddCh(treescrn2, 11, 19, (chtype) '\'');
+    MvWAddCh(treescrn2, 11, 18, (chtype) ':');
+    MvWAddCh(treescrn2, 11, 17, (chtype) '.');
+    MvWAddCh(treescrn2, 11, 16, (chtype) ',');
+    MvWAddCh(treescrn2, 12, 15, (chtype) '\'');
+    MvWAddCh(treescrn2, 12, 14, (chtype) ':');
+    MvWAddCh(treescrn2, 12, 13, (chtype) '.');
+    MvWAddCh(treescrn2, 12, 12, (chtype) ',');
+
+    wattroff(treescrn2, A_BOLD | A_BLINK);
+    unset_color(treescrn2);
+
+    /* save a fully lit tree */
+    overlay(treescrn2, treescrn);
+
+    wrefresh(treescrn2);
+    wrefresh(w_del_msg);
+    return (0);
+}
 
-       ++cycle;
-       return( 0 );
+static int
+blinkit(void)
+{
+    static int cycle;
+
+    if (cycle > 4) {
+       cycle = 0;
+    }
+
+    touchwin(treescrn8);
+
+    switch (cycle) {
+    case 0:
+       overlay(treescrn3, treescrn8);
+       break;
+    case 1:
+       overlay(treescrn4, treescrn8);
+       break;
+    case 2:
+       overlay(treescrn5, treescrn8);
+       break;
+    case 3:
+       overlay(treescrn6, treescrn8);
+       break;
+    case 4:
+       overlay(treescrn7, treescrn8);
+       break;
+    }
+    touchwin(treescrn8);
+    wrefresh(treescrn8);
+    wrefresh(w_del_msg);
+    look_out(50);
+
+    /*ALL ON************************************************** */
+
+    overlay(treescrn, treescrn8);
+    wrefresh(treescrn8);
+    wrefresh(w_del_msg);
+    look_out(50);
+
+    ++cycle;
+    return (0);
 }
 
 static void
 deer_step(WINDOW *win, int y, int x)
 {
-           mvwin(win, y, x);
-           wrefresh(win);
-           wrefresh(w_del_msg);
-           napms(5);
+    mvwin(win, y, x);
+    wrefresh(win);
+    wrefresh(w_del_msg);
+    look_out(5);
 }
 
-static int reindeer(void)
+static int
+reindeer(void)
 {
- int looper;
- y_pos = 0;
-
+    int looper;
+    y_pos = 0;
 
-       for(x_pos = 70; x_pos > 62; x_pos--) {
-         if(x_pos < 62) {
+    for (x_pos = 70; x_pos > 62; x_pos--) {
+       if (x_pos < 62) {
            y_pos = 1;
-         }
-         for(looper = 0; looper < 4; looper++) {
-           mvwaddch(dotdeer0, y_pos, x_pos, (chtype)'.');
+       }
+       for (looper = 0; looper < 4; looper++) {
+           MvWAddCh(dotdeer0, y_pos, x_pos, (chtype) '.');
            wrefresh(dotdeer0);
            wrefresh(w_del_msg);
            werase(dotdeer0);
            wrefresh(dotdeer0);
            wrefresh(w_del_msg);
-           napms(50);
-         }
+           look_out(50);
        }
+    }
 
-       y_pos = 2;
+    y_pos = 2;
 
-       for(; x_pos > 50; x_pos--) {
-         for(looper = 0; looper < 4; looper++) {
+    for (; x_pos > 50; x_pos--) {
+       for (looper = 0; looper < 4; looper++) {
 
-           if(x_pos < 56) {
-             y_pos = 3;
+           if (x_pos < 56) {
+               y_pos = 3;
 
-             mvwaddch(stardeer0, y_pos, x_pos, (chtype)'*');
-             wrefresh(stardeer0);
-             wrefresh(w_del_msg);
-             werase(stardeer0);
-             wrefresh(stardeer0);
-             wrefresh(w_del_msg);
+               MvWAddCh(stardeer0, y_pos, x_pos, (chtype) '*');
+               wrefresh(stardeer0);
+               wrefresh(w_del_msg);
+               werase(stardeer0);
+               wrefresh(stardeer0);
+               wrefresh(w_del_msg);
            } else {
-             mvwaddch(dotdeer0, y_pos, x_pos, (chtype)'*');
-             wrefresh(dotdeer0);
-             wrefresh(w_del_msg);
-             werase(dotdeer0);
-             wrefresh(dotdeer0);
-             wrefresh(w_del_msg);
+               MvWAddCh(dotdeer0, y_pos, x_pos, (chtype) '*');
+               wrefresh(dotdeer0);
+               wrefresh(w_del_msg);
+               werase(dotdeer0);
+               wrefresh(dotdeer0);
+               wrefresh(w_del_msg);
            }
-         }
        }
+    }
 
-       x_pos = 58;
+    x_pos = 58;
 
-       for(y_pos = 2; y_pos < 5; y_pos++) {
+    for (y_pos = 2; y_pos < 5; y_pos++) {
 
-         touchwin(lildeer0);
-         wrefresh(lildeer0);
-         wrefresh(w_del_msg);
+       touchwin(lildeer0);
+       wrefresh(lildeer0);
+       wrefresh(w_del_msg);
 
-         for(looper = 0; looper < 4; looper++) {
+       for (looper = 0; looper < 4; looper++) {
            deer_step(lildeer3, y_pos, x_pos);
            deer_step(lildeer2, y_pos, x_pos);
            deer_step(lildeer1, y_pos, x_pos);
@@ -979,19 +559,18 @@ static int reindeer(void)
            wrefresh(w_del_msg);
 
            x_pos -= 2;
-         }
        }
+    }
 
+    x_pos = 35;
 
-       x_pos = 35;
+    for (y_pos = 5; y_pos < 10; y_pos++) {
 
-       for(y_pos = 5; y_pos < 10; y_pos++) {
-
-         touchwin(middeer0);
-         wrefresh(middeer0);
-         wrefresh(w_del_msg);
+       touchwin(middeer0);
+       wrefresh(middeer0);
+       wrefresh(w_del_msg);
 
-         for(looper = 0; looper < 2; looper++) {
+       for (looper = 0; looper < 2; looper++) {
            deer_step(middeer3, y_pos, x_pos);
            deer_step(middeer2, y_pos, x_pos);
            deer_step(middeer1, y_pos, x_pos);
@@ -1003,40 +582,40 @@ static int reindeer(void)
            wrefresh(w_del_msg);
 
            x_pos -= 3;
-         }
        }
+    }
 
-       napms(300);
+    look_out(300);
 
-       y_pos = 1;
+    y_pos = 1;
 
-       for(x_pos = 8; x_pos < 16; x_pos++) {
-           deer_step(bigdeer4, y_pos, x_pos);
-           deer_step(bigdeer3, y_pos, x_pos);
-           deer_step(bigdeer2, y_pos, x_pos);
-           deer_step(bigdeer1, y_pos, x_pos);
-           deer_step(bigdeer2, y_pos, x_pos);
-           deer_step(bigdeer3, y_pos, x_pos);
-           deer_step(bigdeer4, y_pos, x_pos);
-           deer_step(bigdeer0, y_pos, x_pos);
-       }
+    for (x_pos = 8; x_pos < 16; x_pos++) {
+       deer_step(bigdeer4, y_pos, x_pos);
+       deer_step(bigdeer3, y_pos, x_pos);
+       deer_step(bigdeer2, y_pos, x_pos);
+       deer_step(bigdeer1, y_pos, x_pos);
+       deer_step(bigdeer2, y_pos, x_pos);
+       deer_step(bigdeer3, y_pos, x_pos);
+       deer_step(bigdeer4, y_pos, x_pos);
+       deer_step(bigdeer0, y_pos, x_pos);
+    }
 
-         --x_pos;
+    --x_pos;
 
-         for(looper = 0; looper < 6; looper++) {
-           deer_step(lookdeer4, y_pos, x_pos);
-           deer_step(lookdeer3, y_pos, x_pos);
-           deer_step(lookdeer2, y_pos, x_pos);
-           deer_step(lookdeer1, y_pos, x_pos);
-           deer_step(lookdeer2, y_pos, x_pos);
-           deer_step(lookdeer3, y_pos, x_pos);
-           deer_step(lookdeer4, y_pos, x_pos);
-         }
+    for (looper = 0; looper < 6; looper++) {
+       deer_step(lookdeer4, y_pos, x_pos);
+       deer_step(lookdeer3, y_pos, x_pos);
+       deer_step(lookdeer2, y_pos, x_pos);
+       deer_step(lookdeer1, y_pos, x_pos);
+       deer_step(lookdeer2, y_pos, x_pos);
+       deer_step(lookdeer3, y_pos, x_pos);
+       deer_step(lookdeer4, y_pos, x_pos);
+    }
 
-         deer_step(lookdeer0, y_pos, x_pos);
+    deer_step(lookdeer0, y_pos, x_pos);
 
-       for(; y_pos < 10; y_pos++) {
-         for(looper = 0; looper < 2; looper++) {
+    for (; y_pos < 10; y_pos++) {
+       for (looper = 0; looper < 2; looper++) {
            deer_step(bigdeer4, y_pos, x_pos);
            deer_step(bigdeer3, y_pos, x_pos);
            deer_step(bigdeer2, y_pos, x_pos);
@@ -1044,26 +623,552 @@ static int reindeer(void)
            deer_step(bigdeer2, y_pos, x_pos);
            deer_step(bigdeer3, y_pos, x_pos);
            deer_step(bigdeer4, y_pos, x_pos);
-         }
-         deer_step(bigdeer0, y_pos, x_pos);
        }
+       deer_step(bigdeer0, y_pos, x_pos);
+    }
 
-       --y_pos;
+    --y_pos;
 
-       deer_step(lookdeer3, y_pos, x_pos);
-       return( 0 );
+    deer_step(lookdeer3, y_pos, x_pos);
+    return (0);
+}
+
+static void
+done(int sig GCC_UNUSED)
+{
+    move(LINES - 1, 0);
+    refresh();
+    exit_curses();
+
+#if NO_LEAKS
+    if (my_pairs != 0)
+       free(my_pairs);
+#endif
+
+    ExitProgram(EXIT_SUCCESS);
+}
+
+static void
+usage(void)
+{
+    static const char *msg[] =
+    {
+       "Usage: xmas [options]"
+       ,""
+       ,"Options:"
+#if HAVE_USE_DEFAULT_COLORS
+       ," -d       invoke use_default_colors"
+#endif
+       ," -q       execute once, then quit"
+    };
+    size_t n;
+
+    for (n = 0; n < SIZEOF(msg); n++)
+       fprintf(stderr, "%s\n", msg[n]);
+
+    ExitProgram(EXIT_FAILURE);
 }
 
-static RETSIGTYPE done(int sig GCC_UNUSED)
+int
+main(int argc, char *argv[])
 {
-       signal(SIGINT,done);
-       signal(SIGTERM,done);
-#if !defined   DOS && !defined OS2
-       signal(SIGHUP,done);
-       signal(SIGQUIT,done);
+    int ch;
+    int loopy;
+#if HAVE_USE_DEFAULT_COLORS
+    bool opt_d = FALSE;
 #endif
+    bool opt_q = FALSE;
+
+    while ((ch = getopt(argc, argv, "dq")) != -1) {
+       switch (ch) {
+#if HAVE_USE_DEFAULT_COLORS
+       case 'd':
+           opt_d = TRUE;
+           break;
+#endif
+       case 'q':
+           opt_q = TRUE;
+           break;
+       default:
+           usage();
+           /* NOTREACHED */
+       }
+    }
+
+    setlocale(LC_ALL, "");
+
+    InitAndCatch(initscr(), done);
+    noecho();
+    nonl();
+    refresh();
+
+    if (has_colors()) {
+       start_color();
+#if HAVE_USE_DEFAULT_COLORS
+       if (opt_d && (use_default_colors() == OK))
+           my_bg = -1;
+#endif
+    }
+    curs_set(0);
+
+    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) {
+       exit_curses();
+       fprintf(stderr, "Cannot create windows - screen too small\n");
+       ExitProgram(EXIT_FAILURE);
+    }
+
+    MvWAddStr(w_del_msg, 0, 0, "Hit any key to quit");
+
+    MvWAddStr(w_holiday, 0, 0, "H A P P Y  H O L I D A Y S");
+
+    /* set up the windows for our various reindeer */
+
+    /* lildeer1 */
+    MvWAddCh(lildeer1, 0, 0, (chtype) 'V');
+    MvWAddCh(lildeer1, 1, 0, (chtype) '@');
+    MvWAddCh(lildeer1, 1, 1, (chtype) '<');
+    MvWAddCh(lildeer1, 1, 2, (chtype) '>');
+    MvWAddCh(lildeer1, 1, 3, (chtype) '~');
+
+    /* lildeer2 */
+    MvWAddCh(lildeer2, 0, 0, (chtype) 'V');
+    MvWAddCh(lildeer2, 1, 0, (chtype) '@');
+    MvWAddCh(lildeer2, 1, 1, (chtype) '|');
+    MvWAddCh(lildeer2, 1, 2, (chtype) '|');
+    MvWAddCh(lildeer2, 1, 3, (chtype) '~');
+
+    /* lildeer3 */
+    MvWAddCh(lildeer3, 0, 0, (chtype) 'V');
+    MvWAddCh(lildeer3, 1, 0, (chtype) '@');
+    MvWAddCh(lildeer3, 1, 1, (chtype) '>');
+    MvWAddCh(lildeer3, 1, 2, (chtype) '<');
+    MvWAddCh(lildeer2, 1, 3, (chtype) '~');
+
+    /* middeer1 */
+    MvWAddCh(middeer1, 0, 2, (chtype) 'y');
+    MvWAddCh(middeer1, 0, 3, (chtype) 'y');
+    MvWAddCh(middeer1, 1, 2, (chtype) '0');
+    MvWAddCh(middeer1, 1, 3, (chtype) '(');
+    MvWAddCh(middeer1, 1, 4, (chtype) '=');
+    MvWAddCh(middeer1, 1, 5, (chtype) ')');
+    MvWAddCh(middeer1, 1, 6, (chtype) '~');
+    MvWAddCh(middeer1, 2, 3, (chtype) '\\');
+    MvWAddCh(middeer1, 2, 4, (chtype) '/');
+
+    /* middeer2 */
+    MvWAddCh(middeer2, 0, 2, (chtype) 'y');
+    MvWAddCh(middeer2, 0, 3, (chtype) 'y');
+    MvWAddCh(middeer2, 1, 2, (chtype) '0');
+    MvWAddCh(middeer2, 1, 3, (chtype) '(');
+    MvWAddCh(middeer2, 1, 4, (chtype) '=');
+    MvWAddCh(middeer2, 1, 5, (chtype) ')');
+    MvWAddCh(middeer2, 1, 6, (chtype) '~');
+    MvWAddCh(middeer2, 2, 3, (chtype) '|');
+    MvWAddCh(middeer2, 2, 5, (chtype) '|');
+
+    /* middeer3 */
+    MvWAddCh(middeer3, 0, 2, (chtype) 'y');
+    MvWAddCh(middeer3, 0, 3, (chtype) 'y');
+    MvWAddCh(middeer3, 1, 2, (chtype) '0');
+    MvWAddCh(middeer3, 1, 3, (chtype) '(');
+    MvWAddCh(middeer3, 1, 4, (chtype) '=');
+    MvWAddCh(middeer3, 1, 5, (chtype) ')');
+    MvWAddCh(middeer3, 1, 6, (chtype) '~');
+    MvWAddCh(middeer3, 2, 2, (chtype) '/');
+    MvWAddCh(middeer3, 2, 6, (chtype) '\\');
+
+    /* bigdeer1 */
+    MvWAddCh(bigdeer1, 0, 17, (chtype) '\\');
+    MvWAddCh(bigdeer1, 0, 18, (chtype) '/');
+    MvWAddCh(bigdeer1, 0, 20, (chtype) '\\');
+    MvWAddCh(bigdeer1, 0, 21, (chtype) '/');
+    MvWAddCh(bigdeer1, 1, 18, (chtype) '\\');
+    MvWAddCh(bigdeer1, 1, 20, (chtype) '/');
+    MvWAddCh(bigdeer1, 2, 19, (chtype) '|');
+    MvWAddCh(bigdeer1, 2, 20, (chtype) '_');
+    MvWAddCh(bigdeer1, 3, 18, (chtype) '/');
+    MvWAddCh(bigdeer1, 3, 19, (chtype) '^');
+    MvWAddCh(bigdeer1, 3, 20, (chtype) '0');
+    MvWAddCh(bigdeer1, 3, 21, (chtype) '\\');
+    MvWAddCh(bigdeer1, 4, 17, (chtype) '/');
+    MvWAddCh(bigdeer1, 4, 18, (chtype) '/');
+    MvWAddCh(bigdeer1, 4, 19, (chtype) '\\');
+    MvWAddCh(bigdeer1, 4, 22, (chtype) '\\');
+    MvWAddStr(bigdeer1, 5, 7, "^~~~~~~~~//  ~~U");
+    MvWAddStr(bigdeer1, 6, 7, "( \\_____( /");
+    MvWAddStr(bigdeer1, 7, 8, "( )    /");
+    MvWAddStr(bigdeer1, 8, 9, "\\\\   /");
+    MvWAddStr(bigdeer1, 9, 11, "\\>/>");
+
+    /* bigdeer2 */
+    MvWAddCh(bigdeer2, 0, 17, (chtype) '\\');
+    MvWAddCh(bigdeer2, 0, 18, (chtype) '/');
+    MvWAddCh(bigdeer2, 0, 20, (chtype) '\\');
+    MvWAddCh(bigdeer2, 0, 21, (chtype) '/');
+    MvWAddCh(bigdeer2, 1, 18, (chtype) '\\');
+    MvWAddCh(bigdeer2, 1, 20, (chtype) '/');
+    MvWAddCh(bigdeer2, 2, 19, (chtype) '|');
+    MvWAddCh(bigdeer2, 2, 20, (chtype) '_');
+    MvWAddCh(bigdeer2, 3, 18, (chtype) '/');
+    MvWAddCh(bigdeer2, 3, 19, (chtype) '^');
+    MvWAddCh(bigdeer2, 3, 20, (chtype) '0');
+    MvWAddCh(bigdeer2, 3, 21, (chtype) '\\');
+    MvWAddCh(bigdeer2, 4, 17, (chtype) '/');
+    MvWAddCh(bigdeer2, 4, 18, (chtype) '/');
+    MvWAddCh(bigdeer2, 4, 19, (chtype) '\\');
+    MvWAddCh(bigdeer2, 4, 22, (chtype) '\\');
+    MvWAddStr(bigdeer2, 5, 7, "^~~~~~~~~//  ~~U");
+    MvWAddStr(bigdeer2, 6, 7, "(( )____( /");
+    MvWAddStr(bigdeer2, 7, 7, "( /      |");
+    MvWAddStr(bigdeer2, 8, 8, "\\/      |");
+    MvWAddStr(bigdeer2, 9, 9, "|>     |>");
+
+    /* bigdeer3 */
+    MvWAddCh(bigdeer3, 0, 17, (chtype) '\\');
+    MvWAddCh(bigdeer3, 0, 18, (chtype) '/');
+    MvWAddCh(bigdeer3, 0, 20, (chtype) '\\');
+    MvWAddCh(bigdeer3, 0, 21, (chtype) '/');
+    MvWAddCh(bigdeer3, 1, 18, (chtype) '\\');
+    MvWAddCh(bigdeer3, 1, 20, (chtype) '/');
+    MvWAddCh(bigdeer3, 2, 19, (chtype) '|');
+    MvWAddCh(bigdeer3, 2, 20, (chtype) '_');
+    MvWAddCh(bigdeer3, 3, 18, (chtype) '/');
+    MvWAddCh(bigdeer3, 3, 19, (chtype) '^');
+    MvWAddCh(bigdeer3, 3, 20, (chtype) '0');
+    MvWAddCh(bigdeer3, 3, 21, (chtype) '\\');
+    MvWAddCh(bigdeer3, 4, 17, (chtype) '/');
+    MvWAddCh(bigdeer3, 4, 18, (chtype) '/');
+    MvWAddCh(bigdeer3, 4, 19, (chtype) '\\');
+    MvWAddCh(bigdeer3, 4, 22, (chtype) '\\');
+    MvWAddStr(bigdeer3, 5, 7, "^~~~~~~~~//  ~~U");
+    MvWAddStr(bigdeer3, 6, 6, "( ()_____( /");
+    MvWAddStr(bigdeer3, 7, 6, "/ /       /");
+    MvWAddStr(bigdeer3, 8, 5, "|/          \\");
+    MvWAddStr(bigdeer3, 9, 5, "/>           \\>");
+
+    /* bigdeer4 */
+    MvWAddCh(bigdeer4, 0, 17, (chtype) '\\');
+    MvWAddCh(bigdeer4, 0, 18, (chtype) '/');
+    MvWAddCh(bigdeer4, 0, 20, (chtype) '\\');
+    MvWAddCh(bigdeer4, 0, 21, (chtype) '/');
+    MvWAddCh(bigdeer4, 1, 18, (chtype) '\\');
+    MvWAddCh(bigdeer4, 1, 20, (chtype) '/');
+    MvWAddCh(bigdeer4, 2, 19, (chtype) '|');
+    MvWAddCh(bigdeer4, 2, 20, (chtype) '_');
+    MvWAddCh(bigdeer4, 3, 18, (chtype) '/');
+    MvWAddCh(bigdeer4, 3, 19, (chtype) '^');
+    MvWAddCh(bigdeer4, 3, 20, (chtype) '0');
+    MvWAddCh(bigdeer4, 3, 21, (chtype) '\\');
+    MvWAddCh(bigdeer4, 4, 17, (chtype) '/');
+    MvWAddCh(bigdeer4, 4, 18, (chtype) '/');
+    MvWAddCh(bigdeer4, 4, 19, (chtype) '\\');
+    MvWAddCh(bigdeer4, 4, 22, (chtype) '\\');
+    MvWAddStr(bigdeer4, 5, 7, "^~~~~~~~~//  ~~U");
+    MvWAddStr(bigdeer4, 6, 6, "( )______( /");
+    MvWAddStr(bigdeer4, 7, 5, "(/          \\");
+    MvWAddStr(bigdeer4, 8, 0, "v___=             ----^");
+
+    /* lookdeer1 */
+    MvWAddStr(lookdeer1, 0, 16, "\\/     \\/");
+    MvWAddStr(lookdeer1, 1, 17, "\\Y/ \\Y/");
+    MvWAddStr(lookdeer1, 2, 19, "\\=/");
+    MvWAddStr(lookdeer1, 3, 17, "^\\o o/^");
+    MvWAddStr(lookdeer1, 4, 17, "//( )");
+    MvWAddStr(lookdeer1, 5, 7, "^~~~~~~~~// \\O/");
+    MvWAddStr(lookdeer1, 6, 7, "( \\_____( /");
+    MvWAddStr(lookdeer1, 7, 8, "( )    /");
+    MvWAddStr(lookdeer1, 8, 9, "\\\\   /");
+    MvWAddStr(lookdeer1, 9, 11, "\\>/>");
+
+    /* lookdeer2 */
+    MvWAddStr(lookdeer2, 0, 16, "\\/     \\/");
+    MvWAddStr(lookdeer2, 1, 17, "\\Y/ \\Y/");
+    MvWAddStr(lookdeer2, 2, 19, "\\=/");
+    MvWAddStr(lookdeer2, 3, 17, "^\\o o/^");
+    MvWAddStr(lookdeer2, 4, 17, "//( )");
+    MvWAddStr(lookdeer2, 5, 7, "^~~~~~~~~// \\O/");
+    MvWAddStr(lookdeer2, 6, 7, "(( )____( /");
+    MvWAddStr(lookdeer2, 7, 7, "( /      |");
+    MvWAddStr(lookdeer2, 8, 8, "\\/      |");
+    MvWAddStr(lookdeer2, 9, 9, "|>     |>");
+
+    /* lookdeer3 */
+    MvWAddStr(lookdeer3, 0, 16, "\\/     \\/");
+    MvWAddStr(lookdeer3, 1, 17, "\\Y/ \\Y/");
+    MvWAddStr(lookdeer3, 2, 19, "\\=/");
+    MvWAddStr(lookdeer3, 3, 17, "^\\o o/^");
+    MvWAddStr(lookdeer3, 4, 17, "//( )");
+    MvWAddStr(lookdeer3, 5, 7, "^~~~~~~~~// \\O/");
+    MvWAddStr(lookdeer3, 6, 6, "( ()_____( /");
+    MvWAddStr(lookdeer3, 7, 6, "/ /       /");
+    MvWAddStr(lookdeer3, 8, 5, "|/          \\");
+    MvWAddStr(lookdeer3, 9, 5, "/>           \\>");
+
+    /* lookdeer4 */
+    MvWAddStr(lookdeer4, 0, 16, "\\/     \\/");
+    MvWAddStr(lookdeer4, 1, 17, "\\Y/ \\Y/");
+    MvWAddStr(lookdeer4, 2, 19, "\\=/");
+    MvWAddStr(lookdeer4, 3, 17, "^\\o o/^");
+    MvWAddStr(lookdeer4, 4, 17, "//( )");
+    MvWAddStr(lookdeer4, 5, 7, "^~~~~~~~~// \\O/");
+    MvWAddStr(lookdeer4, 6, 6, "( )______( /");
+    MvWAddStr(lookdeer4, 7, 5, "(/          \\");
+    MvWAddStr(lookdeer4, 8, 0, "v___=             ----^");
+
+       /***********************************************/
+    cbreak();
+    nodelay(stdscr, TRUE);
+    do {
        clear();
+       werase(treescrn);
+       touchwin(w_del_msg);
+       touchwin(treescrn);
+       werase(treescrn2);
+       touchwin(treescrn2);
+       werase(treescrn8);
+       touchwin(treescrn8);
+       refresh();
+       look_out(150);
+       boxit();
        refresh();
-       endwin();
-       exit(EXIT_SUCCESS);
+       look_out(150);
+       seas();
+       refresh();
+       look_out(150);
+       greet();
+       refresh();
+       look_out(150);
+       fromwho();
+       refresh();
+       look_out(150);
+       tree();
+       look_out(150);
+       balls();
+       look_out(150);
+       star();
+       look_out(150);
+       strng1();
+       strng2();
+       strng3();
+       strng4();
+       strng5();
+
+       /* set up the windows for our blinking trees */
+       /* **************************************** */
+       /* treescrn3 */
+
+       overlay(treescrn, treescrn3);
+
+       /*balls */
+       MvWAddCh(treescrn3, 4, 18, ' ');
+       MvWAddCh(treescrn3, 7, 6, ' ');
+       MvWAddCh(treescrn3, 8, 19, ' ');
+       MvWAddCh(treescrn3, 11, 22, ' ');
+
+       /*star */
+       MvWAddCh(treescrn3, 0, 12, '*');
+
+       /*strng1 */
+       MvWAddCh(treescrn3, 3, 11, ' ');
+
+       /*strng2 */
+       MvWAddCh(treescrn3, 5, 13, ' ');
+       MvWAddCh(treescrn3, 6, 10, ' ');
+
+       /*strng3 */
+       MvWAddCh(treescrn3, 7, 16, ' ');
+       MvWAddCh(treescrn3, 7, 14, ' ');
+
+       /*strng4 */
+       MvWAddCh(treescrn3, 10, 13, ' ');
+       MvWAddCh(treescrn3, 10, 10, ' ');
+       MvWAddCh(treescrn3, 11, 8, ' ');
+
+       /*strng5 */
+       MvWAddCh(treescrn3, 11, 18, ' ');
+       MvWAddCh(treescrn3, 12, 13, ' ');
+
+       /* treescrn4 */
+
+       overlay(treescrn, treescrn4);
+
+       /*balls */
+       MvWAddCh(treescrn4, 3, 9, ' ');
+       MvWAddCh(treescrn4, 4, 16, ' ');
+       MvWAddCh(treescrn4, 7, 6, ' ');
+       MvWAddCh(treescrn4, 8, 19, ' ');
+       MvWAddCh(treescrn4, 11, 2, ' ');
+       MvWAddCh(treescrn4, 12, 23, ' ');
+
+       /*star */
+       (void) wstandout(treescrn4);
+       MvWAddCh(treescrn4, 0, 12, '*');
+       (void) wstandend(treescrn4);
+
+       /*strng1 */
+       MvWAddCh(treescrn4, 3, 13, ' ');
+
+       /*strng2 */
+
+       /*strng3 */
+       MvWAddCh(treescrn4, 7, 15, ' ');
+       MvWAddCh(treescrn4, 8, 11, ' ');
+
+       /*strng4 */
+       MvWAddCh(treescrn4, 9, 16, ' ');
+       MvWAddCh(treescrn4, 10, 12, ' ');
+       MvWAddCh(treescrn4, 11, 8, ' ');
+
+       /*strng5 */
+       MvWAddCh(treescrn4, 11, 18, ' ');
+       MvWAddCh(treescrn4, 12, 14, ' ');
+
+       /* treescrn5 */
+
+       overlay(treescrn, treescrn5);
+
+       /*balls */
+       MvWAddCh(treescrn5, 3, 15, ' ');
+       MvWAddCh(treescrn5, 10, 20, ' ');
+       MvWAddCh(treescrn5, 12, 1, ' ');
+
+       /*star */
+       MvWAddCh(treescrn5, 0, 12, '*');
+
+       /*strng1 */
+       MvWAddCh(treescrn5, 3, 11, ' ');
+
+       /*strng2 */
+       MvWAddCh(treescrn5, 5, 12, ' ');
+
+       /*strng3 */
+       MvWAddCh(treescrn5, 7, 14, ' ');
+       MvWAddCh(treescrn5, 8, 10, ' ');
+
+       /*strng4 */
+       MvWAddCh(treescrn5, 9, 15, ' ');
+       MvWAddCh(treescrn5, 10, 11, ' ');
+       MvWAddCh(treescrn5, 11, 7, ' ');
+
+       /*strng5 */
+       MvWAddCh(treescrn5, 11, 17, ' ');
+       MvWAddCh(treescrn5, 12, 13, ' ');
+
+       /* treescrn6 */
+
+       overlay(treescrn, treescrn6);
+
+       /*balls */
+       MvWAddCh(treescrn6, 6, 7, ' ');
+       MvWAddCh(treescrn6, 7, 18, ' ');
+       MvWAddCh(treescrn6, 10, 4, ' ');
+       MvWAddCh(treescrn6, 11, 23, ' ');
+
+       /*star */
+       (void) wstandout(treescrn6);
+       MvWAddCh(treescrn6, 0, 12, '*');
+       (void) wstandend(treescrn6);
+
+       /*strng1 */
+
+       /*strng2 */
+       MvWAddCh(treescrn6, 5, 11, ' ');
+
+       /*strng3 */
+       MvWAddCh(treescrn6, 7, 13, ' ');
+       MvWAddCh(treescrn6, 8, 9, ' ');
+
+       /*strng4 */
+       MvWAddCh(treescrn6, 9, 14, ' ');
+       MvWAddCh(treescrn6, 10, 10, ' ');
+       MvWAddCh(treescrn6, 11, 6, ' ');
+
+       /*strng5 */
+       MvWAddCh(treescrn6, 11, 16, ' ');
+       MvWAddCh(treescrn6, 12, 12, ' ');
+
+       /* treescrn7 */
+
+       overlay(treescrn, treescrn7);
+
+       /*balls */
+       MvWAddCh(treescrn7, 3, 15, ' ');
+       MvWAddCh(treescrn7, 6, 7, ' ');
+       MvWAddCh(treescrn7, 7, 18, ' ');
+       MvWAddCh(treescrn7, 10, 4, ' ');
+       MvWAddCh(treescrn7, 11, 22, ' ');
+
+       /*star */
+       MvWAddCh(treescrn7, 0, 12, '*');
+
+       /*strng1 */
+       MvWAddCh(treescrn7, 3, 12, ' ');
+
+       /*strng2 */
+       MvWAddCh(treescrn7, 5, 13, ' ');
+       MvWAddCh(treescrn7, 6, 9, ' ');
+
+       /*strng3 */
+       MvWAddCh(treescrn7, 7, 15, ' ');
+       MvWAddCh(treescrn7, 8, 11, ' ');
+
+       /*strng4 */
+       MvWAddCh(treescrn7, 9, 16, ' ');
+       MvWAddCh(treescrn7, 10, 12, ' ');
+       MvWAddCh(treescrn7, 11, 8, ' ');
+
+       /*strng5 */
+       MvWAddCh(treescrn7, 11, 18, ' ');
+       MvWAddCh(treescrn7, 12, 14, ' ');
+
+       look_out(150);
+       reindeer();
+
+       touchwin(w_holiday);
+       wrefresh(w_holiday);
+       wrefresh(w_del_msg);
+
+       look_out(500);
+       for (loopy = 0; loopy < 100; loopy++) {
+           blinkit();
+       }
+    } while (!opt_q);
+    done(0);
 }