allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (12/17/89)
Posting-number: Volume 9, Issue 67 Submitted-by: rich@jolnet.ORPK.IL.US (Rich Andrews) Archive-name: asciixmas This is posted for a friend...... Here's my Christmas gift to the netlanders from whom I've learned so much over the last few months. I just wanted to give something back. --------cut here--------cut here--------cut here--------cut here-----cut here--- #! /bin/sh # This file was wrapped with "dummyshar". "sh" this file to extract. # Contents: asciixmas.c echo extracting 'asciixmas.c' if test -f 'asciixmas.c' -a -z "$1"; then echo Not overwriting 'asciixmas.c'; else sed 's/^X//' << \EOF > 'asciixmas.c' X/******************************************************************************/ X/* asciixmas */ X/* December 1989 Larry Bartz Indianapolis, IN */ X/* */ X/* */ X/* I'm dreaming of an ascii character-based monochrome Christmas, */ X/* Just like the one's I used to know! */ X/* Via a full duplex communications channel, */ X/* At 9600 bits per second, */ X/* Even though it's kinda slow. */ X/* */ X/* I'm dreaming of an ascii character-based monochrome Christmas, */ X/* With ev'ry C program I write! */ X/* May your screen be merry and bright! */ X/* And may all your Christmases be amber or green, */ X/* (for reduced eyestrain and improved visibility)! */ X/* */ X/* */ X/* */ X/* */ X/* */ X/* IMPLEMENTATION */ X/* */ X/* Feel free to modify the defined string FROMWHO to reflect you, your */ X/* organization, your site, whatever. */ X/* */ X/* This really looks a lot better if you can turn off your cursor before */ X/* execution. I wanted to do that here but very few termcap entries or */ X/* terminfo definitions have the appropriate string defined. If you know */ X/* the string(s) for the terminal(s) you use or which your site supports, */ X/* you could call asciixmas from within a shell in which you issue the */ X/* string to the terminal. The cursor is distracting but it doesn't really */ X/* ruin the show. */ X/* */ X/* At our site, we invoke this for our users just after login and the */ X/* determination of terminal type. */ X/* */ X/* */ X/* PORTABILITY */ X/* */ X/* I wrote this using only the very simplest curses functions so that it */ X/* might be the most portable. I was personally able to test on five */ X/* different cpu/UNIX combinations. */ X/* */ X/* */ X/* COMPILE */ X/* */ X/* usually this: */ X/* */ X/* cc -O asciixmas.c -lcurses -o asciixmas -s */ X/* */ X/* */ X/* Zilog S8000 models 11, 21, 31, etc with ZEUS variant of SYSTEM III */ X/* maybe other SYSTEM III also: */ X/* */ X/* cc asciixmas.c -lcurses -ltermlib -o asciixmas -s */ X/* */ X/* as above with optional "peephole optimizer" installed: */ X/* */ X/* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s */ X/* */ X/* */ X/* Zilog S8000 models 32, 130 with WE32100 chip and SYS V, REL2 */ X/* maybe 3B2 also? */ X/* */ X/* cc -f -O -K sd asciixmas.c -lcurses -o asciixmas -s */ X/* */ X/* */ X/* Pyramid, Sequent, any other "dual universe" types compile and execute */ X/* under either universe. The compile line for the ucb universe (as you */ X/* might expect) is the same as for SYS III UNIX: */ X/* */ X/* cc -O asciixmas.c -lcurses -ltermlib -o asciixmas -s */ X/* */ X/* The above compile will also hold true for other BSD systems. (I hope) */ X/* */ X/* */ X/* */ X/* */ X/* For the Scrooges out there among you who don't want this thing to loop */ X/* forever (or until the user hits DEL), insert this into your compile */ X/* line just after "cc" : */ X/* */ X/* -DNOLOOP */ X/* */ X/* like so: */ X/* */ X/* cc -DNOLOOP -O asciixmas.c -lcurses -o asciixmas -s */ X/* */ X/* */ X/* */ X/******************************************************************************/ X X#include <curses.h> X#include <signal.h> X X#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" X/* #define FROMWHO "from L A R R Y, C O L L E E N, S E A N, & H A L E Y" */ X Xint y_pos, x_pos; X XWINDOW X *treescrn, *treescrn2,*treescrn3, *treescrn4,*treescrn5, *treescrn6, X *treescrn7, *treescrn8, X *dotdeer0, X *stardeer0, X *lildeer0, *lildeer1, *lildeer2, *lildeer3, X *middeer0, *middeer1, *middeer2, *middeer3, X *bigdeer0, *bigdeer1, *bigdeer2, *bigdeer3, *bigdeer4, X *lookdeer0, *lookdeer1, *lookdeer2, *lookdeer3, *lookdeer4, X *w_holiday, X *w_del_msg; X Xmain() X{ X void done(); X int loopy; X X initscr(); X noecho(); X nonl(); X refresh(); X signal(SIGINT,done); X signal(SIGHUP,done); X signal(SIGTERM,done); X signal(SIGQUIT,done); X X X X treescrn = newwin(16,27,3,53); X treescrn2 = newwin(16,27,3,53); X treescrn3 = newwin(16,27,3,53); X treescrn4 = newwin(16,27,3,53); X treescrn5 = newwin(16,27,3,53); X treescrn6 = newwin(16,27,3,53); X treescrn7 = newwin(16,27,3,53); X treescrn8 = newwin(16,27,3,53); X X dotdeer0 = newwin(3,71,0,8); X X stardeer0 = newwin(4,56,0,8); X X lildeer0 = newwin(7,53,0,8); X lildeer1 = newwin(2,4,0,0); X lildeer2 = newwin(2,4,0,0); X lildeer3 = newwin(2,4,0,0); X X middeer0 = newwin(15,42,0,8); X middeer1 = newwin(3,7,0,0); X middeer2 = newwin(3,7,0,0); X middeer3 = newwin(3,7,0,0); X X bigdeer0 = newwin(10,23,0,0); X bigdeer1 = newwin(10,23,0,0); X bigdeer2 = newwin(10,23,0,0); X bigdeer3 = newwin(10,23,0,0); X bigdeer4 = newwin(10,23,0,0); X X lookdeer0 = newwin(10,25,0,0); X lookdeer1 = newwin(10,25,0,0); X lookdeer2 = newwin(10,25,0,0); X lookdeer3 = newwin(10,25,0,0); X lookdeer4 = newwin(10,25,0,0); X X w_holiday = newwin(1,26,3,27); X X w_del_msg = newwin(1,12,23,68); X X mvwaddstr(w_del_msg,0,0,"DEL to quit"); X X mvwaddstr(w_holiday,0,0,"H A P P Y H O L I D A Y S"); X X /* set up the windows for our various reindeer */ X X /* lildeer1 */ X mvwaddch(lildeer1,0,0,'V'); X mvwaddch(lildeer1,1,0,'@'); X mvwaddch(lildeer1,1,1,'<'); X mvwaddch(lildeer1,1,2,'>'); X mvwaddch(lildeer1,1,3,'~'); X X /* lildeer2 */ X mvwaddch(lildeer2,0,0,'V'); X mvwaddch(lildeer2,1,0,'@'); X mvwaddch(lildeer2,1,1,'|'); X mvwaddch(lildeer2,1,2,'|'); X mvwaddch(lildeer2,1,3,'~'); X X /* lildeer3 */ X mvwaddch(lildeer3,0,0,'V'); X mvwaddch(lildeer3,1,0,'@'); X mvwaddch(lildeer3,1,1,'>'); X mvwaddch(lildeer3,1,2,'<'); X mvwaddch(lildeer2,1,3,'~'); X X X /* middeer1 */ X mvwaddch(middeer1,0,2,'y'); X mvwaddch(middeer1,0,3,'y'); X mvwaddch(middeer1,1,2,'0'); X mvwaddch(middeer1,1,3,'('); X mvwaddch(middeer1,1,4,'='); X mvwaddch(middeer1,1,5,')'); X mvwaddch(middeer1,1,6,'~'); X mvwaddch(middeer1,2,3,'\\'); X mvwaddch(middeer1,2,4,'/'); X X /* middeer2 */ X mvwaddch(middeer2,0,2,'y'); X mvwaddch(middeer2,0,3,'y'); X mvwaddch(middeer2,1,2,'0'); X mvwaddch(middeer2,1,3,'('); X mvwaddch(middeer2,1,4,'='); X mvwaddch(middeer2,1,5,')'); X mvwaddch(middeer2,1,6,'~'); X mvwaddch(middeer2,2,3,'|'); X mvwaddch(middeer2,2,5,'|'); X X /* middeer3 */ X mvwaddch(middeer3,0,2,'y'); X mvwaddch(middeer3,0,3,'y'); X mvwaddch(middeer3,1,2,'0'); X mvwaddch(middeer3,1,3,'('); X mvwaddch(middeer3,1,4,'='); X mvwaddch(middeer3,1,5,')'); X mvwaddch(middeer3,1,6,'~'); X mvwaddch(middeer3,2,2,'/'); X mvwaddch(middeer3,2,6,'\\'); X X X /* bigdeer1 */ X mvwaddch(bigdeer1,0,17,'\\'); X mvwaddch(bigdeer1,0,18,'/'); X mvwaddch(bigdeer1,0,20,'\\'); X mvwaddch(bigdeer1,0,21,'/'); X mvwaddch(bigdeer1,1,18,'\\'); X mvwaddch(bigdeer1,1,20,'/'); X mvwaddch(bigdeer1,2,19,'|'); X mvwaddch(bigdeer1,2,20,'_'); X mvwaddch(bigdeer1,3,18,'/'); X mvwaddch(bigdeer1,3,19,'^'); X mvwaddch(bigdeer1,3,20,'0'); X mvwaddch(bigdeer1,3,21,'\\'); X mvwaddch(bigdeer1,4,17,'/'); X mvwaddch(bigdeer1,4,18,'/'); X mvwaddch(bigdeer1,4,19,'\\'); X mvwaddch(bigdeer1,4,22,'\\'); X mvwaddstr(bigdeer1,5,7,"^~~~~~~~~// ~~U"); X mvwaddstr(bigdeer1,6,7,"( \\_____( /"); X mvwaddstr(bigdeer1,7,8,"( ) /"); X mvwaddstr(bigdeer1,8,9,"\\\\ /"); X mvwaddstr(bigdeer1,9,11,"\\>/>"); X X /* bigdeer2 */ X mvwaddch(bigdeer2,0,17,'\\'); X mvwaddch(bigdeer2,0,18,'/'); X mvwaddch(bigdeer2,0,20,'\\'); X mvwaddch(bigdeer2,0,21,'/'); X mvwaddch(bigdeer2,1,18,'\\'); X mvwaddch(bigdeer2,1,20,'/'); X mvwaddch(bigdeer2,2,19,'|'); X mvwaddch(bigdeer2,2,20,'_'); X mvwaddch(bigdeer2,3,18,'/'); X mvwaddch(bigdeer2,3,19,'^'); X mvwaddch(bigdeer2,3,20,'0'); X mvwaddch(bigdeer2,3,21,'\\'); X mvwaddch(bigdeer2,4,17,'/'); X mvwaddch(bigdeer2,4,18,'/'); X mvwaddch(bigdeer2,4,19,'\\'); X mvwaddch(bigdeer2,4,22,'\\'); X mvwaddstr(bigdeer2,5,7,"^~~~~~~~~// ~~U"); X mvwaddstr(bigdeer2,6,7,"(( )____( /"); X mvwaddstr(bigdeer2,7,7,"( / |"); X mvwaddstr(bigdeer2,8,8,"\\/ |"); X mvwaddstr(bigdeer2,9,9,"|> |>"); X X /* bigdeer3 */ X mvwaddch(bigdeer3,0,17,'\\'); X mvwaddch(bigdeer3,0,18,'/'); X mvwaddch(bigdeer3,0,20,'\\'); X mvwaddch(bigdeer3,0,21,'/'); X mvwaddch(bigdeer3,1,18,'\\'); X mvwaddch(bigdeer3,1,20,'/'); X mvwaddch(bigdeer3,2,19,'|'); X mvwaddch(bigdeer3,2,20,'_'); X mvwaddch(bigdeer3,3,18,'/'); X mvwaddch(bigdeer3,3,19,'^'); X mvwaddch(bigdeer3,3,20,'0'); X mvwaddch(bigdeer3,3,21,'\\'); X mvwaddch(bigdeer3,4,17,'/'); X mvwaddch(bigdeer3,4,18,'/'); X mvwaddch(bigdeer3,4,19,'\\'); X mvwaddch(bigdeer3,4,22,'\\'); X mvwaddstr(bigdeer3,5,7,"^~~~~~~~~// ~~U"); X mvwaddstr(bigdeer3,6,6,"( ()_____( /"); X mvwaddstr(bigdeer3,7,6,"/ / /"); X mvwaddstr(bigdeer3,8,5,"|/ \\"); X mvwaddstr(bigdeer3,9,5,"/> \\>"); X X /* bigdeer4 */ X mvwaddch(bigdeer4,0,17,'\\'); X mvwaddch(bigdeer4,0,18,'/'); X mvwaddch(bigdeer4,0,20,'\\'); X mvwaddch(bigdeer4,0,21,'/'); X mvwaddch(bigdeer4,1,18,'\\'); X mvwaddch(bigdeer4,1,20,'/'); X mvwaddch(bigdeer4,2,19,'|'); X mvwaddch(bigdeer4,2,20,'_'); X mvwaddch(bigdeer4,3,18,'/'); X mvwaddch(bigdeer4,3,19,'^'); X mvwaddch(bigdeer4,3,20,'0'); X mvwaddch(bigdeer4,3,21,'\\'); X mvwaddch(bigdeer4,4,17,'/'); X mvwaddch(bigdeer4,4,18,'/'); X mvwaddch(bigdeer4,4,19,'\\'); X mvwaddch(bigdeer4,4,22,'\\'); X mvwaddstr(bigdeer4,5,7,"^~~~~~~~~// ~~U"); X mvwaddstr(bigdeer4,6,6,"( )______( /"); X mvwaddstr(bigdeer4,7,5,"(/ \\"); X mvwaddstr(bigdeer4,8,0,"v___= ----^"); X X X /* lookdeer1 */ X mvwaddstr(lookdeer1,0,16,"\\/ \\/"); X mvwaddstr(lookdeer1,1,17,"\\Y/ \\Y/"); X mvwaddstr(lookdeer1,2,19,"\\=/"); X mvwaddstr(lookdeer1,3,17,"^\\o o/^"); X mvwaddstr(lookdeer1,4,17,"//( )"); X mvwaddstr(lookdeer1,5,7,"^~~~~~~~~// \\O/"); X mvwaddstr(lookdeer1,6,7,"( \\_____( /"); X mvwaddstr(lookdeer1,7,8,"( ) /"); X mvwaddstr(lookdeer1,8,9,"\\\\ /"); X mvwaddstr(lookdeer1,9,11,"\\>/>"); X X /* lookdeer2 */ X mvwaddstr(lookdeer2,0,16,"\\/ \\/"); X mvwaddstr(lookdeer2,1,17,"\\Y/ \\Y/"); X mvwaddstr(lookdeer2,2,19,"\\=/"); X mvwaddstr(lookdeer2,3,17,"^\\o o/^"); X mvwaddstr(lookdeer2,4,17,"//( )"); X mvwaddstr(lookdeer2,5,7,"^~~~~~~~~// \\O/"); X mvwaddstr(lookdeer2,6,7,"(( )____( /"); X mvwaddstr(lookdeer2,7,7,"( / |"); X mvwaddstr(lookdeer2,8,8,"\\/ |"); X mvwaddstr(lookdeer2,9,9,"|> |>"); X X /* lookdeer3 */ X mvwaddstr(lookdeer3,0,16,"\\/ \\/"); X mvwaddstr(lookdeer3,1,17,"\\Y/ \\Y/"); X mvwaddstr(lookdeer3,2,19,"\\=/"); X mvwaddstr(lookdeer3,3,17,"^\\o o/^"); X mvwaddstr(lookdeer3,4,17,"//( )"); X mvwaddstr(lookdeer3,5,7,"^~~~~~~~~// \\O/"); X mvwaddstr(lookdeer3,6,6,"( ()_____( /"); X mvwaddstr(lookdeer3,7,6,"/ / /"); X mvwaddstr(lookdeer3,8,5,"|/ \\"); X mvwaddstr(lookdeer3,9,5,"/> \\>"); X X /* lookdeer4 */ X mvwaddstr(lookdeer4,0,16,"\\/ \\/"); X mvwaddstr(lookdeer4,1,17,"\\Y/ \\Y/"); X mvwaddstr(lookdeer4,2,19,"\\=/"); X mvwaddstr(lookdeer4,3,17,"^\\o o/^"); X mvwaddstr(lookdeer4,4,17,"//( )"); X mvwaddstr(lookdeer4,5,7,"^~~~~~~~~// \\O/"); X mvwaddstr(lookdeer4,6,6,"( )______( /"); X mvwaddstr(lookdeer4,7,5,"(/ \\"); X mvwaddstr(lookdeer4,8,0,"v___= ----^"); X X X X /***********************************************/ X X while(1) X { X clear(); X werase(treescrn); X touchwin(treescrn); X werase(treescrn2); X touchwin(treescrn2); X werase(treescrn8); X touchwin(treescrn8); X refresh(); X sleep(1); X boxit(); X del_msg(); X sleep(1); X seas(); X del_msg(); X sleep(1); X greet(); X del_msg(); X sleep(1); X fromwho(); X del_msg(); X sleep(1); X tree(); X sleep(1); X balls(); X sleep(1); X star(); X sleep(1); X strng1(); X strng2(); X strng3(); X strng4(); X strng5(); X X X /* set up the windows for our blinking trees */ X /* **************************************** */ X /* treescrn3 */ X X overwrite(treescrn, treescrn3); X X /*balls*/ X mvwaddch(treescrn3, 4, 18, ' '); X mvwaddch(treescrn3, 7, 6, ' '); X mvwaddch(treescrn3, 8, 19, ' '); X mvwaddch(treescrn3, 11, 22, ' '); X X /*star*/ X mvwaddch(treescrn3, 0, 12, '*'); X X /*strng1*/ X mvwaddch(treescrn3, 3, 11, ' '); X X /*strng2*/ X mvwaddch(treescrn3, 5, 13, ' '); X mvwaddch(treescrn3, 6, 10, ' '); X X /*strng3*/ X mvwaddch(treescrn3, 7, 16, ' '); X mvwaddch(treescrn3, 7, 14, ' '); X X /*strng4*/ X mvwaddch(treescrn3, 10, 13, ' '); X mvwaddch(treescrn3, 10, 10, ' '); X mvwaddch(treescrn3, 11, 8, ' '); X X /*strng5*/ X mvwaddch(treescrn3, 11, 18, ' '); X mvwaddch(treescrn3, 12, 13, ' '); X X X /* treescrn4 */ X X overwrite(treescrn, treescrn4); X X /*balls*/ X mvwaddch(treescrn4, 3, 9, ' '); X mvwaddch(treescrn4, 4, 16, ' '); X mvwaddch(treescrn4, 7, 6, ' '); X mvwaddch(treescrn4, 8, 19, ' '); X mvwaddch(treescrn4, 11, 2, ' '); X mvwaddch(treescrn4, 12, 23, ' '); X X /*star*/ X wstandout(treescrn4); X mvwaddch(treescrn4, 0, 12, '*'); X wstandend(treescrn4); X X /*strng1*/ X mvwaddch(treescrn4, 3, 13, ' '); X X /*strng2*/ X X /*strng3*/ X mvwaddch(treescrn4, 7, 15, ' '); X mvwaddch(treescrn4, 8, 11, ' '); X X /*strng4*/ X mvwaddch(treescrn4, 9, 16, ' '); X mvwaddch(treescrn4, 10, 12, ' '); X mvwaddch(treescrn4, 11, 8, ' '); X X /*strng5*/ X mvwaddch(treescrn4, 11, 18, ' '); X mvwaddch(treescrn4, 12, 14, ' '); X X X /* treescrn5 */ X X overwrite(treescrn, treescrn5); X X /*balls*/ X mvwaddch(treescrn5, 3, 15, ' '); X mvwaddch(treescrn5, 10, 20, ' '); X mvwaddch(treescrn5, 12, 1, ' '); X X /*star*/ X mvwaddch(treescrn5, 0, 12, '*'); X X /*strng1*/ X mvwaddch(treescrn5, 3, 11, ' '); X X /*strng2*/ X mvwaddch(treescrn5, 5, 12, ' '); X X /*strng3*/ X mvwaddch(treescrn5, 7, 14, ' '); X mvwaddch(treescrn5, 8, 10, ' '); X X /*strng4*/ X mvwaddch(treescrn5, 9, 15, ' '); X mvwaddch(treescrn5, 10, 11, ' '); X mvwaddch(treescrn5, 11, 7, ' '); X X /*strng5*/ X mvwaddch(treescrn5, 11, 17, ' '); X mvwaddch(treescrn5, 12, 13, ' '); X X /* treescrn6 */ X X overwrite(treescrn, treescrn6); X X /*balls*/ X mvwaddch(treescrn6, 6, 7, ' '); X mvwaddch(treescrn6, 7, 18, ' '); X mvwaddch(treescrn6, 10, 4, ' '); X mvwaddch(treescrn6, 11, 23, ' '); X X /*star*/ X wstandout(treescrn6); X mvwaddch(treescrn6, 0, 12, '*'); X wstandend(treescrn6); X X /*strng1*/ X X /*strng2*/ X mvwaddch(treescrn6, 5, 11, ' '); X X /*strng3*/ X mvwaddch(treescrn6, 7, 13, ' '); X mvwaddch(treescrn6, 8, 9, ' '); X X /*strng4*/ X mvwaddch(treescrn6, 9, 14, ' '); X mvwaddch(treescrn6, 10, 10, ' '); X mvwaddch(treescrn6, 11, 6, ' '); X X /*strng5*/ X mvwaddch(treescrn6, 11, 16, ' '); X mvwaddch(treescrn6, 12, 12, ' '); X X /* treescrn7 */ X X overwrite(treescrn, treescrn7); X X /*balls*/ X mvwaddch(treescrn7, 3, 15, ' '); X mvwaddch(treescrn7, 6, 7, ' '); X mvwaddch(treescrn7, 7, 18, ' '); X mvwaddch(treescrn7, 10, 4, ' '); X mvwaddch(treescrn7, 11, 22, ' '); X X /*star*/ X mvwaddch(treescrn7, 0, 12, '*'); X X /*strng1*/ X mvwaddch(treescrn7, 3, 12, ' '); X X /*strng2*/ X mvwaddch(treescrn7, 5, 13, ' '); X mvwaddch(treescrn7, 6, 9, ' '); X X /*strng3*/ X mvwaddch(treescrn7, 7, 15, ' '); X mvwaddch(treescrn7, 8, 11, ' '); X X /*strng4*/ X mvwaddch(treescrn7, 9, 16, ' '); X mvwaddch(treescrn7, 10, 12, ' '); X mvwaddch(treescrn7, 11, 8, ' '); X X /*strng5*/ X mvwaddch(treescrn7, 11, 18, ' '); X mvwaddch(treescrn7, 12, 14, ' '); X X X sleep(1); X reindeer(); X X touchwin(w_holiday); X wrefresh(w_holiday); X wrefresh(w_del_msg); X X sleep(1); X for(loopy = 0;loopy < 100;loopy++) X { X blinkit(); X } X X#ifdef NOLOOP X done(); X#endif X X } X} X Xboxit() X{ X int x = 0; X X while(x < 20) X { X mvaddch(x, 7, '|'); X ++x; X } X X x = 8; X X while(x < 80) X { X mvaddch(19, x, '_'); X ++x; X } X X x = 0; X X while(x < 80) X { X mvaddch(22, x, '_'); X ++x; X } X X X} X Xseas() X{ X mvaddch(4, 1, 'S'); X mvaddch(6, 1, 'E'); X mvaddch(8, 1, 'A'); X mvaddch(10, 1, 'S'); X mvaddch(12, 1, 'O'); X mvaddch(14, 1, 'N'); X mvaddch(16, 1, '`'); X mvaddch(18, 1, 'S'); X X} X X Xgreet() X{ X mvaddch(3, 5, 'G'); X mvaddch(5, 5, 'R'); X mvaddch(7, 5, 'E'); X mvaddch(9, 5, 'E'); X mvaddch(11, 5, 'T'); X mvaddch(13, 5, 'I'); X mvaddch(15, 5, 'N'); X mvaddch(17, 5, 'G'); X mvaddch(19, 5, 'S'); X X} X X Xfromwho() X{ X mvaddstr(21, 13, FROMWHO); X X} X X Xdel_msg() X{ X mvaddstr(23, 68, "DEL to quit"); X X refresh(); X X} X X Xtree() X{ X mvwaddch(treescrn, 1, 11, '/'); X mvwaddch(treescrn, 2, 11, '/'); X mvwaddch(treescrn, 3, 10, '/'); X mvwaddch(treescrn, 4, 9, '/'); X mvwaddch(treescrn, 5, 9, '/'); X mvwaddch(treescrn, 6, 8, '/'); X mvwaddch(treescrn, 7, 7, '/'); X mvwaddch(treescrn, 8, 6, '/'); X mvwaddch(treescrn, 9, 6, '/'); X mvwaddch(treescrn, 10, 5, '/'); X mvwaddch(treescrn, 11, 3, '/'); X mvwaddch(treescrn, 12, 2, '/'); X X mvwaddch(treescrn, 1, 13, '\\'); X mvwaddch(treescrn, 2, 13, '\\'); X mvwaddch(treescrn, 3, 14, '\\'); X mvwaddch(treescrn, 4, 15, '\\'); X mvwaddch(treescrn, 5, 15, '\\'); X mvwaddch(treescrn, 6, 16, '\\'); X mvwaddch(treescrn, 7, 17, '\\'); X mvwaddch(treescrn, 8, 18, '\\'); X mvwaddch(treescrn, 9, 18, '\\'); X mvwaddch(treescrn, 10, 19, '\\'); X mvwaddch(treescrn, 11, 21, '\\'); X mvwaddch(treescrn, 12, 22, '\\'); X X mvwaddch(treescrn, 4, 10, '_'); X mvwaddch(treescrn, 4, 14, '_'); X mvwaddch(treescrn, 8, 7, '_'); X mvwaddch(treescrn, 8, 17, '_'); X X mvwaddstr(treescrn, 13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\"); X X mvwaddstr(treescrn, 14, 11, "| |"); X mvwaddstr(treescrn, 15, 11, "|_|"); X X wrefresh(treescrn); X wrefresh(w_del_msg); X X} X X Xballs() X{ X X overwrite(treescrn, treescrn2); X X mvwaddch(treescrn2, 3, 9, '@'); X mvwaddch(treescrn2, 3, 15, '@'); X mvwaddch(treescrn2, 4, 8, '@'); X mvwaddch(treescrn2, 4, 16, '@'); X mvwaddch(treescrn2, 5, 7, '@'); X mvwaddch(treescrn2, 5, 17, '@'); X mvwaddch(treescrn2, 7, 6, '@'); X mvwaddch(treescrn2, 7, 18, '@'); X mvwaddch(treescrn2, 8, 5, '@'); X mvwaddch(treescrn2, 8, 19, '@'); X mvwaddch(treescrn2, 10, 4, '@'); X mvwaddch(treescrn2, 10, 20, '@'); X mvwaddch(treescrn2, 11, 2, '@'); X mvwaddch(treescrn2, 11, 22, '@'); X mvwaddch(treescrn2, 12, 1, '@'); X mvwaddch(treescrn2, 12, 23, '@'); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstar() X{ X wstandout(treescrn2); X mvwaddch(treescrn2, 0, 12, '*'); X wstandend(treescrn2); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstrng1() X{ X mvwaddch(treescrn2, 3, 13, '\''); X mvwaddch(treescrn2, 3, 12, ':'); X mvwaddch(treescrn2, 3, 11, '.'); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstrng2() X{ X mvwaddch(treescrn2, 5, 14, '\''); X mvwaddch(treescrn2, 5, 13, ':'); X mvwaddch(treescrn2, 5, 12, '.'); X mvwaddch(treescrn2, 5, 11, ','); X mvwaddch(treescrn2, 6, 10, '\''); X mvwaddch(treescrn2, 6, 9, ':'); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstrng3() X{ X mvwaddch(treescrn2, 7, 16, '\''); X mvwaddch(treescrn2, 7, 15, ':'); X mvwaddch(treescrn2, 7, 14, '.'); X mvwaddch(treescrn2, 7, 13, ','); X mvwaddch(treescrn2, 8, 12, '\''); X mvwaddch(treescrn2, 8, 11, ':'); X mvwaddch(treescrn2, 8, 10, '.'); X mvwaddch(treescrn2, 8, 9, ','); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstrng4() X{ X mvwaddch(treescrn2, 9, 17, '\''); X mvwaddch(treescrn2, 9, 16, ':'); X mvwaddch(treescrn2, 9, 15, '.'); X mvwaddch(treescrn2, 9, 14, ','); X mvwaddch(treescrn2, 10, 13, '\''); X mvwaddch(treescrn2, 10, 12, ':'); X mvwaddch(treescrn2, 10, 11, '.'); X mvwaddch(treescrn2, 10, 10, ','); X mvwaddch(treescrn2, 11, 9, '\''); X mvwaddch(treescrn2, 11, 8, ':'); X mvwaddch(treescrn2, 11, 7, '.'); X mvwaddch(treescrn2, 11, 6, ','); X mvwaddch(treescrn2, 12, 5, '\''); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X Xstrng5() X{ X mvwaddch(treescrn2, 11, 19, '\''); X mvwaddch(treescrn2, 11, 18, ':'); X mvwaddch(treescrn2, 11, 17, '.'); X mvwaddch(treescrn2, 11, 16, ','); X mvwaddch(treescrn2, 12, 15, '\''); X mvwaddch(treescrn2, 12, 14, ':'); X mvwaddch(treescrn2, 12, 13, '.'); X mvwaddch(treescrn2, 12, 12, ','); X X /* save a fully lit tree */ X overwrite(treescrn2, treescrn); X X wrefresh(treescrn2); X wrefresh(w_del_msg); X} X X X Xblinkit() X{ X static int cycle; X X if(cycle > 4) X { X cycle = 0; X } X X X touchwin(treescrn8); X X switch(cycle) X { X X case 0: X overwrite(treescrn3,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X break; X case 1: X overwrite(treescrn4,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X break; X case 2: X overwrite(treescrn5,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X break; X case 3: X overwrite(treescrn6,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X break; X case 4: X overwrite(treescrn7,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X break; X } X X touchwin(treescrn8); X X X X /*ALL ON***************************************************/ X X X overwrite(treescrn,treescrn8); X wrefresh(treescrn8); X wrefresh(w_del_msg); X X X ++cycle; X} X X Xreindeer() X{ X int looper; X X y_pos = 0; X X X for(x_pos = 70; x_pos > 62; x_pos--) X { X if(x_pos < 62) X { X y_pos = 1; X } X for(looper = 0; looper < 4; looper++) X { X mvwaddch(dotdeer0, y_pos, x_pos, '.'); X wrefresh(dotdeer0); X wrefresh(w_del_msg); X werase(dotdeer0); X wrefresh(dotdeer0); X wrefresh(w_del_msg); X } X } X X y_pos = 2; X X for(x_pos; x_pos > 50; x_pos--) X { X X for(looper = 0; looper < 4; looper++) X { X X if(x_pos < 56) X { X y_pos = 3; X X mvwaddch(stardeer0, y_pos, x_pos, '*'); X wrefresh(stardeer0); X wrefresh(w_del_msg); X werase(stardeer0); X wrefresh(stardeer0); X wrefresh(w_del_msg); X } X else X { X mvwaddch(dotdeer0, y_pos, x_pos, '*'); X wrefresh(dotdeer0); X wrefresh(w_del_msg); X werase(dotdeer0); X wrefresh(dotdeer0); X wrefresh(w_del_msg); X } X } X } X X x_pos = 58; X X for(y_pos = 2; y_pos < 5; y_pos++) X { X X touchwin(lildeer0); X wrefresh(lildeer0); X wrefresh(w_del_msg); X X for(looper = 0; looper < 4; looper++) X { X mvwin(lildeer3, y_pos, x_pos); X wrefresh(lildeer3); X wrefresh(w_del_msg); X X mvwin(lildeer2, y_pos, x_pos); X wrefresh(lildeer2); X wrefresh(w_del_msg); X X mvwin(lildeer1, y_pos, x_pos); X wrefresh(lildeer1); X wrefresh(w_del_msg); X X mvwin(lildeer2, y_pos, x_pos); X wrefresh(lildeer2); X wrefresh(w_del_msg); X X mvwin(lildeer3, y_pos, x_pos); X wrefresh(lildeer3); X wrefresh(w_del_msg); X X touchwin(lildeer0); X wrefresh(lildeer0); X wrefresh(w_del_msg); X X x_pos -= 2; X } X } X X X x_pos = 35; X X for(y_pos = 5; y_pos < 10; y_pos++) X { X X touchwin(middeer0); X wrefresh(middeer0); X wrefresh(w_del_msg); X X for(looper = 0; looper < 2; looper++) X { X mvwin(middeer3, y_pos, x_pos); X wrefresh(middeer3); X wrefresh(w_del_msg); X X mvwin(middeer2, y_pos, x_pos); X wrefresh(middeer2); X wrefresh(w_del_msg); X X mvwin(middeer1, y_pos, x_pos); X wrefresh(middeer1); X wrefresh(w_del_msg); X X mvwin(middeer2, y_pos, x_pos); X wrefresh(middeer2); X wrefresh(w_del_msg); X X mvwin(middeer3, y_pos, x_pos); X wrefresh(middeer3); X wrefresh(w_del_msg); X X touchwin(middeer0); X wrefresh(middeer0); X wrefresh(w_del_msg); X X x_pos -= 3; X } X } X X sleep(2); X X y_pos = 1; X X for(x_pos = 8; x_pos < 16; x_pos++) X { X X mvwin(bigdeer4, y_pos, x_pos); X wrefresh(bigdeer4); X wrefresh(w_del_msg); X X mvwin(bigdeer3, y_pos, x_pos); X wrefresh(bigdeer3); X wrefresh(w_del_msg); X X mvwin(bigdeer2, y_pos, x_pos); X wrefresh(bigdeer2); X wrefresh(w_del_msg); X X mvwin(bigdeer1, y_pos, x_pos); X wrefresh(bigdeer1); X wrefresh(w_del_msg); X X mvwin(bigdeer2, y_pos, x_pos); X wrefresh(bigdeer2); X wrefresh(w_del_msg); X X mvwin(bigdeer3, y_pos, x_pos); X wrefresh(bigdeer3); X wrefresh(w_del_msg); X X mvwin(bigdeer4, y_pos, x_pos); X wrefresh(bigdeer4); X wrefresh(w_del_msg); X X mvwin(bigdeer0, y_pos, x_pos); X wrefresh(bigdeer0); X wrefresh(w_del_msg); X } X X --x_pos; X X for(looper = 0; looper < 6; looper++) X { X mvwin(lookdeer4, y_pos, x_pos); X wrefresh(lookdeer4); X wrefresh(w_del_msg); X X mvwin(lookdeer3, y_pos, x_pos); X wrefresh(lookdeer3); X wrefresh(w_del_msg); X X mvwin(lookdeer2, y_pos, x_pos); X wrefresh(lookdeer2); X wrefresh(w_del_msg); X X mvwin(lookdeer1, y_pos, x_pos); X wrefresh(lookdeer1); X wrefresh(w_del_msg); X X mvwin(lookdeer2, y_pos, x_pos); X wrefresh(lookdeer2); X wrefresh(w_del_msg); X X mvwin(lookdeer3, y_pos, x_pos); X wrefresh(lookdeer3); X wrefresh(w_del_msg); X X mvwin(lookdeer4, y_pos, x_pos); X wrefresh(lookdeer4); X wrefresh(w_del_msg); X X } X X mvwin(lookdeer0, y_pos, x_pos); X wrefresh(lookdeer0); X wrefresh(w_del_msg); X X for(y_pos; y_pos < 10; y_pos++) X { X X for(looper = 0; looper < 2; looper++) X { X mvwin(bigdeer4, y_pos, x_pos); X wrefresh(bigdeer4); X wrefresh(w_del_msg); X X mvwin(bigdeer3, y_pos, x_pos); X wrefresh(bigdeer3); X wrefresh(w_del_msg); X X mvwin(bigdeer2, y_pos, x_pos); X wrefresh(bigdeer2); X wrefresh(w_del_msg); X X mvwin(bigdeer1, y_pos, x_pos); X wrefresh(bigdeer1); X wrefresh(w_del_msg); X X mvwin(bigdeer2, y_pos, x_pos); X wrefresh(bigdeer2); X wrefresh(w_del_msg); X X mvwin(bigdeer3, y_pos, x_pos); X wrefresh(bigdeer3); X wrefresh(w_del_msg); X X mvwin(bigdeer4, y_pos, x_pos); X wrefresh(bigdeer4); X wrefresh(w_del_msg); X } X mvwin(bigdeer0, y_pos, x_pos); X wrefresh(bigdeer0); X wrefresh(w_del_msg); X } X X --y_pos; X X mvwin(lookdeer3, y_pos, x_pos); X wrefresh(lookdeer3); X wrefresh(w_del_msg); X X} X X X Xvoid done() X{ X signal(SIGINT,done); X signal(SIGHUP,done); X signal(SIGTERM,done); X signal(SIGQUIT,done); X clear(); X refresh(); X endwin(); X exit(0); X} EOF chars=`wc -c < 'asciixmas.c'` if test $chars != 32310; then echo 'asciixmas.c' is $chars characters, should be 32310 characters!; fi fi exit 0 -----------------------snip------------------------------- -- "Hey Rocky, watch me pull a rabbit out of my hat." Bullwinkle Moose "oh...a wise guy....Come here....I'll murder ya..." Moe Howard "I'm hunting wabbits...." Elmer Fudd "If I could typ I'd be dangerous" Rich Andrews