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.2 2003/06/17 04:25:25 dillon 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 char *Color[4] = 57 { 58 "GREEN", 59 "DOCKED", 60 "YELLOW", 61 "RED" 62 }; 63 64 srscan(f) 65 int f; 66 { 67 int i, j; 68 int statinfo; 69 char *s; 70 int percent; 71 struct quad *q; 72 extern struct cvntab Skitab[]; 73 extern struct cvntab Lentab[]; 74 struct cvntab *p; 75 76 if (f >= 0 && check_out(SRSCAN)) 77 { 78 return; 79 } 80 if (f) 81 statinfo = 1; 82 else 83 { 84 if (!testnl()) 85 Etc.statreport = getynpar("status report"); 86 statinfo = Etc.statreport; 87 } 88 if (f > 0) 89 { 90 Etc.statreport = 1; 91 if (!Etc.fast) 92 return; 93 } 94 if (f >= 0) 95 { 96 printf("\nShort range sensor scan\n"); 97 q = &Quad[Ship.quadx][Ship.quady]; 98 q->scanned = q->klings * 100 + q->bases * 10 + q->stars; 99 printf(" "); 100 for (i = 0; i < NSECTS; i++) 101 { 102 printf("%d ", i); 103 } 104 printf("\n"); 105 } 106 107 for (i = 0; i < NSECTS; i++) 108 { 109 if (f >= 0) 110 { 111 printf("%d ", i); 112 for (j = 0; j < NSECTS; j++) 113 printf("%c ", Sect[i][j]); 114 printf("%d", i); 115 if (statinfo) 116 printf(" "); 117 } 118 if (statinfo) 119 switch (i) 120 { 121 case 0: 122 printf("stardate %.2f", Now.date); 123 break; 124 case 1: 125 printf("condition %s", Color[Ship.cond]); 126 if (Ship.cloaked) 127 printf(", CLOAKED"); 128 break; 129 case 2: 130 printf("position %d,%d/%d,%d",Ship.quadx, Ship.quady, Ship.sectx, Ship.secty); 131 break; 132 case 3: 133 printf("warp factor %.1f", Ship.warp); 134 break; 135 case 4: 136 printf("total energy %d", Ship.energy); 137 break; 138 case 5: 139 printf("torpedoes %d", Ship.torped); 140 break; 141 case 6: 142 s = "down"; 143 if (Ship.shldup) 144 s = "up"; 145 if (damaged(SHIELD)) 146 s = "damaged"; 147 percent = 100.0 * Ship.shield / Param.shield; 148 printf("shields %s, %d%%", s, percent); 149 break; 150 case 7: 151 printf("Klingons left %d", Now.klings); 152 break; 153 case 8: 154 printf("time left %.2f", Now.time); 155 break; 156 case 9: 157 printf("life support "); 158 if (damaged(LIFESUP)) 159 { 160 printf("damaged, reserves = %.2f", Ship.reserves); 161 break; 162 } 163 printf("active"); 164 break; 165 } 166 printf("\n"); 167 } 168 if (f < 0) 169 { 170 printf("current crew %d\n", Ship.crew); 171 printf("brig space %d\n", Ship.brigfree); 172 printf("Klingon power %d\n", Param.klingpwr); 173 p = &Lentab[Game.length - 1]; 174 if (Game.length > 2) 175 p--; 176 printf("Length, Skill %s%s, ", p->abrev, p->full); 177 p = &Skitab[Game.skill - 1]; 178 printf("%s%s\n", p->abrev, p->full); 179 return; 180 } 181 printf(" "); 182 for (i = 0; i < NSECTS; i++) 183 printf("%d ", i); 184 printf("\n"); 185 186 if (q->qsystemname & Q_DISTRESSED) 187 printf("Distressed "); 188 if (q->qsystemname) 189 printf("Starsystem %s\n", systemname(q)); 190 } 191