Fix a bug in close(). When a descriptor is closed, all process leaders
[dragonfly.git] / games / battlestar / room.c
blob4947b2b28f70284f3c0e1ee6af8940bb20ee04d9
1 /*
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
33 * @(#)room.c 8.1 (Berkeley) 5/31/93
34 * $FreeBSD: src/games/battlestar/room.c,v 1.7.2.2 2001/03/05 11:45:36 kris Exp $
35 * $DragonFly: src/games/battlestar/room.c,v 1.2 2003/06/17 04:25:23 dillon Exp $
38 #include "externs.h"
40 void
41 writedes()
43 int compass;
44 const char *p;
45 unsigned int c;
47 printf("\n\t%s\n", location[position].name);
48 if (beenthere[position] < 3) {
49 compass = NORTH;
50 for ((p = location[position].desc); (c = *p++);)
51 if (c != '-' && c != '*' && c != '+')
52 putchar((int)c);
53 else {
54 if (c != '*')
55 printf("%s", truedirec(compass, c));
56 compass++;
61 void
62 printobjs()
64 unsigned int *p = location[position].objects;
65 int n;
67 printf("\n");
68 for (n = 0; n < NUMOFOBJECTS; n++)
69 if (testbit(p, n) && objdes[n])
70 puts(objdes[n]);
73 void
74 whichway(here)
75 struct room here;
77 switch(direction) {
79 case NORTH:
80 left = here.west;
81 right = here.east;
82 ahead = here.north;
83 back = here.south;
84 break;
86 case SOUTH:
87 left = here.east;
88 right = here.west;
89 ahead = here.south;
90 back = here.north;
91 break;
93 case EAST:
94 left = here.north;
95 right = here.south;
96 ahead = here.east;
97 back = here.west;
98 break;
100 case WEST:
101 left = here.south;
102 right = here.north;
103 ahead = here.west;
104 back = here.east;
105 break;
110 const char *
111 truedirec(way, option)
112 int way;
113 unsigned int option;
115 switch(way) {
117 case NORTH:
118 switch(direction) {
119 case NORTH:
120 return("ahead");
121 case SOUTH:
122 return(option == '+' ? "behind you" : "back");
123 case EAST:
124 return("left");
125 case WEST:
126 return("right");
129 case SOUTH:
130 switch(direction) {
131 case NORTH:
132 return(option == '+' ? "behind you" : "back");
133 case SOUTH:
134 return("ahead");
135 case EAST:
136 return("right");
137 case WEST:
138 return("left");
141 case EAST:
142 switch(direction) {
143 case NORTH:
144 return("right");
145 case SOUTH:
146 return("left");
147 case EAST:
148 return("ahead");
149 case WEST:
150 return(option == '+' ? "behind you" : "back");
153 case WEST:
154 switch(direction) {
155 case NORTH:
156 return("left");
157 case SOUTH:
158 return("right");
159 case EAST:
160 return(option == '+' ? "behind you" : "back");
161 case WEST:
162 return("ahead");
165 default:
166 printf("Error: room %d. More than four directions wanted.", position);
167 return("!!");
171 void
172 newway(thisway)
173 int thisway;
175 switch(direction){
177 case NORTH:
178 switch(thisway){
179 case LEFT:
180 direction = WEST;
181 break;
182 case RIGHT:
183 direction = EAST;
184 break;
185 case BACK:
186 direction = SOUTH;
187 break;
189 break;
190 case SOUTH:
191 switch(thisway){
192 case LEFT:
193 direction = EAST;
194 break;
195 case RIGHT:
196 direction = WEST;
197 break;
198 case BACK:
199 direction = NORTH;
200 break;
202 break;
203 case EAST:
204 switch(thisway){
205 case LEFT:
206 direction = NORTH;
207 break;
208 case RIGHT:
209 direction = SOUTH;
210 break;
211 case BACK:
212 direction = WEST;
213 break;
215 break;
216 case WEST:
217 switch(thisway){
218 case LEFT:
219 direction = SOUTH;
220 break;
221 case RIGHT:
222 direction = NORTH;
223 break;
224 case BACK:
225 direction = EAST;
226 break;
228 break;