1 /* @(#)srscan.c 8.1 (Berkeley) 5/31/93 */ 2 /* $NetBSD: srscan.c,v 1.11 2009/08/12 08:54:54 dholland Exp $ */ 3 4 /* 5 * Copyright (c) 1980, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33 #include <stdio.h> 34 #include "trek.h" 35 #include "getpar.h" 36 37 /* 38 ** SHORT RANGE SENSOR SCAN 39 ** 40 ** A short range scan is taken of the current quadrant. If the 41 ** flag 'f' is one, it is an "auto srscan", which is not done 42 ** unless in 'fast' mode. It does a status report and a srscan. 43 ** If 'f' is -1, you get a status report only. If it is zero, 44 ** you get a srscan and an optional status report. The status 45 ** report is taken if you enter "srscan yes"; for all srscans 46 ** thereafter you get a status report with your srscan until 47 ** you type "srscan no". It defaults to on. 48 ** 49 ** The current quadrant is filled in on the computer chart. 50 */ 51 52 static const char *const Color[4] = { 53 "GREEN", 54 "DOCKED", 55 "YELLOW", 56 "RED" 57 }; 58 59 void 60 srscan(int f) 61 { 62 int i, j; 63 int statinfo; 64 const char *s; 65 int percent; 66 struct quad *q = NULL; 67 const struct cvntab *p; 68 69 if (f >= 0 && check_out(SRSCAN)) { 70 return; 71 } 72 if (f) { 73 statinfo = 1; 74 } else { 75 if (!testnl()) 76 Etc.statreport = getynpar("status report"); 77 statinfo = Etc.statreport; 78 } 79 if (f > 0) { 80 Etc.statreport = 1; 81 if (!Etc.fast) 82 return; 83 } 84 if (f >= 0) { 85 printf("\nShort range sensor scan\n"); 86 q = &Quad[Ship.quadx][Ship.quady]; 87 q->scanned = q->klings * 100 + q->bases * 10 + q->stars; 88 printf(" "); 89 for (i = 0; i < NSECTS; i++) { 90 printf("%d ", i); 91 } 92 printf("\n"); 93 } 94 95 for (i = 0; i < NSECTS; i++) { 96 if (f >= 0) { 97 printf("%d ", i); 98 for (j = 0; j < NSECTS; j++) 99 printf("%c ", Sect[i][j]); 100 printf("%d", i); 101 if (statinfo) 102 printf(" "); 103 } 104 if (statinfo) 105 switch (i) { 106 case 0: 107 printf("stardate %.2f", Now.date); 108 break; 109 case 1: 110 printf("condition %s", Color[Ship.cond]); 111 if (Ship.cloaked) 112 printf(", CLOAKED"); 113 break; 114 case 2: 115 printf("position %d,%d/%d,%d", Ship.quadx, 116 Ship.quady, Ship.sectx, Ship.secty); 117 break; 118 case 3: 119 printf("warp factor %.1f", Ship.warp); 120 break; 121 case 4: 122 printf("total energy %d", Ship.energy); 123 break; 124 case 5: 125 printf("torpedoes %d", Ship.torped); 126 break; 127 case 6: 128 s = "down"; 129 if (Ship.shldup) 130 s = "up"; 131 if (damaged(SHIELD)) 132 s = "damaged"; 133 percent = 100.0 * Ship.shield / Param.shield; 134 printf("shields %s, %d%%", s, percent); 135 break; 136 case 7: 137 printf("Klingons left %d", Now.klings); 138 break; 139 case 8: 140 printf("time left %.2f", Now.time); 141 break; 142 case 9: 143 printf("life support "); 144 if (damaged(LIFESUP)) { 145 printf("damaged, reserves = %.2f", 146 Ship.reserves); 147 break; 148 } 149 printf("active"); 150 break; 151 } 152 printf("\n"); 153 } 154 if (f < 0) { 155 printf("current crew %d\n", Ship.crew); 156 printf("brig space %d\n", Ship.brigfree); 157 printf("Klingon power %d\n", Param.klingpwr); 158 p = &Lentab[Game.length - 1]; 159 if (Game.length > 2) 160 p--; 161 printf("Length, Skill %s%s, ", p->abbrev, p->full); 162 p = &Skitab[Game.skill - 1]; 163 printf("%s%s\n", p->abbrev, p->full); 164 return; 165 } 166 printf(" "); 167 for (i = 0; i < NSECTS; i++) 168 printf("%d ", i); 169 printf("\n"); 170 171 if (q->qsystemname & Q_DISTRESSED) 172 printf("Distressed "); 173 if (q->qsystemname) 174 printf("Starsystem %s\n", systemname(q)); 175 } 176