add sanity checks for old file systems
[unix-history] / usr / src / games / trek / shield.c
CommitLineData
9758240b
KM
1/*
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
cc9c0a85 7#ifndef lint
9758240b 8static char sccsid[] = "@(#)shield.c 5.1 (Berkeley) %G%";
cc9c0a85
KM
9#endif not lint
10
11# include "trek.h"
12# include "getpar.h"
13
14/*
15** SHIELD AND CLOAKING DEVICE CONTROL
16**
17** 'f' is one for auto shield up (in case of Condition RED),
18** zero for shield control, and negative one for cloaking
19** device control.
20**
21** Called with an 'up' or 'down' on the same line, it puts
22** the shields/cloak into the specified mode. Otherwise it
23** reports to the user the current mode, and asks if she wishes
24** to change.
25**
26** This is not a free move. Hits that occur as a result of
27** this move appear as though the shields are half up/down,
28** so you get partial hits.
29*/
30
401a08c7 31struct cvntab Udtab[] =
cc9c0a85 32{
401a08c7 33 "u", "p", (int (*)())1, 0,
cc9c0a85
KM
34 "d", "own", 0, 0,
35 0
36};
37
38shield(f)
39int f;
40{
41 register int i;
42 char c;
43 struct cvntab *r;
44 char s[100];
45 char *device, *dev2, *dev3;
46 int ind;
47 char *stat;
48
49 if (f > 0 && (Ship.shldup || damaged(SRSCAN)))
50 return;
51 if (f < 0)
52 {
53 /* cloaking device */
54 if (Ship.ship == QUEENE)
55 return (printf("Ye Faire Queene does not have the cloaking device.\n"));
56 device = "Cloaking device";
57 dev2 = "is";
58 ind = CLOAK;
59 dev3 = "it";
60 stat = &Ship.cloaked;
61 }
62 else
63 {
64 /* shields */
65 device = "Shields";
66 dev2 = "are";
67 dev3 = "them";
68 ind = SHIELD;
69 stat = &Ship.shldup;
70 }
71 if (damaged(ind))
72 {
73 if (f <= 0)
74 out(ind);
75 return;
76 }
77 if (Ship.cond == DOCKED)
78 {
79 printf("%s %s down while docked\n", device, dev2);
80 return;
81 }
82 if (f <= 0 && !testnl())
83 {
84 r = getcodpar("Up or down", Udtab);
401a08c7 85 i = (int) r->value;
cc9c0a85
KM
86 }
87 else
88 {
89 if (*stat)
401a08c7 90 sprintf(s, "%s %s up. Do you want %s down", device, dev2, dev3);
cc9c0a85 91 else
401a08c7 92 sprintf(s, "%s %s down. Do you want %s up", device, dev2, dev3);
cc9c0a85
KM
93 if (!getynpar(s))
94 return;
95 i = !*stat;
96 }
97 if (*stat == i)
98 {
99 printf("%s already ", device);
100 if (i)
101 printf("up\n");
102 else
103 printf("down\n");
104 return;
105 }
106 if (i)
107 if (f >= 0)
401a08c7 108 Ship.energy -= Param.shupengy;
cc9c0a85
KM
109 else
110 Ship.cloakgood = 0;
111 Move.free = 0;
112 if (f >= 0)
113 Move.shldchg = 1;
114 *stat = i;
115 return;
116}