/* $OpenBSD: srscan.c,v 1.7 2009/10/27 23:59:27 deraadt Exp $ */ /* $NetBSD: srscan.c,v 1.3 1995/04/22 10:59:31 cgd Exp $ */ /* * Copyright (c) 1980, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <stdio.h> #include "trek.h" #include "getpar.h" /* ** SHORT RANGE SENSOR SCAN ** ** A short range scan is taken of the current quadrant. If the ** flag 'f' is one, it is an "auto srscan", which is not done ** unless in 'fast' mode. It does a status report and a srscan. ** If 'f' is -1, you get a status report only. If it is zero, ** you get a srscan and an optional status report. The status ** report is taken if you enter "srscan yes"; for all srscans ** thereafter you get a status report with your srscan until ** you type "srscan no". It defaults to on. ** ** The current quadrant is filled in on the computer chart. */ const char *const Color[4] = { "GREEN", "DOCKED", "YELLOW", "RED" }; void srscan(f) int f; { int i, j; int statinfo; const char *s; int percent; struct quad *q = NULL; const struct cvntab *p; if (f >= 0 && check_out(SRSCAN)) return; if (f) statinfo = 1; else { if (!testnl()) Etc.statreport = getynpar("status report"); statinfo = Etc.statreport; } if (f > 0) Etc.statreport = 1; if (f >= 0) { printf("\nShort range sensor scan\n"); q = &Quad[Ship.quadx][Ship.quady]; q->scanned = q->klings * 100 + q->bases * 10 + q->stars; printf(" "); for (i = 0; i < NSECTS; i++) { printf("%d ", i); } printf("\n"); } for (i = 0; i < NSECTS; i++) { if (f >= 0) { printf("%d ", i); for (j = 0; j < NSECTS; j++) printf("%c ", Sect[i][j]); printf("%d", i); if (statinfo) printf(" "); } if (statinfo) switch (i) { case 0: printf("stardate %.2f", Now.date); break; case 1: printf("condition %s", Color[Ship.cond]); if (Ship.cloaked) printf(", CLOAKED"); break; case 2: printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty); break; case 3: printf("warp factor %.1f", Ship.warp); break; case 4: printf("total energy %d", Ship.energy); break; case 5: printf("torpedoes %d", Ship.torped); break; case 6: s = "down"; if (Ship.shldup) s = "up"; if (damaged(SHIELD)) s = "damaged"; percent = 100.0 * Ship.shield / Param.shield; printf("shields %s, %d%%", s, percent); break; case 7: printf("Klingons left %d", Now.klings); break; case 8: printf("time left %.2f", Now.time); break; case 9: printf("life support "); if (damaged(LIFESUP)) { printf("damaged, reserves = %.2f", Ship.reserves); break; } printf("active"); break; } printf("\n"); } if (f < 0) { printf("current crew %d\n", Ship.crew); printf("brig space %d\n", Ship.brigfree); printf("Klingon power %d\n", Param.klingpwr); p = &Lentab[Game.length - 1]; if (Game.length > 2) p--; printf("Length, Skill %s%s, ", p->abrev, p->full); p = &Skitab[Game.skill - 1]; printf("%s%s\n", p->abrev, p->full); return; } printf(" "); for (i = 0; i < NSECTS; i++) printf("%d ", i); printf("\n"); if (q->qsystemname & Q_DISTRESSED) printf("Distressed "); if (q->qsystemname) printf("Starsystem %s\n", systemname(q)); }