125995Smckusick /*
2*60859Sbostic * Copyright (c) 1980, 1993
3*60859Sbostic * The Regents of the University of California. All rights reserved.
434205Sbostic *
542606Sbostic * %sccs.include.redist.c%
625995Smckusick */
725995Smckusick
811699Smckusick #ifndef lint
9*60859Sbostic static char sccsid[] = "@(#)srscan.c 8.1 (Berkeley) 05/31/93";
1034205Sbostic #endif /* not lint */
1111699Smckusick
1211699Smckusick # include "trek.h"
1311699Smckusick # include "getpar.h"
1411699Smckusick
1511699Smckusick /*
1611699Smckusick ** SHORT RANGE SENSOR SCAN
1711699Smckusick **
1811699Smckusick ** A short range scan is taken of the current quadrant. If the
1911699Smckusick ** flag 'f' is one, it is an "auto srscan", which is not done
2011699Smckusick ** unless in 'fast' mode. It does a status report and a srscan.
2111699Smckusick ** If 'f' is -1, you get a status report only. If it is zero,
2211699Smckusick ** you get a srscan and an optional status report. The status
2311699Smckusick ** report is taken if you enter "srscan yes"; for all srscans
2411699Smckusick ** thereafter you get a status report with your srscan until
2511699Smckusick ** you type "srscan no". It defaults to on.
2611699Smckusick **
2711699Smckusick ** The current quadrant is filled in on the computer chart.
2811699Smckusick */
2911699Smckusick
3012738Slayer char *Color[4] =
3111699Smckusick {
3211699Smckusick "GREEN",
3311699Smckusick "DOCKED",
3411699Smckusick "YELLOW",
3511699Smckusick "RED"
3611699Smckusick };
3711699Smckusick
srscan(f)3811699Smckusick srscan(f)
3911699Smckusick int f;
4011699Smckusick {
4111699Smckusick register int i, j;
4211699Smckusick register int statinfo;
4311699Smckusick char *s;
4411699Smckusick int percent;
4511699Smckusick struct quad *q;
4611699Smckusick extern struct cvntab Skitab[];
4711699Smckusick extern struct cvntab Lentab[];
4811699Smckusick struct cvntab *p;
4911699Smckusick
5011699Smckusick if (f >= 0 && check_out(SRSCAN))
5111699Smckusick {
5211699Smckusick return;
5311699Smckusick }
5411699Smckusick if (f)
5511699Smckusick statinfo = 1;
5611699Smckusick else
5711699Smckusick {
5811699Smckusick if (!testnl())
5911699Smckusick Etc.statreport = getynpar("status report");
6011699Smckusick statinfo = Etc.statreport;
6111699Smckusick }
6211699Smckusick if (f > 0)
6311699Smckusick {
6411699Smckusick Etc.statreport = 1;
6511699Smckusick if (!Etc.fast)
6611699Smckusick return;
6711699Smckusick }
6811699Smckusick if (f >= 0)
6911699Smckusick {
7011699Smckusick printf("\nShort range sensor scan\n");
7111699Smckusick q = &Quad[Ship.quadx][Ship.quady];
7211699Smckusick q->scanned = q->klings * 100 + q->bases * 10 + q->stars;
7311699Smckusick printf(" ");
7411699Smckusick for (i = 0; i < NSECTS; i++)
7511699Smckusick {
7611699Smckusick printf("%d ", i);
7711699Smckusick }
7811699Smckusick printf("\n");
7911699Smckusick }
8011699Smckusick
8111699Smckusick for (i = 0; i < NSECTS; i++)
8211699Smckusick {
8311699Smckusick if (f >= 0)
8411699Smckusick {
8511699Smckusick printf("%d ", i);
8611699Smckusick for (j = 0; j < NSECTS; j++)
8711699Smckusick printf("%c ", Sect[i][j]);
8811699Smckusick printf("%d", i);
8911699Smckusick if (statinfo)
9011699Smckusick printf(" ");
9111699Smckusick }
9211699Smckusick if (statinfo)
9311699Smckusick switch (i)
9411699Smckusick {
9511699Smckusick case 0:
9611699Smckusick printf("stardate %.2f", Now.date);
9711699Smckusick break;
9811699Smckusick case 1:
9911699Smckusick printf("condition %s", Color[Ship.cond]);
10011699Smckusick if (Ship.cloaked)
10111699Smckusick printf(", CLOAKED");
10211699Smckusick break;
10311699Smckusick case 2:
10411699Smckusick printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty);
10511699Smckusick break;
10611699Smckusick case 3:
10711699Smckusick printf("warp factor %.1f", Ship.warp);
10811699Smckusick break;
10911699Smckusick case 4:
11011699Smckusick printf("total energy %d", Ship.energy);
11111699Smckusick break;
11211699Smckusick case 5:
11311699Smckusick printf("torpedoes %d", Ship.torped);
11411699Smckusick break;
11511699Smckusick case 6:
11611699Smckusick s = "down";
11711699Smckusick if (Ship.shldup)
11811699Smckusick s = "up";
11911699Smckusick if (damaged(SHIELD))
12011699Smckusick s = "damaged";
12111699Smckusick percent = 100.0 * Ship.shield / Param.shield;
12211699Smckusick printf("shields %s, %d%%", s, percent);
12311699Smckusick break;
12411699Smckusick case 7:
12511699Smckusick printf("Klingons left %d", Now.klings);
12611699Smckusick break;
12711699Smckusick case 8:
12811699Smckusick printf("time left %.2f", Now.time);
12911699Smckusick break;
13011699Smckusick case 9:
13111699Smckusick printf("life support ");
13211699Smckusick if (damaged(LIFESUP))
13311699Smckusick {
13411699Smckusick printf("damaged, reserves = %.2f", Ship.reserves);
13511699Smckusick break;
13611699Smckusick }
13711699Smckusick printf("active");
13811699Smckusick break;
13911699Smckusick }
14011699Smckusick printf("\n");
14111699Smckusick }
14211699Smckusick if (f < 0)
14311699Smckusick {
14411699Smckusick printf("current crew %d\n", Ship.crew);
14511699Smckusick printf("brig space %d\n", Ship.brigfree);
14611699Smckusick printf("Klingon power %d\n", Param.klingpwr);
14711699Smckusick p = &Lentab[Game.length - 1];
14811699Smckusick if (Game.length > 2)
14911699Smckusick p--;
15011699Smckusick printf("Length, Skill %s%s, ", p->abrev, p->full);
15111699Smckusick p = &Skitab[Game.skill - 1];
15211699Smckusick printf("%s%s\n", p->abrev, p->full);
15311699Smckusick return;
15411699Smckusick }
15511699Smckusick printf(" ");
15611699Smckusick for (i = 0; i < NSECTS; i++)
15711699Smckusick printf("%d ", i);
15811699Smckusick printf("\n");
15911699Smckusick
16012738Slayer if (q->qsystemname & Q_DISTRESSED)
16111699Smckusick printf("Distressed ");
16212738Slayer if (q->qsystemname)
16311699Smckusick printf("Starsystem %s\n", systemname(q));
16411699Smckusick }
165