home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume26 / asciixmas / part01 / asciixmas.c
Encoding:
C/C++ Source or Header  |  1991-12-11  |  31.6 KB  |  1,173 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 DEL), 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.  
  97. #define FROMWHO "I N F O R M A T I O N  S Y S T E M S  D I V I S I O N"
  98. /* #define FROMWHO "from  L A R R Y,  C O L L E E N,  S E A N,  &  H A L E Y" */
  99.  
  100. int y_pos, x_pos; 
  101.  
  102. WINDOW
  103.        *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. main()
  115. {
  116.  void done();
  117.  int loopy;
  118.  
  119.   initscr();
  120.   noecho();
  121.   nonl();
  122.   refresh();
  123.   signal(SIGINT,done);
  124.   signal(SIGHUP,done);
  125.   signal(SIGTERM,done);
  126.   signal(SIGQUIT,done);
  127.  
  128.  
  129.  
  130.   treescrn = newwin(16,27,3,53);
  131.   treescrn2 = newwin(16,27,3,53);
  132.   treescrn3 = newwin(16,27,3,53);
  133.   treescrn4 = newwin(16,27,3,53);
  134.   treescrn5 = newwin(16,27,3,53);
  135.   treescrn6 = newwin(16,27,3,53);
  136.   treescrn7 = newwin(16,27,3,53);
  137.   treescrn8 = newwin(16,27,3,53);
  138.  
  139.   dotdeer0 = newwin(3,71,0,8);
  140.  
  141.   stardeer0 = newwin(4,56,0,8);
  142.  
  143.   lildeer0 = newwin(7,53,0,8);
  144.   lildeer1 = newwin(2,4,0,0);
  145.   lildeer2 = newwin(2,4,0,0);
  146.   lildeer3 = newwin(2,4,0,0);
  147.  
  148.   middeer0 = newwin(15,42,0,8);
  149.   middeer1 = newwin(3,7,0,0);
  150.   middeer2 = newwin(3,7,0,0);
  151.   middeer3 = newwin(3,7,0,0);
  152.  
  153.   bigdeer0 = newwin(10,23,0,0);
  154.   bigdeer1 = newwin(10,23,0,0);
  155.   bigdeer2 = newwin(10,23,0,0);
  156.   bigdeer3 = newwin(10,23,0,0);
  157.   bigdeer4 = newwin(10,23,0,0);
  158.  
  159.   lookdeer0 = newwin(10,25,0,0);
  160.   lookdeer1 = newwin(10,25,0,0);
  161.   lookdeer2 = newwin(10,25,0,0);
  162.   lookdeer3 = newwin(10,25,0,0);
  163.   lookdeer4 = newwin(10,25,0,0);
  164.  
  165.   w_holiday = newwin(1,26,3,27);
  166.  
  167.   w_del_msg = newwin(1,12,23,68);
  168.  
  169.   mvwaddstr(w_del_msg,0,0,"DEL to quit");
  170.  
  171.   mvwaddstr(w_holiday,0,0,"H A P P Y  H O L I D A Y S");
  172.  
  173.   /* set up the windows for our various reindeer */
  174.  
  175.   /* lildeer1 */
  176.   mvwaddch(lildeer1,0,0,'V');
  177.   mvwaddch(lildeer1,1,0,'@');
  178.   mvwaddch(lildeer1,1,1,'<');
  179.   mvwaddch(lildeer1,1,2,'>');
  180.   mvwaddch(lildeer1,1,3,'~');
  181.  
  182.   /* lildeer2 */
  183.   mvwaddch(lildeer2,0,0,'V');
  184.   mvwaddch(lildeer2,1,0,'@');
  185.   mvwaddch(lildeer2,1,1,'|');
  186.   mvwaddch(lildeer2,1,2,'|');
  187.   mvwaddch(lildeer2,1,3,'~');
  188.  
  189.   /* lildeer3 */
  190.   mvwaddch(lildeer3,0,0,'V');
  191.   mvwaddch(lildeer3,1,0,'@');
  192.   mvwaddch(lildeer3,1,1,'>');
  193.   mvwaddch(lildeer3,1,2,'<');
  194.   mvwaddch(lildeer2,1,3,'~');
  195.  
  196.  
  197.   /* middeer1 */
  198.   mvwaddch(middeer1,0,2,'y');
  199.   mvwaddch(middeer1,0,3,'y');
  200.   mvwaddch(middeer1,1,2,'0');
  201.   mvwaddch(middeer1,1,3,'(');
  202.   mvwaddch(middeer1,1,4,'=');
  203.   mvwaddch(middeer1,1,5,')');
  204.   mvwaddch(middeer1,1,6,'~');
  205.   mvwaddch(middeer1,2,3,'\\');
  206.   mvwaddch(middeer1,2,4,'/');
  207.  
  208.   /* middeer2 */
  209.   mvwaddch(middeer2,0,2,'y');
  210.   mvwaddch(middeer2,0,3,'y');
  211.   mvwaddch(middeer2,1,2,'0');
  212.   mvwaddch(middeer2,1,3,'(');
  213.   mvwaddch(middeer2,1,4,'=');
  214.   mvwaddch(middeer2,1,5,')');
  215.   mvwaddch(middeer2,1,6,'~');
  216.   mvwaddch(middeer2,2,3,'|');
  217.   mvwaddch(middeer2,2,5,'|');
  218.  
  219.   /* middeer3 */
  220.   mvwaddch(middeer3,0,2,'y');
  221.   mvwaddch(middeer3,0,3,'y');
  222.   mvwaddch(middeer3,1,2,'0');
  223.   mvwaddch(middeer3,1,3,'(');
  224.   mvwaddch(middeer3,1,4,'=');
  225.   mvwaddch(middeer3,1,5,')');
  226.   mvwaddch(middeer3,1,6,'~');
  227.   mvwaddch(middeer3,2,2,'/');
  228.   mvwaddch(middeer3,2,6,'\\');
  229.  
  230.  
  231.   /* bigdeer1 */
  232.   mvwaddch(bigdeer1,0,17,'\\');
  233.   mvwaddch(bigdeer1,0,18,'/');
  234.   mvwaddch(bigdeer1,0,20,'\\');
  235.   mvwaddch(bigdeer1,0,21,'/');
  236.   mvwaddch(bigdeer1,1,18,'\\');
  237.   mvwaddch(bigdeer1,1,20,'/');
  238.   mvwaddch(bigdeer1,2,19,'|');
  239.   mvwaddch(bigdeer1,2,20,'_');
  240.   mvwaddch(bigdeer1,3,18,'/');
  241.   mvwaddch(bigdeer1,3,19,'^');
  242.   mvwaddch(bigdeer1,3,20,'0');
  243.   mvwaddch(bigdeer1,3,21,'\\');
  244.   mvwaddch(bigdeer1,4,17,'/');
  245.   mvwaddch(bigdeer1,4,18,'/');
  246.   mvwaddch(bigdeer1,4,19,'\\');
  247.   mvwaddch(bigdeer1,4,22,'\\');
  248.   mvwaddstr(bigdeer1,5,7,"^~~~~~~~~//  ~~U");
  249.   mvwaddstr(bigdeer1,6,7,"( \\_____( /");
  250.   mvwaddstr(bigdeer1,7,8,"( )    /");
  251.   mvwaddstr(bigdeer1,8,9,"\\\\   /");
  252.   mvwaddstr(bigdeer1,9,11,"\\>/>");
  253.  
  254.   /* bigdeer2 */
  255.   mvwaddch(bigdeer2,0,17,'\\');
  256.   mvwaddch(bigdeer2,0,18,'/');
  257.   mvwaddch(bigdeer2,0,20,'\\');
  258.   mvwaddch(bigdeer2,0,21,'/');
  259.   mvwaddch(bigdeer2,1,18,'\\');
  260.   mvwaddch(bigdeer2,1,20,'/');
  261.   mvwaddch(bigdeer2,2,19,'|');
  262.   mvwaddch(bigdeer2,2,20,'_');
  263.   mvwaddch(bigdeer2,3,18,'/');
  264.   mvwaddch(bigdeer2,3,19,'^');
  265.   mvwaddch(bigdeer2,3,20,'0');
  266.   mvwaddch(bigdeer2,3,21,'\\');
  267.   mvwaddch(bigdeer2,4,17,'/');
  268.   mvwaddch(bigdeer2,4,18,'/');
  269.   mvwaddch(bigdeer2,4,19,'\\');
  270.   mvwaddch(bigdeer2,4,22,'\\');
  271.   mvwaddstr(bigdeer2,5,7,"^~~~~~~~~//  ~~U");
  272.   mvwaddstr(bigdeer2,6,7,"(( )____( /");
  273.   mvwaddstr(bigdeer2,7,7,"( /      |");
  274.   mvwaddstr(bigdeer2,8,8,"\\/      |");
  275.   mvwaddstr(bigdeer2,9,9,"|>     |>");
  276.  
  277.   /* bigdeer3 */
  278.   mvwaddch(bigdeer3,0,17,'\\');
  279.   mvwaddch(bigdeer3,0,18,'/');
  280.   mvwaddch(bigdeer3,0,20,'\\');
  281.   mvwaddch(bigdeer3,0,21,'/');
  282.   mvwaddch(bigdeer3,1,18,'\\');
  283.   mvwaddch(bigdeer3,1,20,'/');
  284.   mvwaddch(bigdeer3,2,19,'|');
  285.   mvwaddch(bigdeer3,2,20,'_');
  286.   mvwaddch(bigdeer3,3,18,'/');
  287.   mvwaddch(bigdeer3,3,19,'^');
  288.   mvwaddch(bigdeer3,3,20,'0');
  289.   mvwaddch(bigdeer3,3,21,'\\');
  290.   mvwaddch(bigdeer3,4,17,'/');
  291.   mvwaddch(bigdeer3,4,18,'/');
  292.   mvwaddch(bigdeer3,4,19,'\\');
  293.   mvwaddch(bigdeer3,4,22,'\\');
  294.   mvwaddstr(bigdeer3,5,7,"^~~~~~~~~//  ~~U");
  295.   mvwaddstr(bigdeer3,6,6,"( ()_____( /");
  296.   mvwaddstr(bigdeer3,7,6,"/ /       /");
  297.   mvwaddstr(bigdeer3,8,5,"|/          \\");
  298.   mvwaddstr(bigdeer3,9,5,"/>           \\>");
  299.  
  300.   /* bigdeer4 */
  301.   mvwaddch(bigdeer4,0,17,'\\');
  302.   mvwaddch(bigdeer4,0,18,'/');
  303.   mvwaddch(bigdeer4,0,20,'\\');
  304.   mvwaddch(bigdeer4,0,21,'/');
  305.   mvwaddch(bigdeer4,1,18,'\\');
  306.   mvwaddch(bigdeer4,1,20,'/');
  307.   mvwaddch(bigdeer4,2,19,'|');
  308.   mvwaddch(bigdeer4,2,20,'_');
  309.   mvwaddch(bigdeer4,3,18,'/');
  310.   mvwaddch(bigdeer4,3,19,'^');
  311.   mvwaddch(bigdeer4,3,20,'0');
  312.   mvwaddch(bigdeer4,3,21,'\\');
  313.   mvwaddch(bigdeer4,4,17,'/');
  314.   mvwaddch(bigdeer4,4,18,'/');
  315.   mvwaddch(bigdeer4,4,19,'\\');
  316.   mvwaddch(bigdeer4,4,22,'\\');
  317.   mvwaddstr(bigdeer4,5,7,"^~~~~~~~~//  ~~U");
  318.   mvwaddstr(bigdeer4,6,6,"( )______( /");
  319.   mvwaddstr(bigdeer4,7,5,"(/          \\");
  320.   mvwaddstr(bigdeer4,8,0,"v___=             ----^");
  321.  
  322.  
  323.   /* lookdeer1 */
  324.   mvwaddstr(lookdeer1,0,16,"\\/     \\/");
  325.   mvwaddstr(lookdeer1,1,17,"\\Y/ \\Y/");
  326.   mvwaddstr(lookdeer1,2,19,"\\=/");
  327.   mvwaddstr(lookdeer1,3,17,"^\\o o/^");
  328.   mvwaddstr(lookdeer1,4,17,"//( )");
  329.   mvwaddstr(lookdeer1,5,7,"^~~~~~~~~// \\O/");
  330.   mvwaddstr(lookdeer1,6,7,"( \\_____( /");
  331.   mvwaddstr(lookdeer1,7,8,"( )    /");
  332.   mvwaddstr(lookdeer1,8,9,"\\\\   /");
  333.   mvwaddstr(lookdeer1,9,11,"\\>/>");
  334.  
  335.   /* lookdeer2 */
  336.   mvwaddstr(lookdeer2,0,16,"\\/     \\/");
  337.   mvwaddstr(lookdeer2,1,17,"\\Y/ \\Y/");
  338.   mvwaddstr(lookdeer2,2,19,"\\=/");
  339.   mvwaddstr(lookdeer2,3,17,"^\\o o/^");
  340.   mvwaddstr(lookdeer2,4,17,"//( )");
  341.   mvwaddstr(lookdeer2,5,7,"^~~~~~~~~// \\O/");
  342.   mvwaddstr(lookdeer2,6,7,"(( )____( /");
  343.   mvwaddstr(lookdeer2,7,7,"( /      |");
  344.   mvwaddstr(lookdeer2,8,8,"\\/      |");
  345.   mvwaddstr(lookdeer2,9,9,"|>     |>");
  346.  
  347.   /* lookdeer3 */
  348.   mvwaddstr(lookdeer3,0,16,"\\/     \\/");
  349.   mvwaddstr(lookdeer3,1,17,"\\Y/ \\Y/");
  350.   mvwaddstr(lookdeer3,2,19,"\\=/");
  351.   mvwaddstr(lookdeer3,3,17,"^\\o o/^");
  352.   mvwaddstr(lookdeer3,4,17,"//( )");
  353.   mvwaddstr(lookdeer3,5,7,"^~~~~~~~~// \\O/");
  354.   mvwaddstr(lookdeer3,6,6,"( ()_____( /");
  355.   mvwaddstr(lookdeer3,7,6,"/ /       /");
  356.   mvwaddstr(lookdeer3,8,5,"|/          \\");
  357.   mvwaddstr(lookdeer3,9,5,"/>           \\>");
  358.  
  359.   /* lookdeer4 */
  360.   mvwaddstr(lookdeer4,0,16,"\\/     \\/");
  361.   mvwaddstr(lookdeer4,1,17,"\\Y/ \\Y/");
  362.   mvwaddstr(lookdeer4,2,19,"\\=/");
  363.   mvwaddstr(lookdeer4,3,17,"^\\o o/^");
  364.   mvwaddstr(lookdeer4,4,17,"//( )");
  365.   mvwaddstr(lookdeer4,5,7,"^~~~~~~~~// \\O/");
  366.   mvwaddstr(lookdeer4,6,6,"( )______( /");
  367.   mvwaddstr(lookdeer4,7,5,"(/          \\");
  368.   mvwaddstr(lookdeer4,8,0,"v___=             ----^");
  369.  
  370.  
  371.  
  372.   /***********************************************/
  373.  
  374.   while(1)
  375.   {
  376.     clear();
  377.     werase(treescrn);
  378.     touchwin(treescrn);
  379.     werase(treescrn2);
  380.     touchwin(treescrn2);
  381.     werase(treescrn8);
  382.     touchwin(treescrn8);
  383.     refresh();
  384.     sleep(1);
  385.     boxit();
  386.     del_msg();
  387.     sleep(1);
  388.     seas();
  389.     del_msg();
  390.     sleep(1);
  391.     greet();
  392.     del_msg();
  393.     sleep(1);
  394.     fromwho();
  395.     del_msg();
  396.     sleep(1);
  397.     tree();
  398.     sleep(1);
  399.     balls();
  400.     sleep(1);
  401.     star();
  402.     sleep(1);
  403.     strng1();
  404.     strng2();
  405.     strng3();
  406.     strng4();
  407.     strng5();
  408.  
  409.  
  410.   /* set up the windows for our blinking trees */
  411.   /* **************************************** */
  412.   /* treescrn3 */
  413.  
  414.                overwrite(treescrn, treescrn3);
  415.  
  416.              /*balls*/
  417.                mvwaddch(treescrn3, 4, 18, ' ');
  418.                mvwaddch(treescrn3, 7, 6, ' ');
  419.                mvwaddch(treescrn3, 8, 19, ' ');
  420.                mvwaddch(treescrn3, 11, 22, ' ');
  421.              
  422.              /*star*/
  423.                mvwaddch(treescrn3, 0, 12, '*');
  424.              
  425.              /*strng1*/
  426.                mvwaddch(treescrn3, 3, 11, ' ');
  427.              
  428.              /*strng2*/
  429.                mvwaddch(treescrn3, 5, 13, ' ');
  430.                mvwaddch(treescrn3, 6, 10, ' ');
  431.              
  432.              /*strng3*/
  433.                mvwaddch(treescrn3, 7, 16, ' ');
  434.                mvwaddch(treescrn3, 7, 14, ' ');
  435.              
  436.              /*strng4*/
  437.                mvwaddch(treescrn3, 10, 13, ' ');
  438.                mvwaddch(treescrn3, 10, 10, ' ');
  439.                mvwaddch(treescrn3, 11, 8, ' ');
  440.              
  441.              /*strng5*/
  442.                mvwaddch(treescrn3, 11, 18, ' ');
  443.                mvwaddch(treescrn3, 12, 13, ' ');
  444.              
  445.              
  446.   /* treescrn4 */
  447.  
  448.                overwrite(treescrn, treescrn4);
  449.  
  450.              /*balls*/
  451.                mvwaddch(treescrn4, 3, 9, ' ');
  452.                mvwaddch(treescrn4, 4, 16, ' ');
  453.                mvwaddch(treescrn4, 7, 6, ' ');
  454.                mvwaddch(treescrn4, 8, 19, ' ');
  455.                mvwaddch(treescrn4, 11, 2, ' ');
  456.                mvwaddch(treescrn4, 12, 23, ' ');
  457.              
  458.              /*star*/
  459.                wstandout(treescrn4);
  460.                mvwaddch(treescrn4, 0, 12, '*');
  461.                wstandend(treescrn4);
  462.              
  463.              /*strng1*/
  464.                mvwaddch(treescrn4, 3, 13, ' ');
  465.              
  466.              /*strng2*/
  467.              
  468.              /*strng3*/
  469.                mvwaddch(treescrn4, 7, 15, ' ');
  470.                mvwaddch(treescrn4, 8, 11, ' ');
  471.              
  472.              /*strng4*/
  473.                mvwaddch(treescrn4, 9, 16, ' ');
  474.                mvwaddch(treescrn4, 10, 12, ' ');
  475.                mvwaddch(treescrn4, 11, 8, ' ');
  476.              
  477.              /*strng5*/
  478.                mvwaddch(treescrn4, 11, 18, ' ');
  479.                mvwaddch(treescrn4, 12, 14, ' ');
  480.              
  481.              
  482.   /* treescrn5 */
  483.  
  484.                overwrite(treescrn, treescrn5);
  485.  
  486.              /*balls*/
  487.                mvwaddch(treescrn5, 3, 15, ' ');
  488.                mvwaddch(treescrn5, 10, 20, ' ');
  489.                mvwaddch(treescrn5, 12, 1, ' ');
  490.              
  491.              /*star*/
  492.                mvwaddch(treescrn5, 0, 12, '*');
  493.              
  494.              /*strng1*/
  495.                mvwaddch(treescrn5, 3, 11, ' ');
  496.              
  497.              /*strng2*/
  498.                mvwaddch(treescrn5, 5, 12, ' ');
  499.              
  500.              /*strng3*/
  501.                mvwaddch(treescrn5, 7, 14, ' ');
  502.                mvwaddch(treescrn5, 8, 10, ' ');
  503.              
  504.              /*strng4*/
  505.                mvwaddch(treescrn5, 9, 15, ' ');
  506.                mvwaddch(treescrn5, 10, 11, ' ');
  507.                mvwaddch(treescrn5, 11, 7, ' ');
  508.              
  509.              /*strng5*/
  510.                mvwaddch(treescrn5, 11, 17, ' ');
  511.                mvwaddch(treescrn5, 12, 13, ' ');
  512.              
  513.   /* treescrn6 */
  514.  
  515.                overwrite(treescrn, treescrn6);
  516.  
  517.              /*balls*/
  518.                mvwaddch(treescrn6, 6, 7, ' ');
  519.                mvwaddch(treescrn6, 7, 18, ' ');
  520.                mvwaddch(treescrn6, 10, 4, ' ');
  521.                mvwaddch(treescrn6, 11, 23, ' ');
  522.              
  523.              /*star*/
  524.                wstandout(treescrn6);
  525.                mvwaddch(treescrn6, 0, 12, '*');
  526.                wstandend(treescrn6);
  527.              
  528.              /*strng1*/
  529.              
  530.              /*strng2*/
  531.                mvwaddch(treescrn6, 5, 11, ' ');
  532.              
  533.              /*strng3*/
  534.                mvwaddch(treescrn6, 7, 13, ' ');
  535.                mvwaddch(treescrn6, 8, 9, ' ');
  536.              
  537.              /*strng4*/
  538.                mvwaddch(treescrn6, 9, 14, ' ');
  539.                mvwaddch(treescrn6, 10, 10, ' ');
  540.                mvwaddch(treescrn6, 11, 6, ' ');
  541.              
  542.              /*strng5*/
  543.                mvwaddch(treescrn6, 11, 16, ' ');
  544.                mvwaddch(treescrn6, 12, 12, ' ');
  545.              
  546.   /* treescrn7 */
  547.  
  548.                overwrite(treescrn, treescrn7);
  549.  
  550.              /*balls*/
  551.                mvwaddch(treescrn7, 3, 15, ' ');
  552.                mvwaddch(treescrn7, 6, 7, ' ');
  553.                mvwaddch(treescrn7, 7, 18, ' ');
  554.                mvwaddch(treescrn7, 10, 4, ' ');
  555.                mvwaddch(treescrn7, 11, 22, ' ');
  556.              
  557.              /*star*/
  558.                mvwaddch(treescrn7, 0, 12, '*');
  559.              
  560.              /*strng1*/
  561.                mvwaddch(treescrn7, 3, 12, ' ');
  562.              
  563.              /*strng2*/
  564.                mvwaddch(treescrn7, 5, 13, ' ');
  565.                mvwaddch(treescrn7, 6, 9, ' ');
  566.              
  567.              /*strng3*/
  568.                mvwaddch(treescrn7, 7, 15, ' ');
  569.                mvwaddch(treescrn7, 8, 11, ' ');
  570.              
  571.              /*strng4*/
  572.                mvwaddch(treescrn7, 9, 16, ' ');
  573.                mvwaddch(treescrn7, 10, 12, ' ');
  574.                mvwaddch(treescrn7, 11, 8, ' ');
  575.              
  576.              /*strng5*/
  577.                mvwaddch(treescrn7, 11, 18, ' ');
  578.                mvwaddch(treescrn7, 12, 14, ' ');
  579.              
  580.  
  581.     sleep(1);
  582.     reindeer();
  583.  
  584.     touchwin(w_holiday);
  585.     wrefresh(w_holiday);
  586.     wrefresh(w_del_msg);
  587.  
  588.     sleep(1);
  589.     for(loopy = 0;loopy < 100;loopy++)
  590.     {
  591.       blinkit();
  592.     }
  593.  
  594. #ifdef NOLOOP
  595.     done();
  596. #endif
  597.  
  598.   }
  599. }
  600.  
  601. boxit()
  602. {
  603.  int x = 0;
  604.  
  605.   while(x < 20)
  606.   {
  607.     mvaddch(x, 7, '|');
  608.     ++x;
  609.   }
  610.   
  611.   x = 8;
  612.  
  613.   while(x < 80)
  614.   {
  615.     mvaddch(19, x, '_');
  616.     ++x;
  617.   }
  618.   
  619.   x = 0;
  620.  
  621.   while(x < 80)
  622.   {
  623.     mvaddch(22, x, '_');
  624.     ++x;
  625.   }
  626.   
  627.  
  628. }
  629.  
  630. seas()
  631. {
  632.   mvaddch(4, 1, 'S');
  633.   mvaddch(6, 1, 'E');
  634.   mvaddch(8, 1, 'A');
  635.   mvaddch(10, 1, 'S');
  636.   mvaddch(12, 1, 'O');
  637.   mvaddch(14, 1, 'N');
  638.   mvaddch(16, 1, '`');
  639.   mvaddch(18, 1, 'S');
  640.  
  641. }
  642.  
  643.  
  644. greet()
  645. {
  646.   mvaddch(3, 5, 'G');
  647.   mvaddch(5, 5, 'R');
  648.   mvaddch(7, 5, 'E');
  649.   mvaddch(9, 5, 'E');
  650.   mvaddch(11, 5, 'T');
  651.   mvaddch(13, 5, 'I');
  652.   mvaddch(15, 5, 'N');
  653.   mvaddch(17, 5, 'G');
  654.   mvaddch(19, 5, 'S');
  655.  
  656. }
  657.  
  658.  
  659. fromwho()
  660. {
  661.   mvaddstr(21, 13, FROMWHO);
  662.  
  663. }
  664.  
  665.  
  666. del_msg()
  667. {
  668.   mvaddstr(23, 68, "DEL to quit");
  669.  
  670.   refresh();
  671.  
  672. }
  673.  
  674.  
  675. tree()
  676. {
  677.   mvwaddch(treescrn, 1, 11, '/');
  678.   mvwaddch(treescrn, 2, 11, '/');
  679.   mvwaddch(treescrn, 3, 10, '/');
  680.   mvwaddch(treescrn, 4, 9, '/');
  681.   mvwaddch(treescrn, 5, 9, '/');
  682.   mvwaddch(treescrn, 6, 8, '/');
  683.   mvwaddch(treescrn, 7, 7, '/');
  684.   mvwaddch(treescrn, 8, 6, '/');
  685.   mvwaddch(treescrn, 9, 6, '/');
  686.   mvwaddch(treescrn, 10, 5, '/');
  687.   mvwaddch(treescrn, 11, 3, '/');
  688.   mvwaddch(treescrn, 12, 2, '/');
  689.  
  690.   mvwaddch(treescrn, 1, 13, '\\');
  691.   mvwaddch(treescrn, 2, 13, '\\');
  692.   mvwaddch(treescrn, 3, 14, '\\');
  693.   mvwaddch(treescrn, 4, 15, '\\');
  694.   mvwaddch(treescrn, 5, 15, '\\');
  695.   mvwaddch(treescrn, 6, 16, '\\');
  696.   mvwaddch(treescrn, 7, 17, '\\');
  697.   mvwaddch(treescrn, 8, 18, '\\');
  698.   mvwaddch(treescrn, 9, 18, '\\');
  699.   mvwaddch(treescrn, 10, 19, '\\');
  700.   mvwaddch(treescrn, 11, 21, '\\');
  701.   mvwaddch(treescrn, 12, 22, '\\');
  702.  
  703.   mvwaddch(treescrn, 4, 10, '_');
  704.   mvwaddch(treescrn, 4, 14, '_');
  705.   mvwaddch(treescrn, 8, 7, '_');
  706.   mvwaddch(treescrn, 8, 17, '_');
  707.  
  708.   mvwaddstr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\");
  709.  
  710.   mvwaddstr(treescrn, 14, 11, "| |");
  711.   mvwaddstr(treescrn, 15, 11, "|_|");
  712.  
  713.   wrefresh(treescrn);
  714.   wrefresh(w_del_msg);
  715.  
  716. }
  717.  
  718.  
  719. balls()
  720. {
  721.  
  722.   overwrite(treescrn, treescrn2);
  723.  
  724.   mvwaddch(treescrn2, 3, 9, '@');
  725.   mvwaddch(treescrn2, 3, 15, '@');
  726.   mvwaddch(treescrn2, 4, 8, '@');
  727.   mvwaddch(treescrn2, 4, 16, '@');
  728.   mvwaddch(treescrn2, 5, 7, '@');
  729.   mvwaddch(treescrn2, 5, 17, '@');
  730.   mvwaddch(treescrn2, 7, 6, '@');
  731.   mvwaddch(treescrn2, 7, 18, '@');
  732.   mvwaddch(treescrn2, 8, 5, '@');
  733.   mvwaddch(treescrn2, 8, 19, '@');
  734.   mvwaddch(treescrn2, 10, 4, '@');
  735.   mvwaddch(treescrn2, 10, 20, '@');
  736.   mvwaddch(treescrn2, 11, 2, '@');
  737.   mvwaddch(treescrn2, 11, 22, '@');
  738.   mvwaddch(treescrn2, 12, 1, '@');
  739.   mvwaddch(treescrn2, 12, 23, '@');
  740.  
  741.   wrefresh(treescrn2);
  742.   wrefresh(w_del_msg);
  743. }
  744.  
  745.  
  746. star()
  747. {
  748.   wstandout(treescrn2);
  749.   mvwaddch(treescrn2, 0, 12, '*');
  750.   wstandend(treescrn2);
  751.  
  752.   wrefresh(treescrn2);
  753.   wrefresh(w_del_msg);
  754. }
  755.  
  756.  
  757. strng1()
  758. {
  759.   mvwaddch(treescrn2, 3, 13, '\'');
  760.   mvwaddch(treescrn2, 3, 12, ':');
  761.   mvwaddch(treescrn2, 3, 11, '.');
  762.  
  763.   wrefresh(treescrn2);
  764.   wrefresh(w_del_msg);
  765. }
  766.  
  767.  
  768. strng2()
  769. {
  770.   mvwaddch(treescrn2, 5, 14, '\'');
  771.   mvwaddch(treescrn2, 5, 13, ':');
  772.   mvwaddch(treescrn2, 5, 12, '.');
  773.   mvwaddch(treescrn2, 5, 11, ',');
  774.   mvwaddch(treescrn2, 6, 10, '\'');
  775.   mvwaddch(treescrn2, 6, 9, ':');
  776.  
  777.   wrefresh(treescrn2);
  778.   wrefresh(w_del_msg);
  779. }
  780.  
  781.  
  782. strng3()
  783. {
  784.   mvwaddch(treescrn2, 7, 16, '\'');
  785.   mvwaddch(treescrn2, 7, 15, ':');
  786.   mvwaddch(treescrn2, 7, 14, '.');
  787.   mvwaddch(treescrn2, 7, 13, ',');
  788.   mvwaddch(treescrn2, 8, 12, '\'');
  789.   mvwaddch(treescrn2, 8, 11, ':');
  790.   mvwaddch(treescrn2, 8, 10, '.');
  791.   mvwaddch(treescrn2, 8, 9, ',');
  792.  
  793.   wrefresh(treescrn2);
  794.   wrefresh(w_del_msg);
  795. }
  796.  
  797.  
  798. strng4()
  799. {
  800.   mvwaddch(treescrn2, 9, 17, '\'');
  801.   mvwaddch(treescrn2, 9, 16, ':');
  802.   mvwaddch(treescrn2, 9, 15, '.');
  803.   mvwaddch(treescrn2, 9, 14, ',');
  804.   mvwaddch(treescrn2, 10, 13, '\'');
  805.   mvwaddch(treescrn2, 10, 12, ':');
  806.   mvwaddch(treescrn2, 10, 11, '.');
  807.   mvwaddch(treescrn2, 10, 10, ',');
  808.   mvwaddch(treescrn2, 11, 9, '\'');
  809.   mvwaddch(treescrn2, 11, 8, ':');
  810.   mvwaddch(treescrn2, 11, 7, '.');
  811.   mvwaddch(treescrn2, 11, 6, ',');
  812.   mvwaddch(treescrn2, 12, 5, '\'');
  813.  
  814.   wrefresh(treescrn2);
  815.   wrefresh(w_del_msg);
  816. }
  817.  
  818.  
  819. strng5()
  820. {
  821.   mvwaddch(treescrn2, 11, 19, '\'');
  822.   mvwaddch(treescrn2, 11, 18, ':');
  823.   mvwaddch(treescrn2, 11, 17, '.');
  824.   mvwaddch(treescrn2, 11, 16, ',');
  825.   mvwaddch(treescrn2, 12, 15, '\'');
  826.   mvwaddch(treescrn2, 12, 14, ':');
  827.   mvwaddch(treescrn2, 12, 13, '.');
  828.   mvwaddch(treescrn2, 12, 12, ',');
  829.  
  830.   /* save a fully lit tree */
  831.   overwrite(treescrn2, treescrn);
  832.  
  833.   wrefresh(treescrn2);
  834.   wrefresh(w_del_msg);
  835. }
  836.  
  837.  
  838.  
  839. blinkit()
  840. {
  841.  static int cycle;
  842.  
  843.   if(cycle > 4)
  844.   {
  845.     cycle = 0;
  846.   }
  847.  
  848.  
  849.   touchwin(treescrn8);
  850.  
  851.   switch(cycle)
  852.   {
  853.  
  854.     case 0:
  855.                overwrite(treescrn3,treescrn8);
  856.                wrefresh(treescrn8);
  857.                wrefresh(w_del_msg);
  858.                
  859.                break;
  860.     case 1:
  861.                overwrite(treescrn4,treescrn8);
  862.                wrefresh(treescrn8);
  863.                wrefresh(w_del_msg);
  864.                
  865.                break;
  866.     case 2:
  867.                overwrite(treescrn5,treescrn8);
  868.                wrefresh(treescrn8);
  869.                wrefresh(w_del_msg);
  870.                
  871.                break;
  872.     case 3:
  873.                overwrite(treescrn6,treescrn8);
  874.                wrefresh(treescrn8);
  875.                wrefresh(w_del_msg);
  876.                
  877.                break;
  878.     case 4:
  879.                overwrite(treescrn7,treescrn8);
  880.                wrefresh(treescrn8);
  881.                wrefresh(w_del_msg);
  882.                
  883.                break;
  884.   }
  885.  
  886.    touchwin(treescrn8);
  887.  
  888.  
  889.  
  890.    /*ALL ON***************************************************/
  891.  
  892.  
  893.    overwrite(treescrn,treescrn8);
  894.    wrefresh(treescrn8);
  895.    wrefresh(w_del_msg);
  896.              
  897.  
  898.   ++cycle;
  899. }
  900.  
  901.  
  902. reindeer()
  903. {
  904.  int looper;
  905.  
  906.   y_pos = 0;
  907.  
  908.  
  909.   for(x_pos = 70; x_pos > 62; x_pos--)
  910.   {
  911.     if(x_pos < 62)
  912.     {
  913.       y_pos = 1;
  914.     }
  915.     for(looper = 0; looper < 4; looper++)
  916.     {
  917.       mvwaddch(dotdeer0, y_pos, x_pos, '.');
  918.       wrefresh(dotdeer0);
  919.       wrefresh(w_del_msg);
  920.       werase(dotdeer0);
  921.       wrefresh(dotdeer0);
  922.       wrefresh(w_del_msg);
  923.     }
  924.   }
  925.  
  926.   y_pos = 2;
  927.  
  928.   for(x_pos; x_pos > 50; x_pos--)
  929.   {
  930.  
  931.     for(looper = 0; looper < 4; looper++)
  932.     {
  933.  
  934.       if(x_pos < 56)
  935.       {
  936.         y_pos = 3;
  937.  
  938.         mvwaddch(stardeer0, y_pos, x_pos, '*');
  939.         wrefresh(stardeer0);
  940.         wrefresh(w_del_msg);
  941.         werase(stardeer0);
  942.         wrefresh(stardeer0);
  943.         wrefresh(w_del_msg);
  944.       }
  945.       else
  946.       {
  947.         mvwaddch(dotdeer0, y_pos, x_pos, '*');
  948.         wrefresh(dotdeer0);
  949.         wrefresh(w_del_msg);
  950.         werase(dotdeer0);
  951.         wrefresh(dotdeer0);
  952.         wrefresh(w_del_msg);
  953.       }
  954.     }
  955.   }
  956.  
  957.   x_pos = 58;
  958.  
  959.   for(y_pos = 2; y_pos < 5; y_pos++)
  960.   {
  961.     
  962.     touchwin(lildeer0);
  963.     wrefresh(lildeer0);
  964.     wrefresh(w_del_msg);
  965.  
  966.     for(looper = 0; looper < 4; looper++)
  967.     {
  968.       mvwin(lildeer3, y_pos, x_pos);
  969.       wrefresh(lildeer3);
  970.       wrefresh(w_del_msg);
  971.  
  972.       mvwin(lildeer2, y_pos, x_pos);
  973.       wrefresh(lildeer2);
  974.       wrefresh(w_del_msg);
  975.  
  976.       mvwin(lildeer1, y_pos, x_pos);
  977.       wrefresh(lildeer1);
  978.       wrefresh(w_del_msg);
  979.  
  980.       mvwin(lildeer2, y_pos, x_pos);
  981.       wrefresh(lildeer2);
  982.       wrefresh(w_del_msg);
  983.  
  984.       mvwin(lildeer3, y_pos, x_pos);
  985.       wrefresh(lildeer3);
  986.       wrefresh(w_del_msg);
  987.  
  988.       touchwin(lildeer0);
  989.       wrefresh(lildeer0);
  990.       wrefresh(w_del_msg);
  991.  
  992.       x_pos -= 2;
  993.     }
  994.   }
  995.  
  996.  
  997.   x_pos = 35;
  998.  
  999.   for(y_pos = 5; y_pos < 10; y_pos++)
  1000.   {
  1001.     
  1002.     touchwin(middeer0);
  1003.     wrefresh(middeer0);
  1004.     wrefresh(w_del_msg);
  1005.  
  1006.     for(looper = 0; looper < 2; looper++)
  1007.     {
  1008.       mvwin(middeer3, y_pos, x_pos);
  1009.       wrefresh(middeer3);
  1010.       wrefresh(w_del_msg);
  1011.  
  1012.       mvwin(middeer2, y_pos, x_pos);
  1013.       wrefresh(middeer2);
  1014.       wrefresh(w_del_msg);
  1015.  
  1016.       mvwin(middeer1, y_pos, x_pos);
  1017.       wrefresh(middeer1);
  1018.       wrefresh(w_del_msg);
  1019.  
  1020.       mvwin(middeer2, y_pos, x_pos);
  1021.       wrefresh(middeer2);
  1022.       wrefresh(w_del_msg);
  1023.  
  1024.       mvwin(middeer3, y_pos, x_pos);
  1025.       wrefresh(middeer3);
  1026.       wrefresh(w_del_msg);
  1027.  
  1028.       touchwin(middeer0);
  1029.       wrefresh(middeer0);
  1030.       wrefresh(w_del_msg);
  1031.  
  1032.       x_pos -= 3;
  1033.     }
  1034.   }
  1035.  
  1036.   sleep(2);
  1037.  
  1038.   y_pos = 1;
  1039.  
  1040.   for(x_pos = 8; x_pos < 16; x_pos++)
  1041.   {
  1042.   
  1043.       mvwin(bigdeer4, y_pos, x_pos);
  1044.       wrefresh(bigdeer4);
  1045.       wrefresh(w_del_msg);
  1046.  
  1047.       mvwin(bigdeer3, y_pos, x_pos);
  1048.       wrefresh(bigdeer3);
  1049.       wrefresh(w_del_msg);
  1050.  
  1051.       mvwin(bigdeer2, y_pos, x_pos);
  1052.       wrefresh(bigdeer2);
  1053.       wrefresh(w_del_msg);
  1054.  
  1055.       mvwin(bigdeer1, y_pos, x_pos);
  1056.       wrefresh(bigdeer1);
  1057.       wrefresh(w_del_msg);
  1058.  
  1059.       mvwin(bigdeer2, y_pos, x_pos);
  1060.       wrefresh(bigdeer2);
  1061.       wrefresh(w_del_msg);
  1062.  
  1063.       mvwin(bigdeer3, y_pos, x_pos);
  1064.       wrefresh(bigdeer3);
  1065.       wrefresh(w_del_msg);
  1066.  
  1067.       mvwin(bigdeer4, y_pos, x_pos);
  1068.       wrefresh(bigdeer4);
  1069.       wrefresh(w_del_msg);
  1070.  
  1071.       mvwin(bigdeer0, y_pos, x_pos);
  1072.       wrefresh(bigdeer0);
  1073.       wrefresh(w_del_msg);
  1074.   }
  1075.  
  1076.     --x_pos;
  1077.  
  1078.     for(looper = 0; looper < 6; looper++)
  1079.     {
  1080.       mvwin(lookdeer4, y_pos, x_pos);
  1081.       wrefresh(lookdeer4);
  1082.       wrefresh(w_del_msg);
  1083.  
  1084.       mvwin(lookdeer3, y_pos, x_pos);
  1085.       wrefresh(lookdeer3);
  1086.       wrefresh(w_del_msg);
  1087.  
  1088.       mvwin(lookdeer2, y_pos, x_pos);
  1089.       wrefresh(lookdeer2);
  1090.       wrefresh(w_del_msg);
  1091.  
  1092.       mvwin(lookdeer1, y_pos, x_pos);
  1093.       wrefresh(lookdeer1);
  1094.       wrefresh(w_del_msg);
  1095.  
  1096.       mvwin(lookdeer2, y_pos, x_pos);
  1097.       wrefresh(lookdeer2);
  1098.       wrefresh(w_del_msg);
  1099.  
  1100.       mvwin(lookdeer3, y_pos, x_pos);
  1101.       wrefresh(lookdeer3);
  1102.       wrefresh(w_del_msg);
  1103.  
  1104.       mvwin(lookdeer4, y_pos, x_pos);
  1105.       wrefresh(lookdeer4);
  1106.       wrefresh(w_del_msg);
  1107.  
  1108.     }
  1109.  
  1110.     mvwin(lookdeer0, y_pos, x_pos);
  1111.     wrefresh(lookdeer0);
  1112.     wrefresh(w_del_msg);
  1113.  
  1114.   for(y_pos; y_pos < 10; y_pos++)
  1115.   {
  1116.  
  1117.     for(looper = 0; looper < 2; looper++)
  1118.     {
  1119.       mvwin(bigdeer4, y_pos, x_pos);
  1120.       wrefresh(bigdeer4);
  1121.       wrefresh(w_del_msg);
  1122.  
  1123.       mvwin(bigdeer3, y_pos, x_pos);
  1124.       wrefresh(bigdeer3);
  1125.       wrefresh(w_del_msg);
  1126.  
  1127.       mvwin(bigdeer2, y_pos, x_pos);
  1128.       wrefresh(bigdeer2);
  1129.       wrefresh(w_del_msg);
  1130.  
  1131.       mvwin(bigdeer1, y_pos, x_pos);
  1132.       wrefresh(bigdeer1);
  1133.       wrefresh(w_del_msg);
  1134.  
  1135.       mvwin(bigdeer2, y_pos, x_pos);
  1136.       wrefresh(bigdeer2);
  1137.       wrefresh(w_del_msg);
  1138.  
  1139.       mvwin(bigdeer3, y_pos, x_pos);
  1140.       wrefresh(bigdeer3);
  1141.       wrefresh(w_del_msg);
  1142.  
  1143.       mvwin(bigdeer4, y_pos, x_pos);
  1144.       wrefresh(bigdeer4);
  1145.       wrefresh(w_del_msg);
  1146.     }
  1147.       mvwin(bigdeer0, y_pos, x_pos);
  1148.       wrefresh(bigdeer0);
  1149.       wrefresh(w_del_msg);
  1150.   }
  1151.  
  1152.   --y_pos;
  1153.  
  1154.   mvwin(lookdeer3, y_pos, x_pos);
  1155.   wrefresh(lookdeer3);
  1156.   wrefresh(w_del_msg);
  1157.  
  1158. }
  1159.  
  1160.  
  1161.  
  1162. void done()
  1163. {
  1164.   signal(SIGINT,done);
  1165.   signal(SIGHUP,done);
  1166.   signal(SIGTERM,done);
  1167.   signal(SIGQUIT,done);
  1168.   clear();
  1169.   refresh();
  1170.   endwin();
  1171.   exit(0);
  1172. }
  1173.