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