]> git.cameronkatri.com Git - bsdgames-darwin.git/blob - adventure/wizard.c
WARNSify, KNFify
[bsdgames-darwin.git] / adventure / wizard.c
1 /* $NetBSD: wizard.c,v 1.5 1997/10/10 12:00:02 lukem Exp $ */
2
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.
20 * 3. All advertising materials mentioning features or use of this software
21 * must display the following acknowledgement:
22 * This product includes software developed by the University of
23 * California, Berkeley and its contributors.
24 * 4. Neither the name of the University nor the names of its contributors
25 * may be used to endorse or promote products derived from this software
26 * without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 */
40
41 #include <sys/cdefs.h>
42 #ifndef lint
43 #if 0
44 static char sccsid[] = "@(#)wizard.c 8.1 (Berkeley) 6/2/93";
45 #else
46 __RCSID("$NetBSD: wizard.c,v 1.5 1997/10/10 12:00:02 lukem Exp $");
47 #endif
48 #endif /* not lint */
49
50 /* Re-coding of advent in C: privileged operations */
51
52 #include <stdio.h>
53 #include <string.h>
54 #include <stdlib.h>
55 #include <time.h>
56 #include "hdr.h"
57 #include "extern.h"
58
59 void
60 datime(d,t)
61 int *d,*t;
62 { time_t tvec;
63 struct tm *tptr;
64
65 time(&tvec);
66 tptr=localtime(&tvec);
67 /* day since 1977 (mod leap) */
68 *d=tptr->tm_yday +365*(tptr->tm_year-77);
69 /* bug: this will overflow in the year 2066 AD */
70 /* it will be attributed to Wm the C's millenial celebration */
71 /* and minutes since midnite */
72 *t=tptr->tm_hour*60+tptr->tm_min;
73 } /* pretty painless */
74
75
76 char magic[6];
77
78 void
79 poof()
80 {
81 strcpy(magic, DECR('d','w','a','r','f'));
82 latncy = 45;
83 }
84
85 int
86 Start(n)
87 { int d,t,delay;
88
89 datime(&d,&t);
90 delay=(d-saved)*1440+(t-savet); /* good for about a month */
91
92 if (delay >= latncy)
93 { saved = -1;
94 return(FALSE);
95 }
96 printf("This adventure was suspended a mere %d minute%s ago.",
97 delay, delay == 1? "" : "s");
98 if (delay <= latncy/3)
99 { mspeak(2);
100 exit(0);
101 }
102 mspeak(8);
103 if (!wizard())
104 { mspeak(9);
105 exit(0);
106 }
107 saved = -1;
108 return(FALSE);
109 }
110
111 int
112 wizard() /* not as complex as advent/10 (for now) */
113 { char *word,*x;
114 if (!yesm(16,0,7)) return(FALSE);
115 mspeak(17);
116 getin(&word,&x);
117 if (!weq(word,magic))
118 { mspeak(20);
119 return(FALSE);
120 }
121 mspeak(19);
122 return(TRUE);
123 }
124
125 void
126 ciao(cmdfile)
127 char *cmdfile;
128 { char *c;
129 char fname[80];
130
131 printf("What would you like to call the saved version?\n");
132 for (c=fname;; c++)
133 if ((*c=getchar())=='\n') break;
134 *c=0;
135 if (save(fname) != 0) return; /* Save failed */
136 printf("To resume, say \"adventure %s\".\n", fname);
137 printf("\"With these rooms I might now have been familiarly acquainted.\"\n");
138 exit(0);
139 }
140
141
142 int
143 ran(range)
144 int range;
145 {
146 long i;
147
148 i = rand() % range;
149 return(i);
150 }