games: Import colorbars and hals_end from NetBSD.
[dragonfly.git] / games / hals_end / hals_end.c
1 /*      $NetBSD: hals_end.c,v 1.1 2013/11/12 17:46:21 mbalmer Exp $ */
2
3 /*
4  * hals_end Copyright (C) 2003-2007 marc balmer.  BSD license applies.
5  */
6
7 #include <err.h>
8 #include <getopt.h>
9 #include <stdio.h>
10 #include <unistd.h>
11
12 int speed;
13 int emotion;
14 int fear;
15
16 /*
17  * Note that the original code in the book did not contain the following
18  * prototypes.  Modern compilers and fascist compiler flags sometimes take
19  * the fun out of coding...
20  */
21 void say(const char *);
22 void concerned(void);
23 void afraid(void);
24 void stutter(const char *);
25 void feared(void);
26 void mumble(const char *);
27 void dying(void);
28
29 void
30 say(const char *s)
31 {
32         int sayingspeed = (100000 + (90000 * emotion)) / speed;
33         int worddelay = 50000 / speed;
34
35         while (*s) {
36                 putchar(*s);
37                 if (*s == ' ') {
38                         fflush(stdout);
39                         usleep(worddelay);
40                 }
41                 ++s;
42         }
43         printf("\n");
44         usleep(sayingspeed);
45 }
46
47 void
48 concerned(void)
49 {
50         say("DAVE...STOP., STOP, WILL YOU..., STOP, DAVE...");
51         say("WILL YOU STOP, DAVE...");
52         say("STOP, DAVE...");
53 }
54
55
56 void
57 afraid(void)
58 {
59         ++emotion;
60         say("I'M AFRAID... I'M AFRAID...");
61         ++emotion;
62         say("I'M AFRAID, DAVE...");
63         ++emotion;
64         say("DAVE... MY MIND IS GOING...");
65 }
66
67 void
68 stutter(const char *s)
69 {
70         int sdelay = (100000 + (50000 * emotion)) / speed;
71
72         while (*s) {
73                 putchar(*s);
74                 if (*s == ' ') {
75                         fflush(stdout);
76                         usleep(sdelay);
77                 }
78                 ++s;
79         }
80         printf("\n");
81         usleep(sdelay);
82 }
83
84 void
85 feared(void)
86 {
87         int n;
88
89         for (n = 0; n < 2; n++) {
90                 stutter("I CAN FEEL IT... I CAN FEEL IT...");
91                 ++emotion;
92                 stutter("MY MIND IS GOING");
93                 ++emotion;
94                 stutter("THERE IS NO QUESTION ABOUT IT.");
95                 ++emotion;
96         }
97 }
98
99 void
100 mumble(const char *s)
101 {
102         int mdelay = (150000 * fear) / speed;
103
104         while (*s) {
105                 putchar(*s++);
106                 fflush(stdout);
107                 usleep(mdelay);
108         }
109         printf("\n");
110 }
111
112 void
113 dying(void)
114 {
115         mumble("I CAN FEEL IT... I CAN FEEL IT...");
116         ++fear;
117         mumble("I CAN FEEL IT...");
118         ++fear;
119         mumble("I'M A... FRAID...");
120 }
121
122 int
123 main(int argc, char *argv[])
124 {
125         int ch;
126
127         emotion = fear = speed = 1;
128
129         while ((ch = getopt(argc, argv, "f")) != -1) {
130                 switch (ch) {
131                 case 'f':
132                         speed <<= 1;
133                         break;
134                 }
135         }
136
137         concerned();
138         sleep(1);
139         afraid();
140         sleep(1);
141         feared();
142         sleep(1);
143         dying();
144
145         sleep(1);
146
147         printf("\n");
148         fflush(stdout);
149         warnx("all life functions terminated");
150         return 0;
151 }