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