Home | History | Annotate | Line # | Download | only in hals_end
hals_end.c revision 1.2
      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