home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / ncurses-1.9.9e-src.tgz / tar.out / fsf / ncurses / test / xmas.c < prev   
C/C++ Source or Header  |  1996-09-28  |  30KB  |  1,068 lines

  1. /******************************************************************************/
  2. /* asciixmas                                                                  */
  3. /* December 1989             Larry Bartz           Indianapolis, IN           */
  4. /*                                                                            */
  5. /*                                                                            */
  6. /* I'm dreaming of an ascii character-based monochrome Christmas,             */
  7. /* Just like the one's I used to know!                                        */
  8. /* Via a full duplex communications channel,                                  */
  9. /* At 9600 bits per second,                                                   */
  10. /* Even though it's kinda slow.                                               */
  11. /*                                                                            */
  12. /* I'm dreaming of an ascii character-based monochrome Christmas,             */
  13. /* With ev'ry C program I write!                                              */
  14. /* May your screen be merry and bright!                                       */
  15. /* And may all your Christmases be amber or green,                            */
  16. /* (for reduced eyestrain and improved visibility)!                           */
  17. /*                                                                            */
  18. /*                                                                            */
  19. /*                                                                            */
  20. /*                                                                            */
  21. /*                                                                            */
  22. /* IMPLEMENTATION                                                             */
  23. /*                                                                            */
  24. /* Feel free to modify the defined string FROMWHO to reflect you, your        */
  25. /* organization, your site, whatever.                                         */
  26. /*                                                                            */
  27. /* This really looks a lot better if you can turn off your cursor before      */
  28. /* execution. I wanted to do that here but very few termcap entries or        */
  29. /* terminfo definitions have the appropriate string defined. If you know      */
  30. /* the string(s) for the terminal(s) you use or which your site supports,     */
  31. /* you could call asciixmas from within a shell in which you issue the        */
  32. /* string to the terminal. The cursor is distracting but it doesn't really    */
  33. /* ruin the show.                                                             */
  34. /*                                                                            */
  35. /* At our site, we invoke this for our users just after login and the         */
  36. /* determination of terminal type.                                            */
  37. /*                                                                            */
  38. /*                                                                            */
  39. /* PORTABILITY                                                                */
  40. /*                                                                            */
  41. /* I wrote this using only the very simplest curses functions so that it      */
  42. /* might be the most portable. I was personally able to test on five          */
  43. /* different cpu/UNIX combinations.                                           */
  44. /*                                                                            */
  45. /*                                                                            */
  46. /* COMPILE                                                                    */
  47. /*                                                                            */
  48. /* usually this:                                                              */
  49. /*                                                                            */
  50. /* cc -O asciixmas.c -lcurses -o asciixmas -s                                 */
  51. /*                                                                            */
  52. /*                                                                            */
  53. /* Zilog S8000 models 11, 21, 31, etc with ZEUS variant of SYSTEM III         */
  54. /* maybe other SYSTEM III also:                                               */
  55. /*                                                                            */
  56. /* cc asciixmas.c -lcurses -ltermlib -o asciixmas -s                          */
  57. /*                                                                            */
  58. /* as above with optional "peephole optimizer" installed:                     */
  59. /*                                                                            */
  60. /* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s                       */
  61. /*                                                                            */
  62. /*                                                                            */
  63. /* Zilog S8000 models 32, 130 with WE32100 chip and SYS V, REL2               */
  64. /* maybe 3B2 also?                                                            */
  65. /*                                                                            */
  66. /* cc -f -O -K sd asciixmas.c -lcurses -o asciixmas -s                        */
  67. /*                                                                            */
  68. /*                                                                            */
  69. /* Pyramid, Sequent, any other "dual universe" types compile and execute      */
  70. /* under either universe. The compile line for the ucb universe (as you       */
  71. /* might expect) is the same as for SYS III UNIX:                             */
  72. /*                                                                            */
  73. /* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s                       */
  74. /*                                                                            */
  75. /* The above compile will also hold true for other BSD systems. (I hope)      */
  76. /*                                                                            */
  77. /*                                                                            */
  78. /*                                                                            */
  79. /*                                                                            */
  80. /* For the Scrooges out there among you who don't want this thing to loop     */
  81. /* forever (or until the user hits a key), insert this into your compile      */
  82. /* line just after "cc" :                                                     */
  83. /*                                                                            */
  84. /* -DNOLOOP                                                                   */
  85. /*                                                                            */
  86. /* like so:                                                                   */
  87. /*                                                                            */
  88. /* cc -DNOLOOP -O asciixmas.c -lcurses -o asciixmas -s                        */
  89. /*                                                                            */
  90. /*                                                                            */
  91. /*                                                                            */
  92. /******************************************************************************/
  93.  
  94. #include <curses.h>
  95. #include <signal.h>
  96. #include <stdlib.h>
  97. #include <unistd.h>
  98.  
  99. #define FROMWHO "Mark Hessling - (M.Hessling@gu.edu.au)"
  100.  
  101. int y_pos, x_pos;
  102.  
  103. WINDOW     *treescrn, *treescrn2,*treescrn3, *treescrn4,*treescrn5, *treescrn6,
  104.     *treescrn7, *treescrn8,
  105.     *dotdeer0,
  106.     *stardeer0,
  107.     *lildeer0, *lildeer1, *lildeer2, *lildeer3,
  108.     *middeer0, *middeer1, *middeer2, *middeer3,
  109.     *bigdeer0, *bigdeer1, *bigdeer2, *bigdeer3, *bigdeer4,
  110.     *lookdeer0, *lookdeer1, *lookdeer2, *lookdeer3, *lookdeer4,
  111.     *w_holiday,
  112.     *w_del_msg;
  113.  
  114. int boxit(void);
  115. int seas(void);
  116. int greet(void);
  117. int fromwho(void);
  118. int tree(void);
  119. int balls(void);
  120. int star(void);
  121. int strng1(void);
  122. int strng2(void);
  123. int strng3(void);
  124. int strng4(void);
  125. int strng5(void);
  126. int reindeer(void);
  127. int blinkit(void);
  128. void done(int sig);
  129.  
  130. int main(int argc, char **argv)
  131. {
  132. int loopy;
  133.  
  134.     initscr();
  135.     noecho();
  136.     nonl();
  137.     refresh();
  138.     signal(SIGINT,done);
  139.     signal(SIGTERM,done);
  140. #if !defined    DOS && !defined OS2
  141.     signal(SIGHUP,done);
  142.     signal(SIGQUIT,done);
  143. #endif
  144.  
  145.     treescrn = newwin(16,27,3,53);
  146.     treescrn2 = newwin(16,27,3,53);
  147.     treescrn3 = newwin(16,27,3,53);
  148.     treescrn4 = newwin(16,27,3,53);
  149.     treescrn5 = newwin(16,27,3,53);
  150.     treescrn6 = newwin(16,27,3,53);
  151.     treescrn7 = newwin(16,27,3,53);
  152.     treescrn8 = newwin(16,27,3,53);
  153.  
  154.     dotdeer0 = newwin(3,71,0,8);
  155.  
  156.     stardeer0 = newwin(4,56,0,8);
  157.  
  158.     lildeer0 = newwin(7,53,0,8);
  159.     lildeer1 = newwin(2,4,0,0);
  160.     lildeer2 = newwin(2,4,0,0);
  161.     lildeer3 = newwin(2,4,0,0);
  162.  
  163.     middeer0 = newwin(15,42,0,8);
  164.     middeer1 = newwin(3,7,0,0);
  165.     middeer2 = newwin(3,7,0,0);
  166.     middeer3 = newwin(3,7,0,0);
  167.  
  168.     bigdeer0 = newwin(10,23,0,0);
  169.     bigdeer1 = newwin(10,23,0,0);
  170.     bigdeer2 = newwin(10,23,0,0);
  171.     bigdeer3 = newwin(10,23,0,0);
  172.     bigdeer4 = newwin(10,23,0,0);
  173.  
  174.     lookdeer0 = newwin(10,25,0,0);
  175.     lookdeer1 = newwin(10,25,0,0);
  176.     lookdeer2 = newwin(10,25,0,0);
  177.     lookdeer3 = newwin(10,25,0,0);
  178.     lookdeer4 = newwin(10,25,0,0);
  179.  
  180.     w_holiday = newwin(1,26,3,27);
  181.  
  182.     w_del_msg = newwin(1,19,23,60);
  183.  
  184.     mvwaddstr(w_del_msg,0,0,"Hit any key to quit");
  185.  
  186.     mvwaddstr(w_holiday,0,0,"H A P P Y  H O L I D A Y S");
  187.  
  188.     /* set up the windows for our various reindeer */
  189.  
  190.     /* lildeer1 */
  191.     mvwaddch(lildeer1,0,0,(chtype)'V');
  192.     mvwaddch(lildeer1,1,0,(chtype)'@');
  193.     mvwaddch(lildeer1,1,1,(chtype)'<');
  194.     mvwaddch(lildeer1,1,2,(chtype)'>');
  195.     mvwaddch(lildeer1,1,3,(chtype)'~');
  196.  
  197.     /* lildeer2 */
  198.     mvwaddch(lildeer2,0,0,(chtype)'V');
  199.     mvwaddch(lildeer2,1,0,(chtype)'@');
  200.     mvwaddch(lildeer2,1,1,(chtype)'|');
  201.     mvwaddch(lildeer2,1,2,(chtype)'|');
  202.     mvwaddch(lildeer2,1,3,(chtype)'~');
  203.  
  204.     /* lildeer3 */
  205.     mvwaddch(lildeer3,0,0,(chtype)'V');
  206.     mvwaddch(lildeer3,1,0,(chtype)'@');
  207.     mvwaddch(lildeer3,1,1,(chtype)'>');
  208.     mvwaddch(lildeer3,1,2,(chtype)'<');
  209.     mvwaddch(lildeer2,1,3,(chtype)'~');
  210.  
  211.  
  212.     /* middeer1 */
  213.     mvwaddch(middeer1,0,2,(chtype)'y');
  214.     mvwaddch(middeer1,0,3,(chtype)'y');
  215.     mvwaddch(middeer1,1,2,(chtype)'0');
  216.     mvwaddch(middeer1,1,3,(chtype)'(');
  217.     mvwaddch(middeer1,1,4,(chtype)'=');
  218.     mvwaddch(middeer1,1,5,(chtype)')');
  219.     mvwaddch(middeer1,1,6,(chtype)'~');
  220.     mvwaddch(middeer1,2,3,(chtype)'\\');
  221.     mvwaddch(middeer1,2,4,(chtype)'/');
  222.  
  223.     /* middeer2 */
  224.     mvwaddch(middeer2,0,2,(chtype)'y');
  225.     mvwaddch(middeer2,0,3,(chtype)'y');
  226.     mvwaddch(middeer2,1,2,(chtype)'0');
  227.     mvwaddch(middeer2,1,3,(chtype)'(');
  228.     mvwaddch(middeer2,1,4,(chtype)'=');
  229.     mvwaddch(middeer2,1,5,(chtype)')');
  230.     mvwaddch(middeer2,1,6,(chtype)'~');
  231.     mvwaddch(middeer2,2,3,(chtype)'|');
  232.     mvwaddch(middeer2,2,5,(chtype)'|');
  233.  
  234.     /* middeer3 */
  235.     mvwaddch(middeer3,0,2,(chtype)'y');
  236.     mvwaddch(middeer3,0,3,(chtype)'y');
  237.     mvwaddch(middeer3,1,2,(chtype)'0');
  238.     mvwaddch(middeer3,1,3,(chtype)'(');
  239.     mvwaddch(middeer3,1,4,(chtype)'=');
  240.     mvwaddch(middeer3,1,5,(chtype)')');
  241.     mvwaddch(middeer3,1,6,(chtype)'~');
  242.     mvwaddch(middeer3,2,2,(chtype)'/');
  243.     mvwaddch(middeer3,2,6,(chtype)'\\');
  244.  
  245.  
  246.     /* bigdeer1 */
  247.     mvwaddch(bigdeer1,0,17,(chtype)'\\');
  248.     mvwaddch(bigdeer1,0,18,(chtype)'/');
  249.     mvwaddch(bigdeer1,0,20,(chtype)'\\');
  250.     mvwaddch(bigdeer1,0,21,(chtype)'/');
  251.     mvwaddch(bigdeer1,1,18,(chtype)'\\');
  252.     mvwaddch(bigdeer1,1,20,(chtype)'/');
  253.     mvwaddch(bigdeer1,2,19,(chtype)'|');
  254.     mvwaddch(bigdeer1,2,20,(chtype)'_');
  255.     mvwaddch(bigdeer1,3,18,(chtype)'/');
  256.     mvwaddch(bigdeer1,3,19,(chtype)'^');
  257.     mvwaddch(bigdeer1,3,20,(chtype)'0');
  258.     mvwaddch(bigdeer1,3,21,(chtype)'\\');
  259.     mvwaddch(bigdeer1,4,17,(chtype)'/');
  260.     mvwaddch(bigdeer1,4,18,(chtype)'/');
  261.     mvwaddch(bigdeer1,4,19,(chtype)'\\');
  262.     mvwaddch(bigdeer1,4,22,(chtype)'\\');
  263.     mvwaddstr(bigdeer1,5,7,"^~~~~~~~~//  ~~U");
  264.     mvwaddstr(bigdeer1,6,7,"( \\_____( /");
  265.     mvwaddstr(bigdeer1,7,8,"( )    /");
  266.     mvwaddstr(bigdeer1,8,9,"\\\\   /");
  267.     mvwaddstr(bigdeer1,9,11,"\\>/>");
  268.  
  269.     /* bigdeer2 */
  270.     mvwaddch(bigdeer2,0,17,(chtype)'\\');
  271.     mvwaddch(bigdeer2,0,18,(chtype)'/');
  272.     mvwaddch(bigdeer2,0,20,(chtype)'\\');
  273.     mvwaddch(bigdeer2,0,21,(chtype)'/');
  274.     mvwaddch(bigdeer2,1,18,(chtype)'\\');
  275.     mvwaddch(bigdeer2,1,20,(chtype)'/');
  276.     mvwaddch(bigdeer2,2,19,(chtype)'|');
  277.     mvwaddch(bigdeer2,2,20,(chtype)'_');
  278.     mvwaddch(bigdeer2,3,18,(chtype)'/');
  279.     mvwaddch(bigdeer2,3,19,(chtype)'^');
  280.     mvwaddch(bigdeer2,3,20,(chtype)'0');
  281.     mvwaddch(bigdeer2,3,21,(chtype)'\\');
  282.     mvwaddch(bigdeer2,4,17,(chtype)'/');
  283.     mvwaddch(bigdeer2,4,18,(chtype)'/');
  284.     mvwaddch(bigdeer2,4,19,(chtype)'\\');
  285.     mvwaddch(bigdeer2,4,22,(chtype)'\\');
  286.     mvwaddstr(bigdeer2,5,7,"^~~~~~~~~//  ~~U");
  287.     mvwaddstr(bigdeer2,6,7,"(( )____( /");
  288.     mvwaddstr(bigdeer2,7,7,"( /      |");
  289.     mvwaddstr(bigdeer2,8,8,"\\/      |");
  290.     mvwaddstr(bigdeer2,9,9,"|>     |>");
  291.  
  292.     /* bigdeer3 */
  293.     mvwaddch(bigdeer3,0,17,(chtype)'\\');
  294.     mvwaddch(bigdeer3,0,18,(chtype)'/');
  295.     mvwaddch(bigdeer3,0,20,(chtype)'\\');
  296.     mvwaddch(bigdeer3,0,21,(chtype)'/');
  297.     mvwaddch(bigdeer3,1,18,(chtype)'\\');
  298.     mvwaddch(bigdeer3,1,20,(chtype)'/');
  299.     mvwaddch(bigdeer3,2,19,(chtype)'|');
  300.     mvwaddch(bigdeer3,2,20,(chtype)'_');
  301.     mvwaddch(bigdeer3,3,18,(chtype)'/');
  302.     mvwaddch(bigdeer3,3,19,(chtype)'^');
  303.     mvwaddch(bigdeer3,3,20,(chtype)'0');
  304.     mvwaddch(bigdeer3,3,21,(chtype)'\\');
  305.     mvwaddch(bigdeer3,4,17,(chtype)'/');
  306.     mvwaddch(bigdeer3,4,18,(chtype)'/');
  307.     mvwaddch(bigdeer3,4,19,(chtype)'\\');
  308.     mvwaddch(bigdeer3,4,22,(chtype)'\\');
  309.     mvwaddstr(bigdeer3,5,7,"^~~~~~~~~//  ~~U");
  310.     mvwaddstr(bigdeer3,6,6,"( ()_____( /");
  311.     mvwaddstr(bigdeer3,7,6,"/ /       /");
  312.     mvwaddstr(bigdeer3,8,5,"|/          \\");
  313.     mvwaddstr(bigdeer3,9,5,"/>           \\>");
  314.  
  315.     /* bigdeer4 */
  316.     mvwaddch(bigdeer4,0,17,(chtype)'\\');
  317.     mvwaddch(bigdeer4,0,18,(chtype)'/');
  318.     mvwaddch(bigdeer4,0,20,(chtype)'\\');
  319.     mvwaddch(bigdeer4,0,21,(chtype)'/');
  320.     mvwaddch(bigdeer4,1,18,(chtype)'\\');
  321.     mvwaddch(bigdeer4,1,20,(chtype)'/');
  322.     mvwaddch(bigdeer4,2,19,(chtype)'|');
  323.     mvwaddch(bigdeer4,2,20,(chtype)'_');
  324.     mvwaddch(bigdeer4,3,18,(chtype)'/');
  325.     mvwaddch(bigdeer4,3,19,(chtype)'^');
  326.     mvwaddch(bigdeer4,3,20,(chtype)'0');
  327.     mvwaddch(bigdeer4,3,21,(chtype)'\\');
  328.     mvwaddch(bigdeer4,4,17,(chtype)'/');
  329.     mvwaddch(bigdeer4,4,18,(chtype)'/');
  330.     mvwaddch(bigdeer4,4,19,(chtype)'\\');
  331.     mvwaddch(bigdeer4,4,22,(chtype)'\\');
  332.     mvwaddstr(bigdeer4,5,7,"^~~~~~~~~//  ~~U");
  333.     mvwaddstr(bigdeer4,6,6,"( )______( /");
  334.     mvwaddstr(bigdeer4,7,5,"(/          \\");
  335.     mvwaddstr(bigdeer4,8,0,"v___=             ----^");
  336.  
  337.  
  338.     /* lookdeer1 */
  339.     mvwaddstr(lookdeer1,0,16,"\\/     \\/");
  340.     mvwaddstr(lookdeer1,1,17,"\\Y/ \\Y/");
  341.     mvwaddstr(lookdeer1,2,19,"\\=/");
  342.     mvwaddstr(lookdeer1,3,17,"^\\o o/^");
  343.     mvwaddstr(lookdeer1,4,17,"//( )");
  344.     mvwaddstr(lookdeer1,5,7,"^~~~~~~~~// \\O/");
  345.     mvwaddstr(lookdeer1,6,7,"( \\_____( /");
  346.     mvwaddstr(lookdeer1,7,8,"( )    /");
  347.     mvwaddstr(lookdeer1,8,9,"\\\\   /");
  348.     mvwaddstr(lookdeer1,9,11,"\\>/>");
  349.  
  350.     /* lookdeer2 */
  351.     mvwaddstr(lookdeer2,0,16,"\\/     \\/");
  352.     mvwaddstr(lookdeer2,1,17,"\\Y/ \\Y/");
  353.     mvwaddstr(lookdeer2,2,19,"\\=/");
  354.     mvwaddstr(lookdeer2,3,17,"^\\o o/^");
  355.     mvwaddstr(lookdeer2,4,17,"//( )");
  356.     mvwaddstr(lookdeer2,5,7,"^~~~~~~~~// \\O/");
  357.     mvwaddstr(lookdeer2,6,7,"(( )____( /");
  358.     mvwaddstr(lookdeer2,7,7,"( /      |");
  359.     mvwaddstr(lookdeer2,8,8,"\\/      |");
  360.     mvwaddstr(lookdeer2,9,9,"|>     |>");
  361.  
  362.     /* lookdeer3 */
  363.     mvwaddstr(lookdeer3,0,16,"\\/     \\/");
  364.     mvwaddstr(lookdeer3,1,17,"\\Y/ \\Y/");
  365.     mvwaddstr(lookdeer3,2,19,"\\=/");
  366.     mvwaddstr(lookdeer3,3,17,"^\\o o/^");
  367.     mvwaddstr(lookdeer3,4,17,"//( )");
  368.     mvwaddstr(lookdeer3,5,7,"^~~~~~~~~// \\O/");
  369.     mvwaddstr(lookdeer3,6,6,"( ()_____( /");
  370.     mvwaddstr(lookdeer3,7,6,"/ /       /");
  371.     mvwaddstr(lookdeer3,8,5,"|/          \\");
  372.     mvwaddstr(lookdeer3,9,5,"/>           \\>");
  373.  
  374.     /* lookdeer4 */
  375.     mvwaddstr(lookdeer4,0,16,"\\/     \\/");
  376.     mvwaddstr(lookdeer4,1,17,"\\Y/ \\Y/");
  377.     mvwaddstr(lookdeer4,2,19,"\\=/");
  378.     mvwaddstr(lookdeer4,3,17,"^\\o o/^");
  379.     mvwaddstr(lookdeer4,4,17,"//( )");
  380.     mvwaddstr(lookdeer4,5,7,"^~~~~~~~~// \\O/");
  381.     mvwaddstr(lookdeer4,6,6,"( )______( /");
  382.     mvwaddstr(lookdeer4,7,5,"(/          \\");
  383.     mvwaddstr(lookdeer4,8,0,"v___=             ----^");
  384.  
  385.  
  386.  
  387.     /***********************************************/
  388.     cbreak();
  389.     nodelay(stdscr,TRUE);
  390.     do {
  391.       clear();
  392.       werase(treescrn);
  393.       touchwin(w_del_msg);
  394.       touchwin(treescrn);
  395.       werase(treescrn2);
  396.       touchwin(treescrn2);
  397.       werase(treescrn8);
  398.       touchwin(treescrn8);
  399.       refresh();
  400.       napms(150);
  401.       boxit();
  402.       refresh();
  403.       napms(150);
  404.       seas();
  405.       refresh();
  406.       napms(150);
  407.       greet();
  408.       refresh();
  409.       napms(150);
  410.       fromwho();
  411.       refresh();
  412.       napms(150);
  413.       tree();
  414.       napms(150);
  415.       balls();
  416.       napms(150);
  417.       star();
  418.       napms(150);
  419.       strng1();
  420.       strng2();
  421.       strng3();
  422.       strng4();
  423.       strng5();
  424.  
  425.  
  426.     /* set up the windows for our blinking trees */
  427.     /* **************************************** */
  428.     /* treescrn3 */
  429.  
  430.        overlay(treescrn, treescrn3);
  431.  
  432.        /*balls*/
  433.        mvwaddch(treescrn3, 4, 18, ' ');
  434.        mvwaddch(treescrn3, 7, 6, ' ');
  435.        mvwaddch(treescrn3, 8, 19, ' ');
  436.        mvwaddch(treescrn3, 11, 22, ' ');
  437.  
  438.        /*star*/
  439.        mvwaddch(treescrn3, 0, 12, '*');
  440.  
  441.        /*strng1*/
  442.        mvwaddch(treescrn3, 3, 11, ' ');
  443.  
  444.        /*strng2*/
  445.        mvwaddch(treescrn3, 5, 13, ' ');
  446.        mvwaddch(treescrn3, 6, 10, ' ');
  447.  
  448.        /*strng3*/
  449.        mvwaddch(treescrn3, 7, 16, ' ');
  450.        mvwaddch(treescrn3, 7, 14, ' ');
  451.  
  452.                /*strng4*/
  453.        mvwaddch(treescrn3, 10, 13, ' ');
  454.        mvwaddch(treescrn3, 10, 10, ' ');
  455.        mvwaddch(treescrn3, 11, 8, ' ');
  456.  
  457.                /*strng5*/
  458.        mvwaddch(treescrn3, 11, 18, ' ');
  459.        mvwaddch(treescrn3, 12, 13, ' ');
  460.  
  461.  
  462.     /* treescrn4 */
  463.  
  464.        overlay(treescrn, treescrn4);
  465.  
  466.        /*balls*/
  467.        mvwaddch(treescrn4, 3, 9, ' ');
  468.        mvwaddch(treescrn4, 4, 16, ' ');
  469.        mvwaddch(treescrn4, 7, 6, ' ');
  470.        mvwaddch(treescrn4, 8, 19, ' ');
  471.        mvwaddch(treescrn4, 11, 2, ' ');
  472.        mvwaddch(treescrn4, 12, 23, ' ');
  473.  
  474.        /*star*/
  475.        wstandout(treescrn4);
  476.        mvwaddch(treescrn4, 0, 12, '*');
  477.        wstandend(treescrn4);
  478.  
  479.        /*strng1*/
  480.        mvwaddch(treescrn4, 3, 13, ' ');
  481.  
  482.        /*strng2*/
  483.  
  484.        /*strng3*/
  485.        mvwaddch(treescrn4, 7, 15, ' ');
  486.        mvwaddch(treescrn4, 8, 11, ' ');
  487.  
  488.        /*strng4*/
  489.        mvwaddch(treescrn4, 9, 16, ' ');
  490.        mvwaddch(treescrn4, 10, 12, ' ');
  491.        mvwaddch(treescrn4, 11, 8, ' ');
  492.  
  493.        /*strng5*/
  494.        mvwaddch(treescrn4, 11, 18, ' ');
  495.        mvwaddch(treescrn4, 12, 14, ' ');
  496.  
  497.  
  498.     /* treescrn5 */
  499.  
  500.        overlay(treescrn, treescrn5);
  501.  
  502.        /*balls*/
  503.        mvwaddch(treescrn5, 3, 15, ' ');
  504.        mvwaddch(treescrn5, 10, 20, ' ');
  505.        mvwaddch(treescrn5, 12, 1, ' ');
  506.  
  507.        /*star*/
  508.        mvwaddch(treescrn5, 0, 12, '*');
  509.  
  510.        /*strng1*/
  511.        mvwaddch(treescrn5, 3, 11, ' ');
  512.  
  513.        /*strng2*/
  514.        mvwaddch(treescrn5, 5, 12, ' ');
  515.  
  516.        /*strng3*/
  517.        mvwaddch(treescrn5, 7, 14, ' ');
  518.        mvwaddch(treescrn5, 8, 10, ' ');
  519.  
  520.        /*strng4*/
  521.        mvwaddch(treescrn5, 9, 15, ' ');
  522.        mvwaddch(treescrn5, 10, 11, ' ');
  523.        mvwaddch(treescrn5, 11, 7, ' ');
  524.  
  525.        /*strng5*/
  526.        mvwaddch(treescrn5, 11, 17, ' ');
  527.        mvwaddch(treescrn5, 12, 13, ' ');
  528.  
  529.     /* treescrn6 */
  530.  
  531.        overlay(treescrn, treescrn6);
  532.  
  533.        /*balls*/
  534.        mvwaddch(treescrn6, 6, 7, ' ');
  535.        mvwaddch(treescrn6, 7, 18, ' ');
  536.        mvwaddch(treescrn6, 10, 4, ' ');
  537.        mvwaddch(treescrn6, 11, 23, ' ');
  538.  
  539.        /*star*/
  540.        wstandout(treescrn6);
  541.        mvwaddch(treescrn6, 0, 12, '*');
  542.        wstandend(treescrn6);
  543.  
  544.        /*strng1*/
  545.  
  546.        /*strng2*/
  547.        mvwaddch(treescrn6, 5, 11, ' ');
  548.  
  549.        /*strng3*/
  550.        mvwaddch(treescrn6, 7, 13, ' ');
  551.        mvwaddch(treescrn6, 8, 9, ' ');
  552.  
  553.        /*strng4*/
  554.        mvwaddch(treescrn6, 9, 14, ' ');
  555.        mvwaddch(treescrn6, 10, 10, ' ');
  556.        mvwaddch(treescrn6, 11, 6, ' ');
  557.  
  558.        /*strng5*/
  559.        mvwaddch(treescrn6, 11, 16, ' ');
  560.        mvwaddch(treescrn6, 12, 12, ' ');
  561.  
  562.     /* treescrn7 */
  563.  
  564.        overlay(treescrn, treescrn7);
  565.  
  566.        /*balls*/
  567.        mvwaddch(treescrn7, 3, 15, ' ');
  568.        mvwaddch(treescrn7, 6, 7, ' ');
  569.        mvwaddch(treescrn7, 7, 18, ' ');
  570.        mvwaddch(treescrn7, 10, 4, ' ');
  571.        mvwaddch(treescrn7, 11, 22, ' ');
  572.  
  573.        /*star*/
  574.        mvwaddch(treescrn7, 0, 12, '*');
  575.  
  576.        /*strng1*/
  577.        mvwaddch(treescrn7, 3, 12, ' ');
  578.  
  579.        /*strng2*/
  580.        mvwaddch(treescrn7, 5, 13, ' ');
  581.        mvwaddch(treescrn7, 6, 9, ' ');
  582.  
  583.        /*strng3*/
  584.        mvwaddch(treescrn7, 7, 15, ' ');
  585.        mvwaddch(treescrn7, 8, 11, ' ');
  586.  
  587.        /*strng4*/
  588.        mvwaddch(treescrn7, 9, 16, ' ');
  589.        mvwaddch(treescrn7, 10, 12, ' ');
  590.        mvwaddch(treescrn7, 11, 8, ' ');
  591.  
  592.        /*strng5*/
  593.        mvwaddch(treescrn7, 11, 18, ' ');
  594.        mvwaddch(treescrn7, 12, 14, ' ');
  595.  
  596.  
  597.        napms(150);
  598.        reindeer();
  599.  
  600.        touchwin(w_holiday);
  601.        wrefresh(w_holiday);
  602.        wrefresh(w_del_msg);
  603.  
  604.        napms(500);
  605.        for(loopy = 0;loopy < 100;loopy++) {
  606.             blinkit();
  607.        }
  608.  
  609. #ifdef NOLOOP
  610.        done(0);
  611. #endif
  612.  
  613.     }
  614.     while(getch() == (ERR));
  615. /*  while(!typeahead(stdin));*/
  616.     done(0);
  617.     /*NOTREACHED*/
  618. }
  619.  
  620. int boxit(void)
  621. {
  622.  int x = 0;
  623.  
  624.     while(x < 20) {
  625.       mvaddch(x, 7, '|');
  626.       ++x;
  627.     }
  628.  
  629.     x = 8;
  630.  
  631.     while(x < 80) {
  632.       mvaddch(19, x, '_');
  633.       ++x;
  634.     }
  635.  
  636.     x = 0;
  637.  
  638.     while(x < 80) {
  639.       mvaddch(22, x, '_');
  640.       ++x;
  641.     }
  642.  
  643.     return( 0 );
  644. }
  645.  
  646. int seas(void)
  647. {
  648.     mvaddch(4, 1, 'S');
  649.     mvaddch(6, 1, 'E');
  650.     mvaddch(8, 1, 'A');
  651.     mvaddch(10, 1, 'S');
  652.     mvaddch(12, 1, 'O');
  653.     mvaddch(14, 1, 'N');
  654.     mvaddch(16, 1, '`');
  655.     mvaddch(18, 1, 'S');
  656.  
  657.     return( 0 );
  658. }
  659.  
  660.  
  661. int greet(void)
  662. {
  663.     mvaddch(3, 5, 'G');
  664.     mvaddch(5, 5, 'R');
  665.     mvaddch(7, 5, 'E');
  666.     mvaddch(9, 5, 'E');
  667.     mvaddch(11, 5, 'T');
  668.     mvaddch(13, 5, 'I');
  669.     mvaddch(15, 5, 'N');
  670.     mvaddch(17, 5, 'G');
  671.     mvaddch(19, 5, 'S');
  672.  
  673.     return( 0 );
  674. }
  675.  
  676.  
  677. int fromwho(void)
  678. {
  679.     mvaddstr(21, 13, FROMWHO);
  680.     return( 0 );
  681. }
  682.  
  683. int tree(void)
  684. {
  685.     mvwaddch(treescrn, 1, 11, (chtype)'/');
  686.     mvwaddch(treescrn, 2, 11, (chtype)'/');
  687.     mvwaddch(treescrn, 3, 10, (chtype)'/');
  688.     mvwaddch(treescrn, 4, 9, (chtype)'/');
  689.     mvwaddch(treescrn, 5, 9, (chtype)'/');
  690.     mvwaddch(treescrn, 6, 8, (chtype)'/');
  691.     mvwaddch(treescrn, 7, 7, (chtype)'/');
  692.     mvwaddch(treescrn, 8, 6, (chtype)'/');
  693.     mvwaddch(treescrn, 9, 6, (chtype)'/');
  694.     mvwaddch(treescrn, 10, 5, (chtype)'/');
  695.     mvwaddch(treescrn, 11, 3, (chtype)'/');
  696.     mvwaddch(treescrn, 12, 2, (chtype)'/');
  697.  
  698.     mvwaddch(treescrn, 1, 13, (chtype)'\\');
  699.     mvwaddch(treescrn, 2, 13, (chtype)'\\');
  700.     mvwaddch(treescrn, 3, 14, (chtype)'\\');
  701.     mvwaddch(treescrn, 4, 15, (chtype)'\\');
  702.     mvwaddch(treescrn, 5, 15, (chtype)'\\');
  703.     mvwaddch(treescrn, 6, 16, (chtype)'\\');
  704.     mvwaddch(treescrn, 7, 17, (chtype)'\\');
  705.     mvwaddch(treescrn, 8, 18, (chtype)'\\');
  706.     mvwaddch(treescrn, 9, 18, (chtype)'\\');
  707.     mvwaddch(treescrn, 10, 19, (chtype)'\\');
  708.     mvwaddch(treescrn, 11, 21, (chtype)'\\');
  709.     mvwaddch(treescrn, 12, 22, (chtype)'\\');
  710.  
  711.     mvwaddch(treescrn, 4, 10, (chtype)'_');
  712.     mvwaddch(treescrn, 4, 14, (chtype)'_');
  713.     mvwaddch(treescrn, 8, 7, (chtype)'_');
  714.     mvwaddch(treescrn, 8, 17, (chtype)'_');
  715.  
  716.     mvwaddstr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\");
  717.  
  718.     mvwaddstr(treescrn, 14, 11, "| |");
  719.     mvwaddstr(treescrn, 15, 11, "|_|");
  720.  
  721.     wrefresh(treescrn);
  722.     wrefresh(w_del_msg);
  723.  
  724.     return( 0 );
  725. }
  726.  
  727.  
  728. int balls(void)
  729. {
  730.  
  731.     overlay(treescrn, treescrn2);
  732.  
  733.     mvwaddch(treescrn2, 3, 9, (chtype)'@');
  734.     mvwaddch(treescrn2, 3, 15, (chtype)'@');
  735.     mvwaddch(treescrn2, 4, 8, (chtype)'@');
  736.     mvwaddch(treescrn2, 4, 16, (chtype)'@');
  737.     mvwaddch(treescrn2, 5, 7, (chtype)'@');
  738.     mvwaddch(treescrn2, 5, 17, (chtype)'@');
  739.     mvwaddch(treescrn2, 7, 6, (chtype)'@');
  740.     mvwaddch(treescrn2, 7, 18, (chtype)'@');
  741.     mvwaddch(treescrn2, 8, 5, (chtype)'@');
  742.     mvwaddch(treescrn2, 8, 19, (chtype)'@');
  743.     mvwaddch(treescrn2, 10, 4, (chtype)'@');
  744.     mvwaddch(treescrn2, 10, 20, (chtype)'@');
  745.     mvwaddch(treescrn2, 11, 2, (chtype)'@');
  746.     mvwaddch(treescrn2, 11, 22, (chtype)'@');
  747.     mvwaddch(treescrn2, 12, 1, (chtype)'@');
  748.     mvwaddch(treescrn2, 12, 23, (chtype)'@');
  749.  
  750.     wrefresh(treescrn2);
  751.     wrefresh(w_del_msg);
  752.     return( 0 );
  753. }
  754.  
  755.  
  756. int star(void)
  757. {
  758.     wstandout(treescrn2);
  759.     mvwaddch(treescrn2, 0, 12, (chtype)'*');
  760.     wstandend(treescrn2);
  761.  
  762.     wrefresh(treescrn2);
  763.     wrefresh(w_del_msg);
  764.     return( 0 );
  765. }
  766.  
  767.  
  768. int strng1(void)
  769. {
  770.     mvwaddch(treescrn2, 3, 13, (chtype)'\'');
  771.     mvwaddch(treescrn2, 3, 12, (chtype)':');
  772.     mvwaddch(treescrn2, 3, 11, (chtype)'.');
  773.  
  774.     wrefresh(treescrn2);
  775.     wrefresh(w_del_msg);
  776.     return( 0 );
  777. }
  778.  
  779.  
  780. int strng2(void)
  781. {
  782.     mvwaddch(treescrn2, 5, 14, (chtype)'\'');
  783.     mvwaddch(treescrn2, 5, 13, (chtype)':');
  784.     mvwaddch(treescrn2, 5, 12, (chtype)'.');
  785.     mvwaddch(treescrn2, 5, 11, (chtype)',');
  786.     mvwaddch(treescrn2, 6, 10, (chtype)'\'');
  787.     mvwaddch(treescrn2, 6, 9, (chtype)':');
  788.  
  789.     wrefresh(treescrn2);
  790.     wrefresh(w_del_msg);
  791.     return( 0 );
  792. }
  793.  
  794.  
  795. int strng3(void)
  796. {
  797.     mvwaddch(treescrn2, 7, 16, (chtype)'\'');
  798.     mvwaddch(treescrn2, 7, 15, (chtype)':');
  799.     mvwaddch(treescrn2, 7, 14, (chtype)'.');
  800.     mvwaddch(treescrn2, 7, 13, (chtype)',');
  801.     mvwaddch(treescrn2, 8, 12, (chtype)'\'');
  802.     mvwaddch(treescrn2, 8, 11, (chtype)':');
  803.     mvwaddch(treescrn2, 8, 10, (chtype)'.');
  804.     mvwaddch(treescrn2, 8, 9, (chtype)',');
  805.  
  806.     wrefresh(treescrn2);
  807.     wrefresh(w_del_msg);
  808.     return( 0 );
  809. }
  810.  
  811.  
  812. int strng4(void)
  813. {
  814.     mvwaddch(treescrn2, 9, 17, (chtype)'\'');
  815.     mvwaddch(treescrn2, 9, 16, (chtype)':');
  816.     mvwaddch(treescrn2, 9, 15, (chtype)'.');
  817.     mvwaddch(treescrn2, 9, 14, (chtype)',');
  818.     mvwaddch(treescrn2, 10, 13, (chtype)'\'');
  819.     mvwaddch(treescrn2, 10, 12, (chtype)':');
  820.     mvwaddch(treescrn2, 10, 11, (chtype)'.');
  821.     mvwaddch(treescrn2, 10, 10, (chtype)',');
  822.     mvwaddch(treescrn2, 11, 9, (chtype)'\'');
  823.     mvwaddch(treescrn2, 11, 8, (chtype)':');
  824.     mvwaddch(treescrn2, 11, 7, (chtype)'.');
  825.     mvwaddch(treescrn2, 11, 6, (chtype)',');
  826.     mvwaddch(treescrn2, 12, 5, (chtype)'\'');
  827.  
  828.     wrefresh(treescrn2);
  829.     wrefresh(w_del_msg);
  830.     return( 0 );
  831. }
  832.  
  833.  
  834. int strng5(void)
  835. {
  836.     mvwaddch(treescrn2, 11, 19, (chtype)'\'');
  837.     mvwaddch(treescrn2, 11, 18, (chtype)':');
  838.     mvwaddch(treescrn2, 11, 17, (chtype)'.');
  839.     mvwaddch(treescrn2, 11, 16, (chtype)',');
  840.     mvwaddch(treescrn2, 12, 15, (chtype)'\'');
  841.     mvwaddch(treescrn2, 12, 14, (chtype)':');
  842.     mvwaddch(treescrn2, 12, 13, (chtype)'.');
  843.     mvwaddch(treescrn2, 12, 12, (chtype)',');
  844.  
  845.     /* save a fully lit tree */
  846.     overlay(treescrn2, treescrn);
  847.  
  848.     wrefresh(treescrn2);
  849.     wrefresh(w_del_msg);
  850.     return( 0 );
  851. }
  852.  
  853.  
  854.  
  855. int blinkit(void)
  856. {
  857. static int cycle;
  858.  
  859.     if(cycle > 4) {
  860.       cycle = 0;
  861.     }
  862.  
  863.  
  864.     touchwin(treescrn8);
  865.  
  866.     switch(cycle) {
  867.       case 0:
  868.                  overlay(treescrn3, treescrn8);
  869.                  wrefresh(treescrn8);
  870.                  wrefresh(w_del_msg);
  871.                  break;
  872.       case 1:
  873.                  overlay(treescrn4, treescrn8);
  874.                  wrefresh(treescrn8);
  875.                  wrefresh(w_del_msg);
  876.                  break;
  877.       case 2:
  878.                  overlay(treescrn5, treescrn8);
  879.                  wrefresh(treescrn8);
  880.                  wrefresh(w_del_msg);
  881.                  break;
  882.       case 3:
  883.                  overlay(treescrn6, treescrn8);
  884.                  wrefresh(treescrn8);
  885.                  wrefresh(w_del_msg);
  886.                  break;
  887.       case 4:
  888.                  overlay(treescrn7, treescrn8);
  889.                  wrefresh(treescrn8);
  890.                  wrefresh(w_del_msg);
  891.                  break;
  892.     }
  893.      touchwin(treescrn8);
  894.  
  895.      /*ALL ON***************************************************/
  896.  
  897.      overlay(treescrn, treescrn8);
  898.      wrefresh(treescrn8);
  899.      wrefresh(w_del_msg);
  900.  
  901.     ++cycle;
  902.     return( 0 );
  903. }
  904.  
  905. static void
  906. deer_step(WINDOW *win, int y, int x)
  907. {
  908.         mvwin(win, y, x);
  909.         wrefresh(win);
  910.         wrefresh(w_del_msg);
  911.         napms(5);
  912. }
  913.  
  914. int reindeer(void)
  915. {
  916.  int looper;
  917.  y_pos = 0;
  918.  
  919.  
  920.     for(x_pos = 70; x_pos > 62; x_pos--) {
  921.       if(x_pos < 62) {
  922.         y_pos = 1;
  923.       }
  924.       for(looper = 0; looper < 4; looper++) {
  925.         mvwaddch(dotdeer0, y_pos, x_pos, (chtype)'.');
  926.         wrefresh(dotdeer0);
  927.         wrefresh(w_del_msg);
  928.         werase(dotdeer0);
  929.         wrefresh(dotdeer0);
  930.         wrefresh(w_del_msg);
  931.         napms(50);
  932.       }
  933.     }
  934.  
  935.     y_pos = 2;
  936.  
  937.     for(; x_pos > 50; x_pos--) {
  938.       for(looper = 0; looper < 4; looper++) {
  939.  
  940.         if(x_pos < 56) {
  941.           y_pos = 3;
  942.  
  943.           mvwaddch(stardeer0, y_pos, x_pos, (chtype)'*');
  944.           wrefresh(stardeer0);
  945.           wrefresh(w_del_msg);
  946.           werase(stardeer0);
  947.           wrefresh(stardeer0);
  948.           wrefresh(w_del_msg);
  949.         } else {
  950.           mvwaddch(dotdeer0, y_pos, x_pos, (chtype)'*');
  951.           wrefresh(dotdeer0);
  952.           wrefresh(w_del_msg);
  953.           werase(dotdeer0);
  954.           wrefresh(dotdeer0);
  955.           wrefresh(w_del_msg);
  956.         }
  957.       }
  958.     }
  959.  
  960.     x_pos = 58;
  961.  
  962.     for(y_pos = 2; y_pos < 5; y_pos++) {
  963.  
  964.       touchwin(lildeer0);
  965.       wrefresh(lildeer0);
  966.       wrefresh(w_del_msg);
  967.  
  968.       for(looper = 0; looper < 4; looper++) {
  969.         deer_step(lildeer3, y_pos, x_pos);
  970.         deer_step(lildeer2, y_pos, x_pos);
  971.         deer_step(lildeer1, y_pos, x_pos);
  972.         deer_step(lildeer2, y_pos, x_pos);
  973.         deer_step(lildeer3, y_pos, x_pos);
  974.  
  975.         touchwin(lildeer0);
  976.         wrefresh(lildeer0);
  977.         wrefresh(w_del_msg);
  978.  
  979.         x_pos -= 2;
  980.       }
  981.     }
  982.  
  983.  
  984.     x_pos = 35;
  985.  
  986.     for(y_pos = 5; y_pos < 10; y_pos++) {
  987.  
  988.       touchwin(middeer0);
  989.       wrefresh(middeer0);
  990.       wrefresh(w_del_msg);
  991.  
  992.       for(looper = 0; looper < 2; looper++) {
  993.         deer_step(middeer3, y_pos, x_pos);
  994.         deer_step(middeer2, y_pos, x_pos);
  995.         deer_step(middeer1, y_pos, x_pos);
  996.         deer_step(middeer2, y_pos, x_pos);
  997.         deer_step(middeer3, y_pos, x_pos);
  998.  
  999.         touchwin(middeer0);
  1000.         wrefresh(middeer0);
  1001.         wrefresh(w_del_msg);
  1002.  
  1003.         x_pos -= 3;
  1004.       }
  1005.     }
  1006.  
  1007.     napms(300);
  1008.  
  1009.     y_pos = 1;
  1010.  
  1011.     for(x_pos = 8; x_pos < 16; x_pos++) {
  1012.         deer_step(bigdeer4, y_pos, x_pos);
  1013.         deer_step(bigdeer3, y_pos, x_pos);
  1014.         deer_step(bigdeer2, y_pos, x_pos);
  1015.         deer_step(bigdeer1, y_pos, x_pos);
  1016.         deer_step(bigdeer2, y_pos, x_pos);
  1017.         deer_step(bigdeer3, y_pos, x_pos);
  1018.         deer_step(bigdeer4, y_pos, x_pos);
  1019.         deer_step(bigdeer0, y_pos, x_pos);
  1020.     }
  1021.  
  1022.       --x_pos;
  1023.  
  1024.       for(looper = 0; looper < 6; looper++) {
  1025.         deer_step(lookdeer4, y_pos, x_pos);
  1026.         deer_step(lookdeer3, y_pos, x_pos);
  1027.         deer_step(lookdeer2, y_pos, x_pos);
  1028.         deer_step(lookdeer1, y_pos, x_pos);
  1029.         deer_step(lookdeer2, y_pos, x_pos);
  1030.         deer_step(lookdeer3, y_pos, x_pos);
  1031.         deer_step(lookdeer4, y_pos, x_pos);
  1032.       }
  1033.  
  1034.       deer_step(lookdeer0, y_pos, x_pos);
  1035.  
  1036.     for(; y_pos < 10; y_pos++) {
  1037.       for(looper = 0; looper < 2; looper++) {
  1038.         deer_step(bigdeer4, y_pos, x_pos);
  1039.         deer_step(bigdeer3, y_pos, x_pos);
  1040.         deer_step(bigdeer2, y_pos, x_pos);
  1041.         deer_step(bigdeer1, y_pos, x_pos);
  1042.         deer_step(bigdeer2, y_pos, x_pos);
  1043.         deer_step(bigdeer3, y_pos, x_pos);
  1044.         deer_step(bigdeer4, y_pos, x_pos);
  1045.       }
  1046.       deer_step(bigdeer0, y_pos, x_pos);
  1047.     }
  1048.  
  1049.     --y_pos;
  1050.  
  1051.     deer_step(lookdeer3, y_pos, x_pos);
  1052.     return( 0 );
  1053. }
  1054.  
  1055. void done(int sig)
  1056. {
  1057.     signal(SIGINT,done);
  1058.     signal(SIGTERM,done);
  1059. #if !defined    DOS && !defined OS2
  1060.     signal(SIGHUP,done);
  1061.     signal(SIGQUIT,done);
  1062. #endif
  1063.     clear();
  1064.     refresh();
  1065.     endwin();
  1066.     exit(0);
  1067. }
  1068.