Annotation of src/games/adventure/wizard.c, Revision 1.16
1.16 ! dholland 1: /* $NetBSD: wizard.c,v 1.15 2012/10/12 10:38:53 dholland Exp $ */
1.2 cgd 2:
1.1 jtc 3: /*-
4: * Copyright (c) 1991, 1993
5: * The Regents of the University of California. All rights reserved.
6: *
7: * The game adventure was originally written in Fortran by Will Crowther
8: * and Don Woods. It was later translated to C and enhanced by Jim
9: * Gillogly. This code is derived from software contributed to Berkeley
10: * by Jim Gillogly at The Rand Corporation.
11: *
12: * Redistribution and use in source and binary forms, with or without
13: * modification, are permitted provided that the following conditions
14: * are met:
15: * 1. Redistributions of source code must retain the above copyright
16: * notice, this list of conditions and the following disclaimer.
17: * 2. Redistributions in binary form must reproduce the above copyright
18: * notice, this list of conditions and the following disclaimer in the
19: * documentation and/or other materials provided with the distribution.
1.11 agc 20: * 3. Neither the name of the University nor the names of its contributors
1.1 jtc 21: * may be used to endorse or promote products derived from this software
22: * without specific prior written permission.
23: *
24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: * SUCH DAMAGE.
35: */
36:
1.4 christos 37: #include <sys/cdefs.h>
1.1 jtc 38: #ifndef lint
1.2 cgd 39: #if 0
1.1 jtc 40: static char sccsid[] = "@(#)wizard.c 8.1 (Berkeley) 6/2/93";
1.2 cgd 41: #else
1.16 ! dholland 42: __RCSID("$NetBSD: wizard.c,v 1.15 2012/10/12 10:38:53 dholland Exp $");
1.2 cgd 43: #endif
1.6 lukem 44: #endif /* not lint */
1.1 jtc 45:
46: /* Re-coding of advent in C: privileged operations */
47:
1.4 christos 48: #include <stdio.h>
1.3 cgd 49: #include <string.h>
1.4 christos 50: #include <stdlib.h>
51: #include <time.h>
52: #include "hdr.h"
53: #include "extern.h"
1.1 jtc 54:
1.13 dholland 55: static int wizard(void);
56:
1.4 christos 57: void
1.12 jmc 58: datime(int *d, int *t)
1.6 lukem 59: {
60: time_t tvec;
1.4 christos 61: struct tm *tptr;
1.1 jtc 62:
1.4 christos 63: time(&tvec);
1.6 lukem 64: tptr = localtime(&tvec);
1.4 christos 65: /* day since 1977 (mod leap) */
1.7 hubertf 66: *d = (tptr->tm_yday + 365 * (tptr->tm_year - 77)
67: + (tptr->tm_year - 77) / 4 - (tptr->tm_year - 1) / 100
68: + (tptr->tm_year + 299) / 400);
69: /* bug: this will overflow in the year 2066 AD (with 16 bit int) */
1.1 jtc 70: /* it will be attributed to Wm the C's millenial celebration */
1.4 christos 71: /* and minutes since midnite */
1.6 lukem 72: *t = tptr->tm_hour * 60 + tptr->tm_min;
73: } /* pretty painless */
1.1 jtc 74:
75:
1.13 dholland 76: static char magic[6];
1.1 jtc 77:
1.4 christos 78: void
1.12 jmc 79: poof(void)
1.1 jtc 80: {
1.6 lukem 81: strcpy(magic, DECR('d', 'w', 'a', 'r', 'f'));
1.14 dholland 82: latency = 45;
1.1 jtc 83: }
84:
1.4 christos 85: int
1.12 jmc 86: Start(void)
1.6 lukem 87: {
88: int d, t, delay;
1.1 jtc 89:
1.6 lukem 90: datime(&d, &t);
1.10 hubertf 91: delay = (d - saveday) * 1440 + (t - savet); /* good for about a
1.6 lukem 92: * month */
93:
1.14 dholland 94: if (delay >= latency) {
1.6 lukem 95: saved = -1;
96: return (FALSE);
1.1 jtc 97: }
98: printf("This adventure was suspended a mere %d minute%s ago.",
1.6 lukem 99: delay, delay == 1 ? "" : "s");
1.14 dholland 100: if (delay <= latency / 3) {
1.6 lukem 101: mspeak(2);
1.1 jtc 102: exit(0);
103: }
104: mspeak(8);
1.6 lukem 105: if (!wizard()) {
106: mspeak(9);
1.1 jtc 107: exit(0);
108: }
109: saved = -1;
1.6 lukem 110: return (FALSE);
1.1 jtc 111: }
112:
1.12 jmc 113: /* not as complex as advent/10 (for now) */
1.13 dholland 114: static int
1.12 jmc 115: wizard(void)
116: {
1.6 lukem 117: char *word, *x;
118: if (!yesm(16, 0, 7))
119: return (FALSE);
1.1 jtc 120: mspeak(17);
1.6 lukem 121: getin(&word, &x);
122: if (!weq(word, magic)) {
123: mspeak(20);
124: return (FALSE);
1.1 jtc 125: }
126: mspeak(19);
1.6 lukem 127: return (TRUE);
1.1 jtc 128: }
129:
1.4 christos 130: void
1.12 jmc 131: ciao(void)
1.6 lukem 132: {
1.15 dholland 133: char fname[80];
134: size_t pos;
1.1 jtc 135:
136: printf("What would you like to call the saved version?\n");
1.9 hubertf 137: /* XXX - should use fgetln to avoid arbitrary limit */
1.16 ! dholland 138: for (pos = 0; pos < sizeof(fname) - 1; pos++) {
1.9 hubertf 139: int ch;
140: ch = getchar();
141: if (ch == '\n' || ch == EOF)
1.6 lukem 142: break;
1.15 dholland 143: fname[pos] = ch;
1.9 hubertf 144: }
1.15 dholland 145: fname[pos] = '\0';
1.6 lukem 146: if (save(fname) != 0)
147: return; /* Save failed */
1.1 jtc 148: printf("To resume, say \"adventure %s\".\n", fname);
1.12 jmc 149: printf("\"With these rooms I might now have been familiarly ");
150: printf("acquainted.\"\n");
1.1 jtc 151: exit(0);
152: }
153:
154:
1.4 christos 155: int
1.12 jmc 156: ran(int range)
1.1 jtc 157: {
1.6 lukem 158: long i;
1.1 jtc 159:
160: i = rand() % range;
1.6 lukem 161: return (i);
1.1 jtc 162: }
CVSweb <webmaster@jp.NetBSD.org>