blob: 349b3a8bdaaec7aae3549c4c119fdfcc0d9da867 [file] [log] [blame]
Andrew M. Kuchling23382f52000-12-21 16:26:37 +00001# asciixmas
2# December 1989 Larry Bartz Indianapolis, IN
3#
4# $Id$
5#
6# I'm dreaming of an ascii character-based monochrome Christmas,
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00007# Just like the ones I used to know!
Andrew M. Kuchling23382f52000-12-21 16:26:37 +00008# 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# Notes on the Python version:
20# I used a couple of `try...except curses.error' to get around some functions
21# returning ERR. The errors come from using wrapping functions to fill
22# windows to the last character cell. The C version doesn't have this problem,
23# it simply ignores any return values.
24#
25
26import curses
27import sys
28
29FROMWHO = "Thomas Gellekum <tg@FreeBSD.org>"
30
31def set_color(win, color):
32 if curses.has_colors():
33 n = color + 1
34 curses.init_pair(n, color, my_bg)
35 win.attroff(curses.A_COLOR)
36 win.attron(curses.color_pair(n))
37
38def unset_color(win):
39 if curses.has_colors():
40 win.attrset(curses.color_pair(0))
41
42def look_out(msecs):
43 curses.napms(msecs)
44 if stdscr.getch() != -1:
45 curses.beep()
46 sys.exit(0)
47
48def boxit():
49 for y in range(0, 20):
50 stdscr.addch(y, 7, ord('|'))
51
52 for x in range(8, 80):
53 stdscr.addch(19, x, ord('_'))
54
55 for x in range(0, 80):
56 stdscr.addch(22, x, ord('_'))
57
58 return
59
60def seas():
61 stdscr.addch(4, 1, ord('S'))
62 stdscr.addch(6, 1, ord('E'))
63 stdscr.addch(8, 1, ord('A'))
64 stdscr.addch(10, 1, ord('S'))
65 stdscr.addch(12, 1, ord('O'))
66 stdscr.addch(14, 1, ord('N'))
67 stdscr.addch(16, 1, ord("'"))
68 stdscr.addch(18, 1, ord('S'))
Tim Peterse6ddc8b2004-07-18 05:56:09 +000069
Andrew M. Kuchling23382f52000-12-21 16:26:37 +000070 return
Tim Peterse6ddc8b2004-07-18 05:56:09 +000071
Andrew M. Kuchling23382f52000-12-21 16:26:37 +000072def greet():
73 stdscr.addch(3, 5, ord('G'))
74 stdscr.addch(5, 5, ord('R'))
75 stdscr.addch(7, 5, ord('E'))
76 stdscr.addch(9, 5, ord('E'))
77 stdscr.addch(11, 5, ord('T'))
78 stdscr.addch(13, 5, ord('I'))
79 stdscr.addch(15, 5, ord('N'))
80 stdscr.addch(17, 5, ord('G'))
81 stdscr.addch(19, 5, ord('S'))
82
83 return
84
85def fromwho():
86 stdscr.addstr(21, 13, FROMWHO)
87 return
88
89def tree():
90 set_color(treescrn, curses.COLOR_GREEN)
91 treescrn.addch(1, 11, ord('/'))
92 treescrn.addch(2, 11, ord('/'))
93 treescrn.addch(3, 10, ord('/'))
94 treescrn.addch(4, 9, ord('/'))
95 treescrn.addch(5, 9, ord('/'))
96 treescrn.addch(6, 8, ord('/'))
97 treescrn.addch(7, 7, ord('/'))
98 treescrn.addch(8, 6, ord('/'))
99 treescrn.addch(9, 6, ord('/'))
100 treescrn.addch(10, 5, ord('/'))
101 treescrn.addch(11, 3, ord('/'))
102 treescrn.addch(12, 2, ord('/'))
103
104 treescrn.addch(1, 13, ord('\\'))
105 treescrn.addch(2, 13, ord('\\'))
106 treescrn.addch(3, 14, ord('\\'))
107 treescrn.addch(4, 15, ord('\\'))
108 treescrn.addch(5, 15, ord('\\'))
109 treescrn.addch(6, 16, ord('\\'))
110 treescrn.addch(7, 17, ord('\\'))
111 treescrn.addch(8, 18, ord('\\'))
112 treescrn.addch(9, 18, ord('\\'))
113 treescrn.addch(10, 19, ord('\\'))
114 treescrn.addch(11, 21, ord('\\'))
115 treescrn.addch(12, 22, ord('\\'))
116
117 treescrn.addch(4, 10, ord('_'))
118 treescrn.addch(4, 14, ord('_'))
119 treescrn.addch(8, 7, ord('_'))
120 treescrn.addch(8, 17, ord('_'))
121
122 treescrn.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\")
123
124 treescrn.addstr(14, 11, "| |")
125 treescrn.addstr(15, 11, "|_|")
126
127 unset_color(treescrn)
128 treescrn.refresh()
129 w_del_msg.refresh()
130
131 return
132
133def balls():
134 treescrn.overlay(treescrn2)
135
136 set_color(treescrn2, curses.COLOR_BLUE)
137 treescrn2.addch(3, 9, ord('@'))
138 treescrn2.addch(3, 15, ord('@'))
139 treescrn2.addch(4, 8, ord('@'))
140 treescrn2.addch(4, 16, ord('@'))
141 treescrn2.addch(5, 7, ord('@'))
142 treescrn2.addch(5, 17, ord('@'))
143 treescrn2.addch(7, 6, ord('@'))
144 treescrn2.addch(7, 18, ord('@'))
145 treescrn2.addch(8, 5, ord('@'))
146 treescrn2.addch(8, 19, ord('@'))
147 treescrn2.addch(10, 4, ord('@'))
148 treescrn2.addch(10, 20, ord('@'))
149 treescrn2.addch(11, 2, ord('@'))
150 treescrn2.addch(11, 22, ord('@'))
151 treescrn2.addch(12, 1, ord('@'))
152 treescrn2.addch(12, 23, ord('@'))
153
154 unset_color(treescrn2)
155 treescrn2.refresh()
156 w_del_msg.refresh()
157 return
158
159def star():
160 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
161 set_color(treescrn2, curses.COLOR_YELLOW)
162
163 treescrn2.addch(0, 12, ord('*'))
164 treescrn2.standend()
165
166 unset_color(treescrn2)
167 treescrn2.refresh()
168 w_del_msg.refresh()
169 return
170
171def strng1():
172 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
173 set_color(treescrn2, curses.COLOR_WHITE)
174
175 treescrn2.addch(3, 13, ord('\''))
176 treescrn2.addch(3, 12, ord(':'))
177 treescrn2.addch(3, 11, ord('.'))
178
179 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
180 unset_color(treescrn2)
181
182 treescrn2.refresh()
183 w_del_msg.refresh()
184 return
185
186def strng2():
187 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
188 set_color(treescrn2, curses.COLOR_WHITE)
189
190 treescrn2.addch(5, 14, ord('\''))
191 treescrn2.addch(5, 13, ord(':'))
192 treescrn2.addch(5, 12, ord('.'))
193 treescrn2.addch(5, 11, ord(','))
194 treescrn2.addch(6, 10, ord('\''))
195 treescrn2.addch(6, 9, ord(':'))
196
197 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
198 unset_color(treescrn2)
199
200 treescrn2.refresh()
201 w_del_msg.refresh()
202 return
203
204def strng3():
205 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
206 set_color(treescrn2, curses.COLOR_WHITE)
207
208 treescrn2.addch(7, 16, ord('\''))
209 treescrn2.addch(7, 15, ord(':'))
210 treescrn2.addch(7, 14, ord('.'))
211 treescrn2.addch(7, 13, ord(','))
212 treescrn2.addch(8, 12, ord('\''))
213 treescrn2.addch(8, 11, ord(':'))
214 treescrn2.addch(8, 10, ord('.'))
215 treescrn2.addch(8, 9, ord(','))
216
217 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
218 unset_color(treescrn2)
219
220 treescrn2.refresh()
221 w_del_msg.refresh()
222 return
223
224def strng4():
225 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
226 set_color(treescrn2, curses.COLOR_WHITE)
227
228 treescrn2.addch(9, 17, ord('\''))
229 treescrn2.addch(9, 16, ord(':'))
230 treescrn2.addch(9, 15, ord('.'))
231 treescrn2.addch(9, 14, ord(','))
232 treescrn2.addch(10, 13, ord('\''))
233 treescrn2.addch(10, 12, ord(':'))
234 treescrn2.addch(10, 11, ord('.'))
235 treescrn2.addch(10, 10, ord(','))
236 treescrn2.addch(11, 9, ord('\''))
237 treescrn2.addch(11, 8, ord(':'))
238 treescrn2.addch(11, 7, ord('.'))
239 treescrn2.addch(11, 6, ord(','))
240 treescrn2.addch(12, 5, ord('\''))
241
242 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
243 unset_color(treescrn2)
244
245 treescrn2.refresh()
246 w_del_msg.refresh()
247 return
248
249def strng5():
250 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
251 set_color(treescrn2, curses.COLOR_WHITE)
252
253 treescrn2.addch(11, 19, ord('\''))
254 treescrn2.addch(11, 18, ord(':'))
255 treescrn2.addch(11, 17, ord('.'))
256 treescrn2.addch(11, 16, ord(','))
257 treescrn2.addch(12, 15, ord('\''))
258 treescrn2.addch(12, 14, ord(':'))
259 treescrn2.addch(12, 13, ord('.'))
260 treescrn2.addch(12, 12, ord(','))
261
262 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
263 unset_color(treescrn2)
264
265 # save a fully lit tree
266 treescrn2.overlay(treescrn)
267
268 treescrn2.refresh()
269 w_del_msg.refresh()
270 return
271
272def blinkit():
273 treescrn8.touchwin()
274
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000275 for cycle in range(5):
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000276 if cycle == 0:
277 treescrn3.overlay(treescrn8)
278 treescrn8.refresh()
279 w_del_msg.refresh()
280 break
281 elif cycle == 1:
282 treescrn4.overlay(treescrn8)
283 treescrn8.refresh()
284 w_del_msg.refresh()
285 break
286 elif cycle == 2:
287 treescrn5.overlay(treescrn8)
288 treescrn8.refresh()
289 w_del_msg.refresh()
290 break
291 elif cycle == 3:
292 treescrn6.overlay(treescrn8)
293 treescrn8.refresh()
294 w_del_msg.refresh()
295 break
296 elif cycle == 4:
297 treescrn7.overlay(treescrn8)
298 treescrn8.refresh()
299 w_del_msg.refresh()
300 break
301
302 treescrn8.touchwin()
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000303
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000304 # ALL ON
305 treescrn.overlay(treescrn8)
306 treescrn8.refresh()
307 w_del_msg.refresh()
308
309 return
310
311def deer_step(win, y, x):
312 win.mvwin(y, x)
313 win.refresh()
314 w_del_msg.refresh()
315 look_out(5)
316
317def reindeer():
318 y_pos = 0
319
320 for x_pos in range(70, 62, -1):
321 if x_pos < 66: y_pos = 1
322 for looper in range(0, 4):
323 dotdeer0.addch(y_pos, x_pos, ord('.'))
324 dotdeer0.refresh()
325 w_del_msg.refresh()
326 dotdeer0.erase()
327 dotdeer0.refresh()
328 w_del_msg.refresh()
329 look_out(50)
330
331 y_pos = 2
332
333 for x_pos in range(x_pos - 1, 50, -1):
334 for looper in range(0, 4):
335 if x_pos < 56:
336 y_pos = 3
337
338 try:
339 stardeer0.addch(y_pos, x_pos, ord('*'))
340 except curses.error:
341 pass
342 stardeer0.refresh()
343 w_del_msg.refresh()
344 stardeer0.erase()
345 stardeer0.refresh()
346 w_del_msg.refresh()
347 else:
348 dotdeer0.addch(y_pos, x_pos, ord('*'))
349 dotdeer0.refresh()
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000350 w_del_msg.refresh()
351 dotdeer0.erase()
352 dotdeer0.refresh()
353 w_del_msg.refresh()
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000354
355 x_pos = 58
356
357 for y_pos in range(2, 5):
358 lildeer0.touchwin()
359 lildeer0.refresh()
360 w_del_msg.refresh()
361
362 for looper in range(0, 4):
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000363 deer_step(lildeer3, y_pos, x_pos)
364 deer_step(lildeer2, y_pos, x_pos)
365 deer_step(lildeer1, y_pos, x_pos)
366 deer_step(lildeer2, y_pos, x_pos)
367 deer_step(lildeer3, y_pos, x_pos)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000368
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000369 lildeer0.touchwin()
370 lildeer0.refresh()
371 w_del_msg.refresh()
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000372
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000373 x_pos -= 2
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000374
375 x_pos = 35
376
377 for y_pos in range(5, 10):
378
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000379 middeer0.touchwin()
380 middeer0.refresh()
381 w_del_msg.refresh()
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000382
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000383 for looper in range(2):
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000384 deer_step(middeer3, y_pos, x_pos)
385 deer_step(middeer2, y_pos, x_pos)
386 deer_step(middeer1, y_pos, x_pos)
387 deer_step(middeer2, y_pos, x_pos)
388 deer_step(middeer3, y_pos, x_pos)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000389
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000390 middeer0.touchwin()
391 middeer0.refresh()
392 w_del_msg.refresh()
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000393
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000394 x_pos -= 3
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000395
396 look_out(300)
397
398 y_pos = 1
399
400 for x_pos in range(8, 16):
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000401 deer_step(bigdeer4, y_pos, x_pos)
402 deer_step(bigdeer3, y_pos, x_pos)
403 deer_step(bigdeer2, y_pos, x_pos)
404 deer_step(bigdeer1, y_pos, x_pos)
405 deer_step(bigdeer2, y_pos, x_pos)
406 deer_step(bigdeer3, y_pos, x_pos)
407 deer_step(bigdeer4, y_pos, x_pos)
408 deer_step(bigdeer0, y_pos, x_pos)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000409
410 x_pos -= 1
411
412 for looper in range(0, 6):
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000413 deer_step(lookdeer4, y_pos, x_pos)
414 deer_step(lookdeer3, y_pos, x_pos)
415 deer_step(lookdeer2, y_pos, x_pos)
416 deer_step(lookdeer1, y_pos, x_pos)
417 deer_step(lookdeer2, y_pos, x_pos)
418 deer_step(lookdeer3, y_pos, x_pos)
419 deer_step(lookdeer4, y_pos, x_pos)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000420
421 deer_step(lookdeer0, y_pos, x_pos)
422
423 for y_pos in range(y_pos, 10):
424 for looper in range(0, 2):
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000425 deer_step(bigdeer4, y_pos, x_pos)
426 deer_step(bigdeer3, y_pos, x_pos)
427 deer_step(bigdeer2, y_pos, x_pos)
428 deer_step(bigdeer1, y_pos, x_pos)
429 deer_step(bigdeer2, y_pos, x_pos)
430 deer_step(bigdeer3, y_pos, x_pos)
431 deer_step(bigdeer4, y_pos, x_pos)
432 deer_step(bigdeer0, y_pos, x_pos)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000433
434 y_pos -= 1
435
436 deer_step(lookdeer3, y_pos, x_pos)
437 return
438
439def main(win):
440 global stdscr
441 stdscr = win
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000442
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000443 global my_bg, y_pos, x_pos
444 global treescrn, treescrn2, treescrn3, treescrn4
445 global treescrn5, treescrn6, treescrn7, treescrn8
446 global dotdeer0, stardeer0
447 global lildeer0, lildeer1, lildeer2, lildeer3
448 global middeer0, middeer1, middeer2, middeer3
449 global bigdeer0, bigdeer1, bigdeer2, bigdeer3, bigdeer4
450 global lookdeer0, lookdeer1, lookdeer2, lookdeer3, lookdeer4
451 global w_holiday, w_del_msg
452
453 my_bg = curses.COLOR_BLACK
454 # curses.curs_set(0)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000455
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000456 treescrn = curses.newwin(16, 27, 3, 53)
457 treescrn2 = curses.newwin(16, 27, 3, 53)
458 treescrn3 = curses.newwin(16, 27, 3, 53)
459 treescrn4 = curses.newwin(16, 27, 3, 53)
460 treescrn5 = curses.newwin(16, 27, 3, 53)
461 treescrn6 = curses.newwin(16, 27, 3, 53)
462 treescrn7 = curses.newwin(16, 27, 3, 53)
463 treescrn8 = curses.newwin(16, 27, 3, 53)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000464
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000465 dotdeer0 = curses.newwin(3, 71, 0, 8)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000466
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000467 stardeer0 = curses.newwin(4, 56, 0, 8)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000468
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000469 lildeer0 = curses.newwin(7, 53, 0, 8)
470 lildeer1 = curses.newwin(2, 4, 0, 0)
471 lildeer2 = curses.newwin(2, 4, 0, 0)
472 lildeer3 = curses.newwin(2, 4, 0, 0)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000473
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000474 middeer0 = curses.newwin(15, 42, 0, 8)
475 middeer1 = curses.newwin(3, 7, 0, 0)
476 middeer2 = curses.newwin(3, 7, 0, 0)
477 middeer3 = curses.newwin(3, 7, 0, 0)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000478
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000479 bigdeer0 = curses.newwin(10, 23, 0, 0)
480 bigdeer1 = curses.newwin(10, 23, 0, 0)
481 bigdeer2 = curses.newwin(10, 23, 0, 0)
482 bigdeer3 = curses.newwin(10, 23, 0, 0)
483 bigdeer4 = curses.newwin(10, 23, 0, 0)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000484
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000485 lookdeer0 = curses.newwin(10, 25, 0, 0)
486 lookdeer1 = curses.newwin(10, 25, 0, 0)
487 lookdeer2 = curses.newwin(10, 25, 0, 0)
488 lookdeer3 = curses.newwin(10, 25, 0, 0)
489 lookdeer4 = curses.newwin(10, 25, 0, 0)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000490
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000491 w_holiday = curses.newwin(1, 27, 3, 27)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000492
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000493 w_del_msg = curses.newwin(1, 20, 23, 60)
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000494
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000495 try:
496 w_del_msg.addstr(0, 0, "Hit any key to quit")
497 except curses.error:
498 pass
499
500 try:
501 w_holiday.addstr(0, 0, "H A P P Y H O L I D A Y S")
502 except curses.error:
503 pass
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000504
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000505 # set up the windows for our various reindeer
506 lildeer1.addch(0, 0, ord('V'))
507 lildeer1.addch(1, 0, ord('@'))
508 lildeer1.addch(1, 1, ord('<'))
509 lildeer1.addch(1, 2, ord('>'))
510 try:
511 lildeer1.addch(1, 3, ord('~'))
512 except curses.error:
513 pass
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000514
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000515 lildeer2.addch(0, 0, ord('V'))
516 lildeer2.addch(1, 0, ord('@'))
517 lildeer2.addch(1, 1, ord('|'))
518 lildeer2.addch(1, 2, ord('|'))
519 try:
520 lildeer2.addch(1, 3, ord('~'))
521 except curses.error:
522 pass
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000523
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000524 lildeer3.addch(0, 0, ord('V'))
525 lildeer3.addch(1, 0, ord('@'))
526 lildeer3.addch(1, 1, ord('>'))
527 lildeer3.addch(1, 2, ord('<'))
528 try:
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000529 lildeer2.addch(1, 3, ord('~')) # XXX
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000530 except curses.error:
531 pass
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000532
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000533 middeer1.addch(0, 2, ord('y'))
534 middeer1.addch(0, 3, ord('y'))
535 middeer1.addch(1, 2, ord('0'))
536 middeer1.addch(1, 3, ord('('))
537 middeer1.addch(1, 4, ord('='))
538 middeer1.addch(1, 5, ord(')'))
539 middeer1.addch(1, 6, ord('~'))
540 middeer1.addch(2, 3, ord('\\'))
541 middeer1.addch(2, 5, ord('/'))
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000542
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000543 middeer2.addch(0, 2, ord('y'))
544 middeer2.addch(0, 3, ord('y'))
545 middeer2.addch(1, 2, ord('0'))
546 middeer2.addch(1, 3, ord('('))
547 middeer2.addch(1, 4, ord('='))
548 middeer2.addch(1, 5, ord(')'))
549 middeer2.addch(1, 6, ord('~'))
550 middeer2.addch(2, 3, ord('|'))
551 middeer2.addch(2, 5, ord('|'))
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000552
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000553 middeer3.addch(0, 2, ord('y'))
554 middeer3.addch(0, 3, ord('y'))
555 middeer3.addch(1, 2, ord('0'))
556 middeer3.addch(1, 3, ord('('))
557 middeer3.addch(1, 4, ord('='))
558 middeer3.addch(1, 5, ord(')'))
559 middeer3.addch(1, 6, ord('~'))
560 middeer3.addch(2, 3, ord('/'))
561 middeer3.addch(2, 5, ord('\\'))
562
563 bigdeer1.addch(0, 17, ord('\\'))
564 bigdeer1.addch(0, 18, ord('/'))
565 bigdeer1.addch(0, 19, ord('\\'))
566 bigdeer1.addch(0, 20, ord('/'))
567 bigdeer1.addch(1, 18, ord('\\'))
568 bigdeer1.addch(1, 20, ord('/'))
569 bigdeer1.addch(2, 19, ord('|'))
570 bigdeer1.addch(2, 20, ord('_'))
571 bigdeer1.addch(3, 18, ord('/'))
572 bigdeer1.addch(3, 19, ord('^'))
573 bigdeer1.addch(3, 20, ord('0'))
574 bigdeer1.addch(3, 21, ord('\\'))
575 bigdeer1.addch(4, 17, ord('/'))
576 bigdeer1.addch(4, 18, ord('/'))
577 bigdeer1.addch(4, 19, ord('\\'))
578 bigdeer1.addch(4, 22, ord('\\'))
579 bigdeer1.addstr(5, 7, "^~~~~~~~~// ~~U")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000580 bigdeer1.addstr(6, 7, "( \\_____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000581 bigdeer1.addstr(7, 8, "( ) /")
582 bigdeer1.addstr(8, 9, "\\\\ /")
583 bigdeer1.addstr(9, 11, "\\>/>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000584
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000585 bigdeer2.addch(0, 17, ord('\\'))
586 bigdeer2.addch(0, 18, ord('/'))
587 bigdeer2.addch(0, 19, ord('\\'))
588 bigdeer2.addch(0, 20, ord('/'))
589 bigdeer2.addch(1, 18, ord('\\'))
590 bigdeer2.addch(1, 20, ord('/'))
591 bigdeer2.addch(2, 19, ord('|'))
592 bigdeer2.addch(2, 20, ord('_'))
593 bigdeer2.addch(3, 18, ord('/'))
594 bigdeer2.addch(3, 19, ord('^'))
595 bigdeer2.addch(3, 20, ord('0'))
596 bigdeer2.addch(3, 21, ord('\\'))
597 bigdeer2.addch(4, 17, ord('/'))
598 bigdeer2.addch(4, 18, ord('/'))
599 bigdeer2.addch(4, 19, ord('\\'))
600 bigdeer2.addch(4, 22, ord('\\'))
601 bigdeer2.addstr(5, 7, "^~~~~~~~~// ~~U")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000602 bigdeer2.addstr(6, 7, "(( )____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000603 bigdeer2.addstr(7, 7, "( / |")
604 bigdeer2.addstr(8, 8, "\\/ |")
605 bigdeer2.addstr(9, 9, "|> |>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000606
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000607 bigdeer3.addch(0, 17, ord('\\'))
608 bigdeer3.addch(0, 18, ord('/'))
609 bigdeer3.addch(0, 19, ord('\\'))
610 bigdeer3.addch(0, 20, ord('/'))
611 bigdeer3.addch(1, 18, ord('\\'))
612 bigdeer3.addch(1, 20, ord('/'))
613 bigdeer3.addch(2, 19, ord('|'))
614 bigdeer3.addch(2, 20, ord('_'))
615 bigdeer3.addch(3, 18, ord('/'))
616 bigdeer3.addch(3, 19, ord('^'))
617 bigdeer3.addch(3, 20, ord('0'))
618 bigdeer3.addch(3, 21, ord('\\'))
619 bigdeer3.addch(4, 17, ord('/'))
620 bigdeer3.addch(4, 18, ord('/'))
621 bigdeer3.addch(4, 19, ord('\\'))
622 bigdeer3.addch(4, 22, ord('\\'))
623 bigdeer3.addstr(5, 7, "^~~~~~~~~// ~~U")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000624 bigdeer3.addstr(6, 6, "( ()_____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000625 bigdeer3.addstr(7, 6, "/ / /")
626 bigdeer3.addstr(8, 5, "|/ \\")
627 bigdeer3.addstr(9, 5, "/> \\>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000628
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000629 bigdeer4.addch(0, 17, ord('\\'))
630 bigdeer4.addch(0, 18, ord('/'))
631 bigdeer4.addch(0, 19, ord('\\'))
632 bigdeer4.addch(0, 20, ord('/'))
633 bigdeer4.addch(1, 18, ord('\\'))
634 bigdeer4.addch(1, 20, ord('/'))
635 bigdeer4.addch(2, 19, ord('|'))
636 bigdeer4.addch(2, 20, ord('_'))
637 bigdeer4.addch(3, 18, ord('/'))
638 bigdeer4.addch(3, 19, ord('^'))
639 bigdeer4.addch(3, 20, ord('0'))
640 bigdeer4.addch(3, 21, ord('\\'))
641 bigdeer4.addch(4, 17, ord('/'))
642 bigdeer4.addch(4, 18, ord('/'))
643 bigdeer4.addch(4, 19, ord('\\'))
644 bigdeer4.addch(4, 22, ord('\\'))
645 bigdeer4.addstr(5, 7, "^~~~~~~~~// ~~U")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000646 bigdeer4.addstr(6, 6, "( )______( /") # )
647 bigdeer4.addstr(7, 5, "(/ \\") # )
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000648 bigdeer4.addstr(8, 0, "v___= ----^")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000649
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000650 lookdeer1.addstr(0, 16, "\\/ \\/")
651 lookdeer1.addstr(1, 17, "\\Y/ \\Y/")
652 lookdeer1.addstr(2, 19, "\\=/")
653 lookdeer1.addstr(3, 17, "^\\o o/^")
654 lookdeer1.addstr(4, 17, "//( )")
655 lookdeer1.addstr(5, 7, "^~~~~~~~~// \\O/")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000656 lookdeer1.addstr(6, 7, "( \\_____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000657 lookdeer1.addstr(7, 8, "( ) /")
658 lookdeer1.addstr(8, 9, "\\\\ /")
659 lookdeer1.addstr(9, 11, "\\>/>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000660
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000661 lookdeer2.addstr(0, 16, "\\/ \\/")
662 lookdeer2.addstr(1, 17, "\\Y/ \\Y/")
663 lookdeer2.addstr(2, 19, "\\=/")
664 lookdeer2.addstr(3, 17, "^\\o o/^")
665 lookdeer2.addstr(4, 17, "//( )")
666 lookdeer2.addstr(5, 7, "^~~~~~~~~// \\O/")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000667 lookdeer2.addstr(6, 7, "(( )____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000668 lookdeer2.addstr(7, 7, "( / |")
669 lookdeer2.addstr(8, 8, "\\/ |")
670 lookdeer2.addstr(9, 9, "|> |>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000671
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000672 lookdeer3.addstr(0, 16, "\\/ \\/")
673 lookdeer3.addstr(1, 17, "\\Y/ \\Y/")
674 lookdeer3.addstr(2, 19, "\\=/")
675 lookdeer3.addstr(3, 17, "^\\o o/^")
676 lookdeer3.addstr(4, 17, "//( )")
677 lookdeer3.addstr(5, 7, "^~~~~~~~~// \\O/")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000678 lookdeer3.addstr(6, 6, "( ()_____( /") # ))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000679 lookdeer3.addstr(7, 6, "/ / /")
680 lookdeer3.addstr(8, 5, "|/ \\")
681 lookdeer3.addstr(9, 5, "/> \\>")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000682
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000683 lookdeer4.addstr(0, 16, "\\/ \\/")
684 lookdeer4.addstr(1, 17, "\\Y/ \\Y/")
685 lookdeer4.addstr(2, 19, "\\=/")
686 lookdeer4.addstr(3, 17, "^\\o o/^")
687 lookdeer4.addstr(4, 17, "//( )")
688 lookdeer4.addstr(5, 7, "^~~~~~~~~// \\O/")
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000689 lookdeer4.addstr(6, 6, "( )______( /") # )
690 lookdeer4.addstr(7, 5, "(/ \\") # )
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000691 lookdeer4.addstr(8, 0, "v___= ----^")
692
693 ###############################################
694 curses.cbreak()
695 stdscr.nodelay(1)
696
697 while 1:
698 stdscr.clear()
699 treescrn.erase()
700 w_del_msg.touchwin()
701 treescrn.touchwin()
702 treescrn2.erase()
703 treescrn2.touchwin()
704 treescrn8.erase()
705 treescrn8.touchwin()
706 stdscr.refresh()
707 look_out(150)
708 boxit()
709 stdscr.refresh()
710 look_out(150)
711 seas()
712 stdscr.refresh()
713 greet()
714 stdscr.refresh()
715 look_out(150)
716 fromwho()
717 stdscr.refresh()
718 look_out(150)
719 tree()
720 look_out(150)
721 balls()
722 look_out(150)
723 star()
724 look_out(150)
725 strng1()
726 strng2()
727 strng3()
728 strng4()
729 strng5()
730
731 # set up the windows for our blinking trees
732 #
733 # treescrn3
734 treescrn.overlay(treescrn3)
735
736 # balls
737 treescrn3.addch(4, 18, ord(' '))
738 treescrn3.addch(7, 6, ord(' '))
739 treescrn3.addch(8, 19, ord(' '))
740 treescrn3.addch(11, 22, ord(' '))
741
742 # star
743 treescrn3.addch(0, 12, ord('*'))
744
745 # strng1
746 treescrn3.addch(3, 11, ord(' '))
747
748 # strng2
749 treescrn3.addch(5, 13, ord(' '))
750 treescrn3.addch(6, 10, ord(' '))
751
752 # strng3
753 treescrn3.addch(7, 16, ord(' '))
754 treescrn3.addch(7, 14, ord(' '))
755
756 # strng4
757 treescrn3.addch(10, 13, ord(' '))
758 treescrn3.addch(10, 10, ord(' '))
759 treescrn3.addch(11, 8, ord(' '))
760
761 # strng5
762 treescrn3.addch(11, 18, ord(' '))
763 treescrn3.addch(12, 13, ord(' '))
764
765 # treescrn4
766 treescrn.overlay(treescrn4)
767
768 # balls
769 treescrn4.addch(3, 9, ord(' '))
770 treescrn4.addch(4, 16, ord(' '))
771 treescrn4.addch(7, 6, ord(' '))
772 treescrn4.addch(8, 19, ord(' '))
773 treescrn4.addch(11, 2, ord(' '))
774 treescrn4.addch(12, 23, ord(' '))
775
776 # star
777 treescrn4.standout()
778 treescrn4.addch(0, 12, ord('*'))
779 treescrn4.standend()
780
781 # strng1
782 treescrn4.addch(3, 13, ord(' '))
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000783
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000784 # strng2
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000785
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000786 # strng3
787 treescrn4.addch(7, 15, ord(' '))
788 treescrn4.addch(8, 11, ord(' '))
789
790 # strng4
791 treescrn4.addch(9, 16, ord(' '))
792 treescrn4.addch(10, 12, ord(' '))
793 treescrn4.addch(11, 8, ord(' '))
794
795 # strng5
796 treescrn4.addch(11, 18, ord(' '))
797 treescrn4.addch(12, 14, ord(' '))
798
799 # treescrn5
800 treescrn.overlay(treescrn5)
801
802 # balls
803 treescrn5.addch(3, 15, ord(' '))
804 treescrn5.addch(10, 20, ord(' '))
805 treescrn5.addch(12, 1, ord(' '))
806
807 # star
808 treescrn5.addch(0, 12, ord(' '))
809
810 # strng1
811 treescrn5.addch(3, 11, ord(' '))
812
813 # strng2
814 treescrn5.addch(5, 12, ord(' '))
815
816 # strng3
817 treescrn5.addch(7, 14, ord(' '))
818 treescrn5.addch(8, 10, ord(' '))
819
820 # strng4
821 treescrn5.addch(9, 15, ord(' '))
822 treescrn5.addch(10, 11, ord(' '))
823 treescrn5.addch(11, 7, ord(' '))
824
825 # strng5
826 treescrn5.addch(11, 17, ord(' '))
827 treescrn5.addch(12, 13, ord(' '))
828
829 # treescrn6
830 treescrn.overlay(treescrn6)
831
832 # balls
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000833 treescrn6.addch(6, 7, ord(' '))
834 treescrn6.addch(7, 18, ord(' '))
835 treescrn6.addch(10, 4, ord(' '))
836 treescrn6.addch(11, 23, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000837
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000838 # star
839 treescrn6.standout()
840 treescrn6.addch(0, 12, ord('*'))
841 treescrn6.standend()
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000842
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000843 # strng1
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000844
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000845 # strng2
846 treescrn6.addch(5, 11, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000847
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000848 # strng3
849 treescrn6.addch(7, 13, ord(' '))
850 treescrn6.addch(8, 9, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000851
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000852 # strng4
853 treescrn6.addch(9, 14, ord(' '))
854 treescrn6.addch(10, 10, ord(' '))
855 treescrn6.addch(11, 6, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000856
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000857 # strng5
858 treescrn6.addch(11, 16, ord(' '))
859 treescrn6.addch(12, 12, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000860
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000861 # treescrn7
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000862
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000863 treescrn.overlay(treescrn7)
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000864
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000865 # balls
866 treescrn7.addch(3, 15, ord(' '))
867 treescrn7.addch(6, 7, ord(' '))
868 treescrn7.addch(7, 18, ord(' '))
869 treescrn7.addch(10, 4, ord(' '))
870 treescrn7.addch(11, 22, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000871
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000872 # star
873 treescrn7.addch(0, 12, ord('*'))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000874
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000875 # strng1
876 treescrn7.addch(3, 12, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000877
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000878 # strng2
879 treescrn7.addch(5, 13, ord(' '))
880 treescrn7.addch(6, 9, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000881
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000882 # strng3
883 treescrn7.addch(7, 15, ord(' '))
884 treescrn7.addch(8, 11, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000885
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000886 # strng4
887 treescrn7.addch(9, 16, ord(' '))
888 treescrn7.addch(10, 12, ord(' '))
889 treescrn7.addch(11, 8, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000890
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000891 # strng5
892 treescrn7.addch(11, 18, ord(' '))
893 treescrn7.addch(12, 14, ord(' '))
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000894
895 look_out(150)
896 reindeer()
897
898 w_holiday.touchwin()
899 w_holiday.refresh()
900 w_del_msg.refresh()
901
902 look_out(500)
903 for i in range(0, 20):
904 blinkit()
Tim Peterse6ddc8b2004-07-18 05:56:09 +0000905
Andrew M. Kuchling23382f52000-12-21 16:26:37 +0000906curses.wrapper(main)