blob: 99c708730da4e2d7a31fc5820624c8e919cfd9a9 [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,
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# 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'))
69
70 return
71
72def 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
275 for cycle in range(0, 5):
276 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()
303
304 # 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()
350 w_del_msg.refresh()
351 dotdeer0.erase()
352 dotdeer0.refresh()
353 w_del_msg.refresh()
354
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):
363 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)
368
369 lildeer0.touchwin()
370 lildeer0.refresh()
371 w_del_msg.refresh()
372
373 x_pos -= 2
374
375 x_pos = 35
376
377 for y_pos in range(5, 10):
378
379 middeer0.touchwin()
380 middeer0.refresh()
381 w_del_msg.refresh()
382
383 for looper in range(0, 2):
384 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)
389
390 middeer0.touchwin()
391 middeer0.refresh()
392 w_del_msg.refresh()
393
394 x_pos -= 3
395
396 look_out(300)
397
398 y_pos = 1
399
400 for x_pos in range(8, 16):
401 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)
409
410 x_pos -= 1
411
412 for looper in range(0, 6):
413 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)
420
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):
425 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)
433
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
442
443 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)
455
456 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)
464
465 dotdeer0 = curses.newwin(3, 71, 0, 8)
466
467 stardeer0 = curses.newwin(4, 56, 0, 8)
468
469 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)
473
474 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)
478
479 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)
484
485 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)
490
491 w_holiday = curses.newwin(1, 27, 3, 27)
492
493 w_del_msg = curses.newwin(1, 20, 23, 60)
494
495 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
504
505 # 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
514
515 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
523
524 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:
529 lildeer2.addch(1, 3, ord('~')) # XXX
530 except curses.error:
531 pass
532
533 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('/'))
542
543 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('|'))
552
553 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")
580 bigdeer1.addstr(6, 7, "( \\_____( /") # ))
581 bigdeer1.addstr(7, 8, "( ) /")
582 bigdeer1.addstr(8, 9, "\\\\ /")
583 bigdeer1.addstr(9, 11, "\\>/>")
584
585 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")
602 bigdeer2.addstr(6, 7, "(( )____( /") # ))
603 bigdeer2.addstr(7, 7, "( / |")
604 bigdeer2.addstr(8, 8, "\\/ |")
605 bigdeer2.addstr(9, 9, "|> |>")
606
607 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")
624 bigdeer3.addstr(6, 6, "( ()_____( /") # ))
625 bigdeer3.addstr(7, 6, "/ / /")
626 bigdeer3.addstr(8, 5, "|/ \\")
627 bigdeer3.addstr(9, 5, "/> \\>")
628
629 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")
646 bigdeer4.addstr(6, 6, "( )______( /") # )
647 bigdeer4.addstr(7, 5, "(/ \\") # )
648 bigdeer4.addstr(8, 0, "v___= ----^")
649
650 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/")
656 lookdeer1.addstr(6, 7, "( \\_____( /") # ))
657 lookdeer1.addstr(7, 8, "( ) /")
658 lookdeer1.addstr(8, 9, "\\\\ /")
659 lookdeer1.addstr(9, 11, "\\>/>")
660
661 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/")
667 lookdeer2.addstr(6, 7, "(( )____( /") # ))
668 lookdeer2.addstr(7, 7, "( / |")
669 lookdeer2.addstr(8, 8, "\\/ |")
670 lookdeer2.addstr(9, 9, "|> |>")
671
672 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/")
678 lookdeer3.addstr(6, 6, "( ()_____( /") # ))
679 lookdeer3.addstr(7, 6, "/ / /")
680 lookdeer3.addstr(8, 5, "|/ \\")
681 lookdeer3.addstr(9, 5, "/> \\>")
682
683 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/")
689 lookdeer4.addstr(6, 6, "( )______( /") # )
690 lookdeer4.addstr(7, 5, "(/ \\") # )
691 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(' '))
783
784 # strng2
785
786 # 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
833 treescrn6.addch(6, 7, ord(' '))
834 treescrn6.addch(7, 18, ord(' '))
835 treescrn6.addch(10, 4, ord(' '))
836 treescrn6.addch(11, 23, ord(' '))
837
838 # star
839 treescrn6.standout()
840 treescrn6.addch(0, 12, ord('*'))
841 treescrn6.standend()
842
843 # strng1
844
845 # strng2
846 treescrn6.addch(5, 11, ord(' '))
847
848 # strng3
849 treescrn6.addch(7, 13, ord(' '))
850 treescrn6.addch(8, 9, ord(' '))
851
852 # strng4
853 treescrn6.addch(9, 14, ord(' '))
854 treescrn6.addch(10, 10, ord(' '))
855 treescrn6.addch(11, 6, ord(' '))
856
857 # strng5
858 treescrn6.addch(11, 16, ord(' '))
859 treescrn6.addch(12, 12, ord(' '))
860
861 # treescrn7
862
863 treescrn.overlay(treescrn7)
864
865 # 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(' '))
871
872 # star
873 treescrn7.addch(0, 12, ord('*'))
874
875 # strng1
876 treescrn7.addch(3, 12, ord(' '))
877
878 # strng2
879 treescrn7.addch(5, 13, ord(' '))
880 treescrn7.addch(6, 9, ord(' '))
881
882 # strng3
883 treescrn7.addch(7, 15, ord(' '))
884 treescrn7.addch(8, 11, ord(' '))
885
886 # strng4
887 treescrn7.addch(9, 16, ord(' '))
888 treescrn7.addch(10, 12, ord(' '))
889 treescrn7.addch(11, 8, ord(' '))
890
891 # strng5
892 treescrn7.addch(11, 18, ord(' '))
893 treescrn7.addch(12, 14, ord(' '))
894
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()
905
906curses.wrapper(main)