must rm before ln
[unix-history] / usr / src / games / trek / srscan.c
CommitLineData
3b933421 1#ifndef lint
06d69904 2static char sccsid[] = "@(#)srscan.c 4.2 (Berkeley) %G%";
3b933421
KM
3#endif not lint
4
5# include "trek.h"
6# include "getpar.h"
7
8/*
9** SHORT RANGE SENSOR SCAN
10**
11** A short range scan is taken of the current quadrant. If the
12** flag 'f' is one, it is an "auto srscan", which is not done
13** unless in 'fast' mode. It does a status report and a srscan.
14** If 'f' is -1, you get a status report only. If it is zero,
15** you get a srscan and an optional status report. The status
16** report is taken if you enter "srscan yes"; for all srscans
17** thereafter you get a status report with your srscan until
18** you type "srscan no". It defaults to on.
19**
20** The current quadrant is filled in on the computer chart.
21*/
22
06d69904 23char *Color[4] =
3b933421
KM
24{
25 "GREEN",
26 "DOCKED",
27 "YELLOW",
28 "RED"
29};
30
31srscan(f)
32int f;
33{
34 register int i, j;
35 register int statinfo;
36 char *s;
37 int percent;
38 struct quad *q;
39 extern struct cvntab Skitab[];
40 extern struct cvntab Lentab[];
41 struct cvntab *p;
42
43 if (f >= 0 && check_out(SRSCAN))
44 {
45 return;
46 }
47 if (f)
48 statinfo = 1;
49 else
50 {
51 if (!testnl())
52 Etc.statreport = getynpar("status report");
53 statinfo = Etc.statreport;
54 }
55 if (f > 0)
56 {
57 Etc.statreport = 1;
58 if (!Etc.fast)
59 return;
60 }
61 if (f >= 0)
62 {
63 printf("\nShort range sensor scan\n");
64 q = &Quad[Ship.quadx][Ship.quady];
65 q->scanned = q->klings * 100 + q->bases * 10 + q->stars;
66 printf(" ");
67 for (i = 0; i < NSECTS; i++)
68 {
69 printf("%d ", i);
70 }
71 printf("\n");
72 }
73
74 for (i = 0; i < NSECTS; i++)
75 {
76 if (f >= 0)
77 {
78 printf("%d ", i);
79 for (j = 0; j < NSECTS; j++)
80 printf("%c ", Sect[i][j]);
81 printf("%d", i);
82 if (statinfo)
83 printf(" ");
84 }
85 if (statinfo)
86 switch (i)
87 {
88 case 0:
89 printf("stardate %.2f", Now.date);
90 break;
91 case 1:
92 printf("condition %s", Color[Ship.cond]);
93 if (Ship.cloaked)
94 printf(", CLOAKED");
95 break;
96 case 2:
97 printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty);
98 break;
99 case 3:
100 printf("warp factor %.1f", Ship.warp);
101 break;
102 case 4:
103 printf("total energy %d", Ship.energy);
104 break;
105 case 5:
106 printf("torpedoes %d", Ship.torped);
107 break;
108 case 6:
109 s = "down";
110 if (Ship.shldup)
111 s = "up";
112 if (damaged(SHIELD))
113 s = "damaged";
114 percent = 100.0 * Ship.shield / Param.shield;
115 printf("shields %s, %d%%", s, percent);
116 break;
117 case 7:
118 printf("Klingons left %d", Now.klings);
119 break;
120 case 8:
121 printf("time left %.2f", Now.time);
122 break;
123 case 9:
124 printf("life support ");
125 if (damaged(LIFESUP))
126 {
127 printf("damaged, reserves = %.2f", Ship.reserves);
128 break;
129 }
130 printf("active");
131 break;
132 }
133 printf("\n");
134 }
135 if (f < 0)
136 {
137 printf("current crew %d\n", Ship.crew);
138 printf("brig space %d\n", Ship.brigfree);
139 printf("Klingon power %d\n", Param.klingpwr);
140 p = &Lentab[Game.length - 1];
141 if (Game.length > 2)
142 p--;
143 printf("Length, Skill %s%s, ", p->abrev, p->full);
144 p = &Skitab[Game.skill - 1];
145 printf("%s%s\n", p->abrev, p->full);
146 return;
147 }
148 printf(" ");
149 for (i = 0; i < NSECTS; i++)
150 printf("%d ", i);
151 printf("\n");
152
06d69904 153 if (q->qsystemname & Q_DISTRESSED)
3b933421 154 printf("Distressed ");
06d69904 155 if (q->qsystemname)
3b933421
KM
156 printf("Starsystem %s\n", systemname(q));
157}