Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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. /* IMPLEMENTATION                                                             */
  21. /*                                                                            */
  22. /* Feel free to modify the defined string FROMWHO to reflect you, your        */
  23. /* organization, your site, whatever.                                         */
  24. /*                                                                            */
  25. /* This looks a lot better if you can turn off your cursor before execution.  */
  26. /* The cursor is distracting but it doesn't really ruin the show.             */
  27. /*                                                                            */
  28. /* At our site, we invoke this for our users just after login and the         */
  29. /* determination of terminal type.                                            */
  30. /*                                                                            */
  31. /*                                                                            */
  32. /* PORTABILITY                                                                */
  33. /*                                                                            */
  34. /* I wrote this using only the very simplest curses functions so that it      */
  35. /* might be the most portable. I was personally able to test on five          */
  36. /* different cpu/UNIX combinations.                                           */
  37. /*                                                                            */
  38. /*                                                                            */
  39. /* COMPILE                                                                    */
  40. /*                                                                            */
  41. /* usually this:                                                              */
  42. /*                                                                            */
  43. /* cc -O xmas.c -lcurses -o xmas -s                                           */
  44. /*                                                                            */
  45. /******************************************************************************/
  46.  
  47. #include <curses.h>
  48.  
  49. void lil(WINDOW *);
  50. void midtop(WINDOW *);
  51. void bigtop(WINDOW *);
  52. void bigface(WINDOW *, chtype);
  53. void legs1(WINDOW *);
  54. void legs2(WINDOW *);
  55. void legs3(WINDOW *);
  56. void legs4(WINDOW *);
  57. void initdeer(void);
  58. void boxit(void);
  59. void seas(void);
  60. void greet(void);
  61. void fromwho(void);
  62. void del_msg(void);
  63. void tree(void);
  64. void balls(void);
  65. void star(void);
  66. void strng1(void);
  67. void strng2(void);
  68. void strng3(void);
  69. void strng4(void);
  70. void strng5(void);
  71. void blinkit(void);
  72. void reindeer(void);
  73.  
  74. #define FROMWHO "From Larry Bartz, Mark Hessling and William McBrine"
  75.  
  76. int y_pos, x_pos;
  77.  
  78. WINDOW *treescrn, *treescrn2, *treescrn3, *treescrn4, *treescrn5,
  79.        *treescrn6, *treescrn7, *treescrn8, *dotdeer0, *stardeer0,
  80.        *lildeer0, *lildeer1, *lildeer2, *lildeer3, *middeer0,
  81.        *middeer1, *middeer2, *middeer3, *bigdeer0, *bigdeer1,
  82.        *bigdeer2, *bigdeer3, *bigdeer4, *lookdeer0, *lookdeer1,
  83.        *lookdeer2, *lookdeer3, *lookdeer4, *w_holiday, *w_del_msg;
  84.  
  85. int main(int argc, char **argv)
  86. {
  87.     int loopy;
  88.  
  89. #ifdef XCURSES
  90.     Xinitscr(argc, argv);
  91. #else
  92.     initscr();
  93. #endif
  94.     nodelay(stdscr, TRUE);
  95.     noecho();
  96.     nonl();
  97.     refresh();
  98.  
  99. #ifdef A_COLOR
  100.     if (has_colors())
  101.         start_color();
  102. #endif
  103.     curs_set(0);
  104.  
  105.     treescrn = newwin(16, 27, 3, 53);
  106.     treescrn2 = newwin(16, 27, 3, 53);
  107.     treescrn3 = newwin(16, 27, 3, 53);
  108.     treescrn4 = newwin(16, 27, 3, 53);
  109.     treescrn5 = newwin(16, 27, 3, 53);
  110.     treescrn6 = newwin(16, 27, 3, 53);
  111.     treescrn7 = newwin(16, 27, 3, 53);
  112.     treescrn8 = newwin(16, 27, 3, 53);
  113.  
  114.     w_holiday = newwin(1, 26, 3, 27);
  115.  
  116.     w_del_msg = newwin(1, 12, 23, 60);
  117.  
  118.     mvwaddstr(w_holiday, 0, 0, "H A P P Y  H O L I D A Y S");
  119.  
  120.     initdeer();
  121.  
  122.     clear();
  123.     werase(treescrn);
  124.     touchwin(treescrn);
  125.     werase(treescrn2);
  126.     touchwin(treescrn2);
  127.     werase(treescrn8);
  128.     touchwin(treescrn8);
  129.     refresh();
  130.     napms(1000);
  131.  
  132.     boxit();
  133.     del_msg();
  134.     napms(1000);
  135.  
  136.     seas();
  137.     del_msg();
  138.     napms(1000);
  139.  
  140.     greet();
  141.     del_msg();
  142.     napms(1000);
  143.  
  144.     fromwho();
  145.     del_msg();
  146.     napms(1000);
  147.  
  148.     tree();
  149.     napms(1000);
  150.  
  151.     balls();
  152.     napms(1000);
  153.  
  154.     star();
  155.     napms(1000);
  156.  
  157.     strng1();
  158.     strng2();
  159.     strng3();
  160.     strng4();
  161.     strng5();
  162.  
  163.     /* set up the windows for our blinking trees */
  164.     /* **************************************** */
  165.     /* treescrn3 */
  166.  
  167.     overlay(treescrn, treescrn3);
  168.  
  169.     /* balls */
  170.     mvwaddch(treescrn3, 4, 18, ' ');
  171.     mvwaddch(treescrn3, 7, 6, ' ');
  172.     mvwaddch(treescrn3, 8, 19, ' ');
  173.     mvwaddch(treescrn3, 11, 22, ' ');
  174.  
  175.     /* star */
  176.     mvwaddch(treescrn3, 0, 12, '*');
  177.  
  178.     /* strng1 */
  179.     mvwaddch(treescrn3, 3, 11, ' ');
  180.  
  181.     /* strng2 */
  182.     mvwaddch(treescrn3, 5, 13, ' ');
  183.     mvwaddch(treescrn3, 6, 10, ' ');
  184.  
  185.     /* strng3 */
  186.     mvwaddch(treescrn3, 7, 16, ' ');
  187.     mvwaddch(treescrn3, 7, 14, ' ');
  188.  
  189.     /* strng4 */
  190.     mvwaddch(treescrn3, 10, 13, ' ');
  191.     mvwaddch(treescrn3, 10, 10, ' ');
  192.     mvwaddch(treescrn3, 11, 8, ' ');
  193.  
  194.     /* strng5 */
  195.     mvwaddch(treescrn3, 11, 18, ' ');
  196.     mvwaddch(treescrn3, 12, 13, ' ');
  197.  
  198.     /* treescrn4 */
  199.  
  200.     overlay(treescrn, treescrn4);
  201.  
  202.     /* balls */
  203.     mvwaddch(treescrn4, 3, 9, ' ');
  204.     mvwaddch(treescrn4, 4, 16, ' ');
  205.     mvwaddch(treescrn4, 7, 6, ' ');
  206.     mvwaddch(treescrn4, 8, 19, ' ');
  207.     mvwaddch(treescrn4, 11, 2, ' ');
  208.     mvwaddch(treescrn4, 12, 23, ' ');
  209.  
  210.     /* star */
  211.     mvwaddch(treescrn4, 0, 12, '*' | A_STANDOUT);
  212.  
  213.     /* strng1 */
  214.     mvwaddch(treescrn4, 3, 13, ' ');
  215.  
  216.     /* strng2 */
  217.  
  218.     /* strng3 */
  219.     mvwaddch(treescrn4, 7, 15, ' ');
  220.     mvwaddch(treescrn4, 8, 11, ' ');
  221.  
  222.     /* strng4 */
  223.     mvwaddch(treescrn4, 9, 16, ' ');
  224.     mvwaddch(treescrn4, 10, 12, ' ');
  225.     mvwaddch(treescrn4, 11, 8, ' ');
  226.  
  227.     /* strng5 */
  228.     mvwaddch(treescrn4, 11, 18, ' ');
  229.     mvwaddch(treescrn4, 12, 14, ' ');
  230.  
  231.     /* treescrn5 */
  232.  
  233.     overlay(treescrn, treescrn5);
  234.  
  235.     /* balls */
  236.     mvwaddch(treescrn5, 3, 15, ' ');
  237.     mvwaddch(treescrn5, 10, 20, ' ');
  238.     mvwaddch(treescrn5, 12, 1, ' ');
  239.  
  240.     /* star */
  241.     mvwaddch(treescrn5, 0, 12, '*');
  242.  
  243.     /* strng1 */
  244.     mvwaddch(treescrn5, 3, 11, ' ');
  245.  
  246.     /* strng2 */
  247.     mvwaddch(treescrn5, 5, 12, ' ');
  248.  
  249.     /* strng3 */
  250.     mvwaddch(treescrn5, 7, 14, ' ');
  251.     mvwaddch(treescrn5, 8, 10, ' ');
  252.  
  253.     /* strng4 */
  254.     mvwaddch(treescrn5, 9, 15, ' ');
  255.     mvwaddch(treescrn5, 10, 11, ' ');
  256.     mvwaddch(treescrn5, 11, 7, ' ');
  257.  
  258.     /* strng5 */
  259.     mvwaddch(treescrn5, 11, 17, ' ');
  260.     mvwaddch(treescrn5, 12, 13, ' ');
  261.  
  262.     /* treescrn6 */
  263.  
  264.     overlay(treescrn, treescrn6);
  265.  
  266.     /* balls */
  267.     mvwaddch(treescrn6, 6, 7, ' ');
  268.     mvwaddch(treescrn6, 7, 18, ' ');
  269.     mvwaddch(treescrn6, 10, 4, ' ');
  270.     mvwaddch(treescrn6, 11, 23, ' ');
  271.  
  272.     /* star */
  273.     mvwaddch(treescrn6, 0, 12, '*' | A_STANDOUT);
  274.  
  275.     /* strng1 */
  276.  
  277.     /* strng2 */
  278.     mvwaddch(treescrn6, 5, 11, ' ');
  279.  
  280.     /* strng3 */
  281.     mvwaddch(treescrn6, 7, 13, ' ');
  282.     mvwaddch(treescrn6, 8, 9, ' ');
  283.  
  284.     /* strng4 */
  285.     mvwaddch(treescrn6, 9, 14, ' ');
  286.     mvwaddch(treescrn6, 10, 10, ' ');
  287.     mvwaddch(treescrn6, 11, 6, ' ');
  288.  
  289.     /* strng5 */
  290.     mvwaddch(treescrn6, 11, 16, ' ');
  291.     mvwaddch(treescrn6, 12, 12, ' ');
  292.  
  293.     /* treescrn7 */
  294.  
  295.     overlay(treescrn, treescrn7);
  296.  
  297.     /* balls */
  298.     mvwaddch(treescrn7, 3, 15, ' ');
  299.     mvwaddch(treescrn7, 6, 7, ' ');
  300.     mvwaddch(treescrn7, 7, 18, ' ');
  301.     mvwaddch(treescrn7, 10, 4, ' ');
  302.     mvwaddch(treescrn7, 11, 22, ' ');
  303.  
  304.     /* star */
  305.     mvwaddch(treescrn7, 0, 12, '*');
  306.  
  307.     /* strng1 */
  308.     mvwaddch(treescrn7, 3, 12, ' ');
  309.  
  310.     /* strng2 */
  311.     mvwaddch(treescrn7, 5, 13, ' ');
  312.     mvwaddch(treescrn7, 6, 9, ' ');
  313.  
  314.     /* strng3 */
  315.     mvwaddch(treescrn7, 7, 15, ' ');
  316.     mvwaddch(treescrn7, 8, 11, ' ');
  317.  
  318.     /* strng4 */
  319.     mvwaddch(treescrn7, 9, 16, ' ');
  320.     mvwaddch(treescrn7, 10, 12, ' ');
  321.     mvwaddch(treescrn7, 11, 8, ' ');
  322.  
  323.     /* strng5 */
  324.     mvwaddch(treescrn7, 11, 18, ' ');
  325.     mvwaddch(treescrn7, 12, 14, ' ');
  326.  
  327.     napms(1000);
  328.     reindeer();
  329.  
  330.     touchwin(w_holiday);
  331.     wrefresh(w_holiday);
  332.     wrefresh(w_del_msg);
  333.  
  334.     napms(1000);
  335.  
  336.     for (loopy = 0; loopy < 50; loopy++)
  337.         blinkit();
  338.  
  339.     clear();
  340.     refresh();
  341.     endwin();
  342.  
  343.     return 0;
  344. }
  345.  
  346. void lil(WINDOW *win)
  347. {
  348.     mvwaddch(win, 0, 0, (chtype) 'V');
  349.     mvwaddch(win, 1, 0, (chtype) '@');
  350.     mvwaddch(win, 1, 3, (chtype) '~');
  351. }
  352.  
  353. void midtop(WINDOW *win)
  354. {
  355.     mvwaddstr(win, 0, 2, "yy");
  356.     mvwaddstr(win, 1, 2, "0(=)~");
  357. }
  358.  
  359. void bigtop(WINDOW *win)
  360. {
  361.     mvwaddstr(win, 0, 17, "\\/");
  362.     mvwaddstr(win, 0, 20, "\\/");
  363.     mvwaddch(win, 1, 18, (chtype) '\\');
  364.     mvwaddch(win, 1, 20, (chtype) '/');
  365.     mvwaddstr(win, 2, 19, "|_");
  366.     mvwaddstr(win, 3, 18, "/^0\\");
  367.     mvwaddstr(win, 4, 17, "//\\");
  368.     mvwaddch(win, 4, 22, (chtype) '\\');
  369.     mvwaddstr(win, 5, 7, "^~~~~~~~~//  ~~U");
  370. }
  371.  
  372. void bigface(WINDOW *win, chtype noseattr)
  373. {
  374.     mvwaddstr(win, 0, 16, "\\/     \\/");
  375.     mvwaddstr(win, 1, 17, "\\Y/ \\Y/");
  376.     mvwaddstr(win, 2, 19, "\\=/");
  377.     mvwaddstr(win, 3, 17, "^\\o o/^");
  378.     mvwaddstr(win, 4, 17, "//( )");
  379.     mvwaddstr(win, 5, 7, "^~~~~~~~~// \\");
  380.     waddch(win, 'O' | noseattr);
  381.     waddstr(win, "/");
  382. }
  383.  
  384. void legs1(WINDOW *win)
  385. {
  386.     mvwaddstr(win, 6, 7, "( \\_____( /");
  387.     mvwaddstr(win, 7, 8, "( )    /");
  388.     mvwaddstr(win, 8, 9, "\\\\   /");
  389.     mvwaddstr(win, 9, 11, "\\>/>");
  390. }
  391.  
  392. void legs2(WINDOW *win)
  393. {
  394.     mvwaddstr(win, 6, 7, "(( )____( /");
  395.     mvwaddstr(win, 7, 7, "( /      |");
  396.     mvwaddstr(win, 8, 8, "\\/      |");
  397.     mvwaddstr(win, 9, 9, "|>     |>");
  398. }
  399.  
  400. void legs3(WINDOW *win)
  401. {
  402.     mvwaddstr(win, 6, 6, "( ()_____( /");
  403.     mvwaddstr(win, 7, 6, "/ /       /");
  404.     mvwaddstr(win, 8, 5, "|/          \\");
  405.     mvwaddstr(win, 9, 5, "/>           \\>");
  406. }
  407.  
  408. void legs4(WINDOW *win)
  409. {
  410.     mvwaddstr(win, 6, 6, "( )______( /");
  411.     mvwaddstr(win, 7, 5, "(/          \\");
  412.     mvwaddstr(win, 8, 0, "v___=             ----^");
  413. }
  414.  
  415. void initdeer(void)
  416. {
  417.     chtype noseattr;
  418.  
  419. #ifdef A_COLOR
  420.     if (has_colors())
  421.     {
  422.         init_pair(31, COLOR_RED, COLOR_BLACK);
  423.         noseattr = COLOR_PAIR(31);
  424.     }
  425.     else
  426. #endif
  427.         noseattr = A_NORMAL;
  428.  
  429.     /* set up the windows for our various reindeer */
  430.  
  431.     dotdeer0 = newwin(3, 71, 0, 8);
  432.     stardeer0 = newwin(4, 56, 0, 8);
  433.     lildeer0 = newwin(7, 54, 0, 8);
  434.     middeer0 = newwin(15, 42, 0, 8);
  435.     bigdeer0 = newwin(10, 23, 0, 0);
  436.     lookdeer0 = newwin(10, 25, 0, 0);
  437.  
  438.     /* lildeer1 */
  439.     lildeer1 = newwin(2, 4, 0, 0);
  440.     lil(lildeer1);
  441.     mvwaddstr(lildeer1, 1, 1, "<>");
  442.  
  443.     /* lildeer2 */
  444.     lildeer2 = newwin(2, 4, 0, 0);
  445.     lil(lildeer2);
  446.     mvwaddstr(lildeer2, 1, 1, "||");
  447.  
  448.     /* lildeer3 */
  449.     lildeer3 = newwin(2, 4, 0, 0);
  450.     lil(lildeer3);
  451.     mvwaddstr(lildeer3, 1, 1, "><");
  452.  
  453.     /* middeer1 */
  454.     middeer1 = newwin(3, 7, 0, 0);
  455.     midtop(middeer1);
  456.     mvwaddstr(middeer1, 2, 3, "\\/");
  457.  
  458.     /* middeer2 */
  459.     middeer2 = newwin(3, 7, 0, 0);
  460.     midtop(middeer2);
  461.     mvwaddch(middeer2, 2, 3, (chtype) '|');
  462.     mvwaddch(middeer2, 2, 5, (chtype) '|');
  463.  
  464.     /* middeer3 */
  465.     middeer3 = newwin(3, 7, 0, 0);
  466.     midtop(middeer3);
  467.     mvwaddch(middeer3, 2, 2, (chtype) '/');
  468.     mvwaddch(middeer3, 2, 6, (chtype) '\\');
  469.  
  470.     /* bigdeer1 */
  471.     bigdeer1 = newwin(10, 23, 0, 0);
  472.     bigtop(bigdeer1);
  473.     legs1(bigdeer1);
  474.  
  475.     /* bigdeer2 */
  476.     bigdeer2 = newwin(10, 23, 0, 0);
  477.     bigtop(bigdeer2);
  478.     legs2(bigdeer2);
  479.  
  480.     /* bigdeer3 */
  481.     bigdeer3 = newwin(10, 23, 0, 0);
  482.     bigtop(bigdeer3);
  483.     legs3(bigdeer3);
  484.  
  485.     /* bigdeer4 */
  486.     bigdeer4 = newwin(10, 23, 0, 0);
  487.     bigtop(bigdeer4);
  488.     legs4(bigdeer4);
  489.  
  490.     /* lookdeer1 */
  491.     lookdeer1 = newwin(10, 25, 0, 0);
  492.     bigface(lookdeer1, noseattr);
  493.     legs1(lookdeer1);
  494.  
  495.     /* lookdeer2 */
  496.     lookdeer2 = newwin(10, 25, 0, 0);
  497.     bigface(lookdeer2, noseattr);
  498.     legs2(lookdeer2);
  499.  
  500.     /* lookdeer3 */
  501.     lookdeer3 = newwin(10, 25, 0, 0);
  502.     bigface(lookdeer3, noseattr);
  503.     legs3(lookdeer3);
  504.  
  505.     /* lookdeer4 */
  506.     lookdeer4 = newwin(10, 25, 0, 0);
  507.     bigface(lookdeer4, noseattr);
  508.     legs4(lookdeer4);
  509. }
  510.  
  511. void boxit(void)
  512. {
  513.     int x;
  514.  
  515.     for (x = 0; x < 20; ++x)
  516.         mvaddch(x, 7, '|');
  517.  
  518.     for (x = 0; x < 80; ++x)
  519.     {
  520.         if (x > 7)
  521.             mvaddch(19, x, '_');
  522.  
  523.         mvaddch(22, x, '_');
  524.     }
  525. }
  526.  
  527. void seas(void)
  528. {
  529.     mvaddch(4, 1, 'S');
  530.     mvaddch(6, 1, 'E');
  531.     mvaddch(8, 1, 'A');
  532.     mvaddch(10, 1, 'S');
  533.     mvaddch(12, 1, 'O');
  534.     mvaddch(14, 1, 'N');
  535.     mvaddch(16, 1, '`');
  536.     mvaddch(18, 1, 'S');
  537. }
  538.  
  539. void greet(void)
  540. {
  541.     mvaddch(3, 5, 'G');
  542.     mvaddch(5, 5, 'R');
  543.     mvaddch(7, 5, 'E');
  544.     mvaddch(9, 5, 'E');
  545.     mvaddch(11, 5, 'T');
  546.     mvaddch(13, 5, 'I');
  547.     mvaddch(15, 5, 'N');
  548.     mvaddch(17, 5, 'G');
  549.     mvaddch(19, 5, 'S');
  550. }
  551.  
  552. void fromwho(void)
  553. {
  554.     mvaddstr(21, 13, FROMWHO);
  555. }
  556.  
  557. void del_msg(void)
  558. {
  559.     refresh();
  560. }
  561.  
  562. void tree(void)
  563. {
  564. #ifdef A_COLOR
  565.     if (has_colors())
  566.     {
  567.         init_pair(30, COLOR_GREEN, COLOR_BLACK);
  568.         wattrset(treescrn, COLOR_PAIR(30));
  569.     }
  570. #endif
  571.     mvwaddch(treescrn, 1, 11, (chtype) '/');
  572.     mvwaddch(treescrn, 2, 11, (chtype) '/');
  573.     mvwaddch(treescrn, 3, 10, (chtype) '/');
  574.     mvwaddch(treescrn, 4, 9, (chtype) '/');
  575.     mvwaddch(treescrn, 5, 9, (chtype) '/');
  576.     mvwaddch(treescrn, 6, 8, (chtype) '/');
  577.     mvwaddch(treescrn, 7, 7, (chtype) '/');
  578.     mvwaddch(treescrn, 8, 6, (chtype) '/');
  579.     mvwaddch(treescrn, 9, 6, (chtype) '/');
  580.     mvwaddch(treescrn, 10, 5, (chtype) '/');
  581.     mvwaddch(treescrn, 11, 3, (chtype) '/');
  582.     mvwaddch(treescrn, 12, 2, (chtype) '/');
  583.  
  584.     mvwaddch(treescrn, 1, 13, (chtype) '\\');
  585.     mvwaddch(treescrn, 2, 13, (chtype) '\\');
  586.     mvwaddch(treescrn, 3, 14, (chtype) '\\');
  587.     mvwaddch(treescrn, 4, 15, (chtype) '\\');
  588.     mvwaddch(treescrn, 5, 15, (chtype) '\\');
  589.     mvwaddch(treescrn, 6, 16, (chtype) '\\');
  590.     mvwaddch(treescrn, 7, 17, (chtype) '\\');
  591.     mvwaddch(treescrn, 8, 18, (chtype) '\\');
  592.     mvwaddch(treescrn, 9, 18, (chtype) '\\');
  593.     mvwaddch(treescrn, 10, 19, (chtype) '\\');
  594.     mvwaddch(treescrn, 11, 21, (chtype) '\\');
  595.     mvwaddch(treescrn, 12, 22, (chtype) '\\');
  596.  
  597.     mvwaddch(treescrn, 4, 10, (chtype) '_');
  598.     mvwaddch(treescrn, 4, 14, (chtype) '_');
  599.     mvwaddch(treescrn, 8, 7, (chtype) '_');
  600.     mvwaddch(treescrn, 8, 17, (chtype) '_');
  601.  
  602.     mvwaddstr(treescrn, 13, 0,
  603.           "//////////// \\\\\\\\\\\\\\\\\\\\\\\\");
  604.  
  605. #ifdef A_COLOR
  606.     if (has_colors())
  607.     {
  608.         init_pair(20, COLOR_YELLOW, COLOR_BLACK);
  609.         wattrset(treescrn, COLOR_PAIR(20));
  610.     }
  611. #endif
  612.     mvwaddstr(treescrn, 14, 11, "| |");
  613.     mvwaddstr(treescrn, 15, 11, "|_|");
  614.  
  615.     wrefresh(treescrn);
  616.     wrefresh(w_del_msg);
  617. }
  618.  
  619. void balls(void)
  620. {
  621.     chtype ball1, ball2, ball3, ball4, ball5, ball6;
  622.  
  623.     overlay(treescrn, treescrn2);
  624.  
  625. #ifdef A_COLOR
  626.     if (has_colors())
  627.     {
  628.         init_pair(1, COLOR_BLUE, COLOR_BLACK);
  629.         init_pair(2, COLOR_RED, COLOR_BLACK);
  630.         init_pair(3, COLOR_MAGENTA, COLOR_BLACK);
  631.         init_pair(4, COLOR_CYAN, COLOR_BLACK);
  632.         init_pair(5, COLOR_YELLOW, COLOR_BLACK);
  633.         init_pair(6, COLOR_WHITE, COLOR_BLACK);
  634.         ball1 = COLOR_PAIR(1) | '@';
  635.         ball2 = COLOR_PAIR(2) | '@';
  636.         ball3 = COLOR_PAIR(3) | '@';
  637.         ball4 = COLOR_PAIR(4) | '@';
  638.         ball5 = COLOR_PAIR(5) | '@';
  639.         ball6 = COLOR_PAIR(6) | '@';
  640.     }
  641.     else
  642. #endif
  643.         ball1 = ball2 = ball3 = ball4 = ball5 = ball6 = '@';
  644.  
  645.     mvwaddch(treescrn2, 3, 9, ball1);
  646.     mvwaddch(treescrn2, 3, 15, ball2);
  647.     mvwaddch(treescrn2, 4, 8, ball3);
  648.     mvwaddch(treescrn2, 4, 16, ball4);
  649.     mvwaddch(treescrn2, 5, 7, ball5);
  650.     mvwaddch(treescrn2, 5, 17, ball6);
  651.     mvwaddch(treescrn2, 7, 6, ball1 | A_BOLD);
  652.     mvwaddch(treescrn2, 7, 18, ball2 | A_BOLD);
  653.     mvwaddch(treescrn2, 8, 5, ball3 | A_BOLD);
  654.     mvwaddch(treescrn2, 8, 19, ball4 | A_BOLD);
  655.     mvwaddch(treescrn2, 10, 4, ball5 | A_BOLD);
  656.     mvwaddch(treescrn2, 10, 20, ball6 | A_BOLD);
  657.     mvwaddch(treescrn2, 11, 2, ball1);
  658.     mvwaddch(treescrn2, 11, 22, ball2);
  659.     mvwaddch(treescrn2, 12, 1, ball3);
  660.     mvwaddch(treescrn2, 12, 23, ball4);
  661.  
  662.     wrefresh(treescrn2);
  663.     wrefresh(w_del_msg);
  664. }
  665.  
  666. void star(void)
  667. {
  668.     mvwaddch(treescrn2, 0, 12, (chtype) '*' | A_STANDOUT);
  669.  
  670.     wrefresh(treescrn2);
  671.     wrefresh(w_del_msg);
  672. }
  673.  
  674. void strng1(void)
  675. {
  676. #ifdef A_COLOR
  677.     if (has_colors())
  678.     {
  679.         init_pair(10, COLOR_YELLOW, COLOR_BLACK);
  680.         wattrset(treescrn2, COLOR_PAIR(10) | A_BOLD);
  681.     }
  682. #endif
  683.     mvwaddstr(treescrn2, 3, 11, ".:'");
  684.  
  685.     wrefresh(treescrn2);
  686.     wrefresh(w_del_msg);
  687. }
  688.  
  689. void strng2(void)
  690. {
  691. #ifdef A_COLOR
  692.     if (has_colors())
  693.     {
  694.         init_pair(11, COLOR_RED, COLOR_BLACK);
  695.         wattrset(treescrn2, COLOR_PAIR(11) | A_BOLD);
  696.     }
  697. #endif
  698.     mvwaddstr(treescrn2, 5, 11, ",.:'");
  699.     mvwaddstr(treescrn2, 6, 9, ":'");
  700.  
  701.     wrefresh(treescrn2);
  702.     wrefresh(w_del_msg);
  703. }
  704.  
  705. void strng3(void)
  706. {
  707. #ifdef A_COLOR
  708.     if (has_colors())
  709.     {
  710.         init_pair(12, COLOR_GREEN, COLOR_BLACK);
  711.         wattrset(treescrn2, COLOR_PAIR(12) | A_BOLD);
  712.     }
  713. #endif
  714.     mvwaddstr(treescrn2, 7, 13, ",.:'");
  715.     mvwaddstr(treescrn2, 8, 9, ",.:'");
  716.  
  717.     wrefresh(treescrn2);
  718.     wrefresh(w_del_msg);
  719. }
  720.  
  721. void strng4(void)
  722. {
  723. #ifdef A_COLOR
  724.     if (has_colors())
  725.     {
  726.         init_pair(13, COLOR_WHITE, COLOR_BLACK);
  727.         wattrset(treescrn2, COLOR_PAIR(13) | A_BOLD);
  728.     }
  729. #endif
  730.     mvwaddstr(treescrn2, 9, 14, ",.:'");
  731.     mvwaddstr(treescrn2, 10, 10, ",.:'");
  732.     mvwaddstr(treescrn2, 11, 6, ",.:'");
  733.     mvwaddch(treescrn2, 12, 5, (chtype) '\'');
  734.  
  735.     wrefresh(treescrn2);
  736.     wrefresh(w_del_msg);
  737. }
  738.  
  739. void strng5(void)
  740. {
  741. #ifdef A_COLOR
  742.     if (has_colors())
  743.     {
  744.         init_pair(14, COLOR_CYAN, COLOR_BLACK);
  745.         wattrset(treescrn2, COLOR_PAIR(14) | A_BOLD);
  746.     }
  747. #endif
  748.     mvwaddstr(treescrn2, 11, 16, ",.:'");
  749.     mvwaddstr(treescrn2, 12, 12, ",.:'");
  750.  
  751.     /* save a fully lit tree */
  752.     overlay(treescrn2, treescrn);
  753.  
  754.     wrefresh(treescrn2);
  755.     wrefresh(w_del_msg);
  756. }
  757.  
  758. void blinkit(void)
  759. {
  760.     static int cycle;
  761.  
  762.     if (cycle > 4)
  763.         cycle = 0;
  764.  
  765.     touchwin(treescrn8);
  766.  
  767.     switch (cycle)
  768.     {
  769.     case 0:
  770.         overlay(treescrn3, treescrn8);
  771.         break;
  772.  
  773.     case 1:
  774.         overlay(treescrn4, treescrn8);
  775.         break;
  776.  
  777.     case 2:
  778.         overlay(treescrn5, treescrn8);
  779.         break;
  780.  
  781.     case 3:
  782.         overlay(treescrn6, treescrn8);
  783.         break;
  784.  
  785.     case 4:
  786.         overlay(treescrn7, treescrn8);
  787.     }
  788.  
  789.     wrefresh(treescrn8);
  790.     wrefresh(w_del_msg);
  791.  
  792.     napms(50);
  793.     touchwin(treescrn8);
  794.  
  795.     /*ALL ON************************************************** */
  796.  
  797.     overlay(treescrn, treescrn8);
  798.     wrefresh(treescrn8);
  799.     wrefresh(w_del_msg);
  800.  
  801.     ++cycle;
  802. }
  803.  
  804. #define TSHOW(win, pause) touchwin(win); wrefresh(win); \
  805.               wrefresh(w_del_msg); napms(pause)
  806.  
  807. #define SHOW(win, pause) mvwin(win, y_pos, x_pos); wrefresh(win); \
  808.              wrefresh(w_del_msg); napms(pause)
  809.  
  810. void reindeer(void)
  811. {
  812.     int looper;
  813.  
  814.     y_pos = 0;
  815.  
  816.     for (x_pos = 70; x_pos > 62; x_pos--)
  817.     {
  818.         if (x_pos < 62)
  819.             y_pos = 1;
  820.  
  821.         for (looper = 0; looper < 4; looper++)
  822.         {
  823.             mvwaddch(dotdeer0, y_pos, x_pos, (chtype) '.');
  824.             wrefresh(dotdeer0);
  825.             wrefresh(w_del_msg);
  826.             werase(dotdeer0);
  827.             wrefresh(dotdeer0);
  828.             wrefresh(w_del_msg);
  829.         }
  830.     }
  831.  
  832.     y_pos = 2;
  833.  
  834.     for (; x_pos > 50; x_pos--)
  835.     {
  836.         for (looper = 0; looper < 4; looper++)
  837.         {
  838.             if (x_pos < 56)
  839.             {
  840.                 y_pos = 3;
  841.  
  842.                 mvwaddch(stardeer0, y_pos, x_pos, (chtype) '*');
  843.                 wrefresh(stardeer0);
  844.                 wrefresh(w_del_msg);
  845.                 werase(stardeer0);
  846.                 wrefresh(stardeer0);
  847.             }
  848.             else
  849.             {
  850.                 mvwaddch(dotdeer0, y_pos, x_pos, (chtype) '*');
  851.                 wrefresh(dotdeer0);
  852.                 wrefresh(w_del_msg);
  853.                 werase(dotdeer0);
  854.                 wrefresh(dotdeer0);
  855.             }
  856.             wrefresh(w_del_msg);
  857.         }
  858.     }
  859.  
  860.     x_pos = 58;
  861.  
  862.     for (y_pos = 2; y_pos < 5; y_pos++)
  863.     {
  864.         TSHOW(lildeer0, 50);
  865.  
  866.         for (looper = 0; looper < 4; looper++)
  867.         {
  868.             SHOW(lildeer3, 50);
  869.             SHOW(lildeer2, 50);
  870.             SHOW(lildeer1, 50);
  871.             SHOW(lildeer2, 50);
  872.             SHOW(lildeer3, 50);
  873.  
  874.             TSHOW(lildeer0, 50);
  875.  
  876.             x_pos -= 2;
  877.         }
  878.     }
  879.  
  880.     x_pos = 35;
  881.  
  882.     for (y_pos = 5; y_pos < 10; y_pos++)
  883.     {
  884.         touchwin(middeer0);
  885.         wrefresh(middeer0);
  886.         wrefresh(w_del_msg);
  887.  
  888.         for (looper = 0; looper < 2; looper++)
  889.         {
  890.             SHOW(middeer3, 50);
  891.             SHOW(middeer2, 50);
  892.             SHOW(middeer1, 50);
  893.             SHOW(middeer2, 50);
  894.             SHOW(middeer3, 50);
  895.  
  896.             TSHOW(middeer0, 50);
  897.  
  898.             x_pos -= 3;
  899.         }
  900.     }
  901.  
  902.     napms(2000);
  903.  
  904.     y_pos = 1;
  905.  
  906.     for (x_pos = 8; x_pos < 16; x_pos++)
  907.     {
  908.         SHOW(bigdeer4, 30);
  909.         SHOW(bigdeer3, 30);
  910.         SHOW(bigdeer2, 30);
  911.         SHOW(bigdeer1, 30);
  912.         SHOW(bigdeer2, 30);
  913.         SHOW(bigdeer3, 30);
  914.         SHOW(bigdeer4, 30);
  915.         SHOW(bigdeer0, 30);
  916.     }
  917.  
  918.     --x_pos;
  919.  
  920.     for (looper = 0; looper < 6; looper++)
  921.     {
  922.         SHOW(lookdeer4, 40);
  923.         SHOW(lookdeer3, 40);
  924.         SHOW(lookdeer2, 40);
  925.         SHOW(lookdeer1, 40);
  926.         SHOW(lookdeer2, 40);
  927.         SHOW(lookdeer3, 40);
  928.         SHOW(lookdeer4, 40);
  929.     }
  930.  
  931.     SHOW(lookdeer0, 40);
  932.  
  933.     for (; y_pos < 10; y_pos++)
  934.     {
  935.         for (looper = 0; looper < 2; looper++)
  936.         {
  937.             SHOW(bigdeer4, 30);
  938.             SHOW(bigdeer3, 30);
  939.             SHOW(bigdeer2, 30);
  940.             SHOW(bigdeer1, 30);
  941.             SHOW(bigdeer2, 30);
  942.             SHOW(bigdeer3, 30);
  943.             SHOW(bigdeer4, 30);
  944.         }
  945.  
  946.         SHOW(bigdeer0, 30);
  947.     }
  948.  
  949.     --y_pos;
  950.  
  951.     mvwin(lookdeer3, y_pos, x_pos);
  952.     wrefresh(lookdeer3);
  953.     wrefresh(w_del_msg);
  954. }
  955.