1 /*- 2 * Copyright (c) 1980, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the University nor the names of its contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * @(#)srscan.c 8.1 (Berkeley) 5/31/93 30 * $FreeBSD: src/games/trek/srscan.c,v 1.4 1999/11/30 03:49:55 billf Exp $ 31 * $DragonFly: src/games/trek/srscan.c,v 1.3 2006/09/07 21:19:44 pavalos Exp $ 32 */ 33 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". It does a status 42 ** 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 const char *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 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 (f >= 0) { 82 printf("\nShort range sensor scan\n"); 83 q = &Quad[Ship.quadx][Ship.quady]; 84 q->scanned = q->klings * 100 + q->bases * 10 + q->stars; 85 printf(" "); 86 for (i = 0; i < NSECTS; i++) { 87 printf("%d ", i); 88 } 89 printf("\n"); 90 } 91 92 for (i = 0; i < NSECTS; i++) { 93 if (f >= 0) { 94 printf("%d ", i); 95 for (j = 0; j < NSECTS; j++) 96 printf("%c ", Sect[i][j]); 97 printf("%d", i); 98 if (statinfo) 99 printf(" "); 100 } 101 if (statinfo) 102 switch (i) { 103 case 0: 104 printf("stardate %.2f", Now.date); 105 break; 106 case 1: 107 printf("condition %s", Color[Ship.cond]); 108 if (Ship.cloaked) 109 printf(", CLOAKED"); 110 break; 111 case 2: 112 printf("position %d,%d/%d,%d", Ship.quadx, 113 Ship.quady, Ship.sectx, Ship.secty); 114 break; 115 case 3: 116 printf("warp factor %.1f", Ship.warp); 117 break; 118 case 4: 119 printf("total energy %d", Ship.energy); 120 break; 121 case 5: 122 printf("torpedoes %d", Ship.torped); 123 break; 124 case 6: 125 s = "down"; 126 if (Ship.shldup) 127 s = "up"; 128 if (damaged(SHIELD)) 129 s = "damaged"; 130 percent = 100.0 * Ship.shield / Param.shield; 131 printf("shields %s, %d%%", s, percent); 132 break; 133 case 7: 134 printf("Klingons left %d", Now.klings); 135 break; 136 case 8: 137 printf("time left %.2f", Now.time); 138 break; 139 case 9: 140 printf("life support "); 141 if (damaged(LIFESUP)) { 142 printf("damaged, reserves = %.2f", Ship.reserves); 143 break; 144 } 145 printf("active"); 146 break; 147 } 148 printf("\n"); 149 } 150 if (f < 0) { 151 printf("current crew %d\n", Ship.crew); 152 printf("brig space %d\n", Ship.brigfree); 153 printf("Klingon power %d\n", Param.klingpwr); 154 p = &Lentab[Game.length - 1]; 155 if (Game.length > 2) 156 p--; 157 printf("Length, Skill %s%s, ", p->abrev, p->full); 158 p = &Skitab[Game.skill - 1]; 159 printf("%s%s\n", p->abrev, p->full); 160 return; 161 } 162 printf(" "); 163 for (i = 0; i < NSECTS; i++) 164 printf("%d ", i); 165 printf("\n"); 166 167 if (q->qsystemname & Q_DISTRESSED) 168 printf("Distressed "); 169 if (q->qsystemname) 170 printf("Starsystem %s\n", systemname(q)); 171 } 172