date and time created 88/07/22 16:08:01 by bostic
[unix-history] / usr / src / games / trek / srscan.c
CommitLineData
9758240b
KM
1/*
2 * Copyright (c) 1980 Regents of the University of California.
e9fb6bea
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
d99e6414
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
9758240b
KM
16 */
17
3b933421 18#ifndef lint
d99e6414 19static char sccsid[] = "@(#)srscan.c 5.3 (Berkeley) %G%";
e9fb6bea 20#endif /* not lint */
3b933421
KM
21
22# include "trek.h"
23# include "getpar.h"
24
25/*
26** SHORT RANGE SENSOR SCAN
27**
28** A short range scan is taken of the current quadrant. If the
29** flag 'f' is one, it is an "auto srscan", which is not done
30** unless in 'fast' mode. It does a status report and a srscan.
31** If 'f' is -1, you get a status report only. If it is zero,
32** you get a srscan and an optional status report. The status
33** report is taken if you enter "srscan yes"; for all srscans
34** thereafter you get a status report with your srscan until
35** you type "srscan no". It defaults to on.
36**
37** The current quadrant is filled in on the computer chart.
38*/
39
06d69904 40char *Color[4] =
3b933421
KM
41{
42 "GREEN",
43 "DOCKED",
44 "YELLOW",
45 "RED"
46};
47
48srscan(f)
49int f;
50{
51 register int i, j;
52 register int statinfo;
53 char *s;
54 int percent;
55 struct quad *q;
56 extern struct cvntab Skitab[];
57 extern struct cvntab Lentab[];
58 struct cvntab *p;
59
60 if (f >= 0 && check_out(SRSCAN))
61 {
62 return;
63 }
64 if (f)
65 statinfo = 1;
66 else
67 {
68 if (!testnl())
69 Etc.statreport = getynpar("status report");
70 statinfo = Etc.statreport;
71 }
72 if (f > 0)
73 {
74 Etc.statreport = 1;
75 if (!Etc.fast)
76 return;
77 }
78 if (f >= 0)
79 {
80 printf("\nShort range sensor scan\n");
81 q = &Quad[Ship.quadx][Ship.quady];
82 q->scanned = q->klings * 100 + q->bases * 10 + q->stars;
83 printf(" ");
84 for (i = 0; i < NSECTS; i++)
85 {
86 printf("%d ", i);
87 }
88 printf("\n");
89 }
90
91 for (i = 0; i < NSECTS; i++)
92 {
93 if (f >= 0)
94 {
95 printf("%d ", i);
96 for (j = 0; j < NSECTS; j++)
97 printf("%c ", Sect[i][j]);
98 printf("%d", i);
99 if (statinfo)
100 printf(" ");
101 }
102 if (statinfo)
103 switch (i)
104 {
105 case 0:
106 printf("stardate %.2f", Now.date);
107 break;
108 case 1:
109 printf("condition %s", Color[Ship.cond]);
110 if (Ship.cloaked)
111 printf(", CLOAKED");
112 break;
113 case 2:
114 printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty);
115 break;
116 case 3:
117 printf("warp factor %.1f", Ship.warp);
118 break;
119 case 4:
120 printf("total energy %d", Ship.energy);
121 break;
122 case 5:
123 printf("torpedoes %d", Ship.torped);
124 break;
125 case 6:
126 s = "down";
127 if (Ship.shldup)
128 s = "up";
129 if (damaged(SHIELD))
130 s = "damaged";
131 percent = 100.0 * Ship.shield / Param.shield;
132 printf("shields %s, %d%%", s, percent);
133 break;
134 case 7:
135 printf("Klingons left %d", Now.klings);
136 break;
137 case 8:
138 printf("time left %.2f", Now.time);
139 break;
140 case 9:
141 printf("life support ");
142 if (damaged(LIFESUP))
143 {
144 printf("damaged, reserves = %.2f", Ship.reserves);
145 break;
146 }
147 printf("active");
148 break;
149 }
150 printf("\n");
151 }
152 if (f < 0)
153 {
154 printf("current crew %d\n", Ship.crew);
155 printf("brig space %d\n", Ship.brigfree);
156 printf("Klingon power %d\n", Param.klingpwr);
157 p = &Lentab[Game.length - 1];
158 if (Game.length > 2)
159 p--;
160 printf("Length, Skill %s%s, ", p->abrev, p->full);
161 p = &Skitab[Game.skill - 1];
162 printf("%s%s\n", p->abrev, p->full);
163 return;
164 }
165 printf(" ");
166 for (i = 0; i < NSECTS; i++)
167 printf("%d ", i);
168 printf("\n");
169
06d69904 170 if (q->qsystemname & Q_DISTRESSED)
3b933421 171 printf("Distressed ");
06d69904 172 if (q->qsystemname)
3b933421
KM
173 printf("Starsystem %s\n", systemname(q));
174}