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". It does a status 46 ** 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 Etc.statreport = 1; 88 if (f >= 0) 89 { 90 printf("\nShort range sensor scan\n"); 91 q = &Quad[Ship.quadx][Ship.quady]; 92 q->scanned = q->klings * 100 + q->bases * 10 + q->stars; 93 printf(" "); 94 for (i = 0; i < NSECTS; i++) 95 { 96 printf("%d ", i); 97 } 98 printf("\n"); 99 } 100 101 for (i = 0; i < NSECTS; i++) 102 { 103 if (f >= 0) 104 { 105 printf("%d ", i); 106 for (j = 0; j < NSECTS; j++) 107 printf("%c ", Sect[i][j]); 108 printf("%d", i); 109 if (statinfo) 110 printf(" "); 111 } 112 if (statinfo) 113 switch (i) 114 { 115 case 0: 116 printf("stardate %.2f", Now.date); 117 break; 118 case 1: 119 printf("condition %s", Color[Ship.cond]); 120 if (Ship.cloaked) 121 printf(", CLOAKED"); 122 break; 123 case 2: 124 printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty); 125 break; 126 case 3: 127 printf("warp factor %.1f", Ship.warp); 128 break; 129 case 4: 130 printf("total energy %d", Ship.energy); 131 break; 132 case 5: 133 printf("torpedoes %d", Ship.torped); 134 break; 135 case 6: 136 s = "down"; 137 if (Ship.shldup) 138 s = "up"; 139 if (damaged(SHIELD)) 140 s = "damaged"; 141 percent = 100.0 * Ship.shield / Param.shield; 142 printf("shields %s, %d%%", s, percent); 143 break; 144 case 7: 145 printf("Klingons left %d", Now.klings); 146 break; 147 case 8: 148 printf("time left %.2f", Now.time); 149 break; 150 case 9: 151 printf("life support "); 152 if (damaged(LIFESUP)) 153 { 154 printf("damaged, reserves = %.2f", Ship.reserves); 155 break; 156 } 157 printf("active"); 158 break; 159 } 160 printf("\n"); 161 } 162 if (f < 0) 163 { 164 printf("current crew %d\n", Ship.crew); 165 printf("brig space %d\n", Ship.brigfree); 166 printf("Klingon power %d\n", Param.klingpwr); 167 p = &Lentab[Game.length - 1]; 168 if (Game.length > 2) 169 p--; 170 printf("Length, Skill %s%s, ", p->abrev, p->full); 171 p = &Skitab[Game.skill - 1]; 172 printf("%s%s\n", p->abrev, p->full); 173 return; 174 } 175 printf(" "); 176 for (i = 0; i < NSECTS; i++) 177 printf("%d ", i); 178 printf("\n"); 179 180 if (q->qsystemname & Q_DISTRESSED) 181 printf("Distressed "); 182 if (q->qsystemname) 183 printf("Starsystem %s\n", systemname(q)); 184 } 185