Dilithium crystal indicator.
[super-star-trek.git] / reports.c
index cf5da97de435434397d02a4f7112bff4d6393eb0..bdb0e9435cd0a5b83727bd277b2fb02437a0fc57 100644 (file)
--- a/reports.c
+++ b/reports.c
@@ -2,8 +2,6 @@
 #include <math.h>
 #include <stdlib.h>
 #include <string.h>
-#include "conio.h"
-#include "sstlinux.h"
 
 void attakreport(int l) {
      if (!l) {
@@ -168,9 +166,9 @@ void chart(int nn) {
        char *cp;
        chew();
        if (stdamtim != 1e30 && stdamtim != game.state.date && condit == IHDOCKED) {
-                c_printf("Spock-  \"I revised the Star Chart from the starbase's records.\"\n\r");
+                proutn("Spock-  \"I revised the Star Chart from the starbase's records.\"\n\r");
        }
-        if (nn == 0) c_printf("       STAR CHART FOR THE KNOWN GALAXY\n\r");
+        if (nn == 0) proutn("       STAR CHART FOR THE KNOWN GALAXY\n\r");
        if (stdamtim != 1e30) {
                if (condit == IHDOCKED) {
                        /* We are docked, so restore chart from base information */
@@ -187,31 +185,14 @@ void chart(int nn) {
 
        prout("      1    2    3    4    5    6    7    8");
        for (i = 1; i <= 8; i++) {
-                c_printf("%d |", i);
+                proutn("%d |", i);
                for (j = 1; j <= 8; j++) {
-                   char buf[4];
-                        c_printf("  ");
+                       char buf[4];
+                        proutn("  ");
                        if (game.starch[i][j] < 0)
                                 strcpy(buf, ".1.");
                        else if (game.starch[i][j] == 0)
                                 strcpy(buf, "...");
-                       else if (game.starch[i][j] > 999)
-                                if ((i==quadx)&&(j==quady)){
-                                   gotoxy(wherex()-1,wherey());
-                                   if (game.starch[i][i]<2000)
-                                      sprintf(buf, "%03d", game.starch[i][j]-1000);
-                                   else 
-                                      strcpy(buf, "***");
-                                }
-                                else
-                                    if (game.starch[i][j]<2000) 
-                                       sprintf(buf, "%03d", game.starch[i][j]-1000);
-                                    else 
-                                       strcpy(buf, "***");
-                        else if ((i==quadx)&&(j==quady)){
-                                gotoxy(wherex()-1,wherey());
-                                sprintf(buf, "%03d", game.state.galaxy[i][j]);
-                        }
                         else if (game.state.galaxy[i][j]>=1000)
                                 strcpy(buf, "***");
                        else
@@ -219,21 +200,23 @@ void chart(int nn) {
                        for (cp = buf; cp < buf + sizeof(buf); cp++)
                            if (*cp == '0')
                                *cp = '.';
-                       c_printf(buf);
+                       proutn(buf);
                }
-                c_printf("  |");
-                if (i<8) c_printf("\n\r");
+                proutn("  |");
+                if (i<8) proutn("\n\r");
        }
        prout("");      /* flush output */
 }
                
                
 int srscan(int l) {
+       static char requests[][3] =
+               {"","da","co","po","ls","wa","en","to","sh","kl","ti"};
         char *cp = NULL;
         int leftside=TRUE, rightside=TRUE, i, j, jj, k=0, nn=FALSE, t, dam=0;
        int goodScan=TRUE;
        switch (l) {
-               case 1: // SRSCAN
+               case SCAN_FULL: // SRSCAN
                        if (game.damage[DSRSENS] != 0) {
                                /* Allow base's sensors if docked */
                                if (condit != IHDOCKED) {
@@ -243,21 +226,35 @@ int srscan(int l) {
                                else
                                         prout("  [Using Base's sensors]");
                        }
-                        else c_printf("     Short-range scan\n\r");
+                        else proutn("     Short-range scan\n\r");
                         if (goodScan) game.starch[quadx][quady] = game.damage[DRADIO]>0.0 ? game.state.galaxy[quadx][quady]+1000:1;
                        scan();
                        if (isit("chart")) nn = TRUE;
-                       rightside = FALSE;
+                       if (isit("no")) rightside = FALSE;
                        chew();
-                        c_printf("    1 2 3 4 5 6 7 8 9 10\n\r");
+                        proutn("    1 2 3 4 5 6 7 8 9 10\n\r");
                        break;
-               case 2: // REQUEST
-                        leftside=FALSE;
-                        break;
-               case 3: // STATUS
+               case SCAN_REQUEST:
+                       while (scan() == IHEOL)
+                               proutn("Information desired? ");
+                       chew();
+                       for (k = 1; k <= 10; k++)
+                               if (strncmp(citem,requests[k],min(2,strlen(citem)))==0)
+                                       break;
+                       if (k > 10) {
+                               prout("UNRECOGNIZED REQUEST. Legal requests are:\n"
+                                        "  date, condition, position, lsupport, warpfactor,\n"
+                                        "  energy, torpedoes, shields, klingons, time.");
+                               return FALSE;
+                       }
+                       // no "break"
+               case SCAN_STATUS: // STATUS
                        chew();
                        leftside = FALSE;
                        skip(1);
+               case SCAN_NO_LEFTSIDE: // REQUEST
+                        leftside=FALSE;
+                        break;
        }
        if (condit != IHDOCKED) newcnd();
        for (i = 1; i <= 10; i++) {
@@ -271,14 +268,16 @@ int srscan(int l) {
                                                 case IHRED: textcolor(RED); break;
                                                 case IHGREEN: textcolor(GREEN); break;
                                                 case IHYELLOW: textcolor(YELLOW); break;
-                                                case IHDOCKED: textcolor(LIGHTGRAY); break;
-                                                case IHDEAD: textcolor(WHITE);
+                                                case IHDOCKED: textcolor(CYAN); break;
+                                                case IHDEAD: textcolor(BROWN);
                                         }
-                                        if (game.quad[i][j]!=ship) highvideo();
+                                        if (game.quad[i][j] != ship) 
+                                           highvideo();
                                    }
-                                   if (game.quad[i][j] & 128) highvideo();
-                                   c_printf("%c ",game.quad[i][j] & 127);
-                                   textcolor(LIGHTGRAY);
+                                   if (game.quad[i][j] & DAMAGED) 
+                                      highvideo();
+                                   proutn("%c ",game.quad[i][j] & ~DAMAGED);
+                                   textcolor(DEFAULT);
                                 }
                                else
                                        proutn("- ");
@@ -322,6 +321,8 @@ int srscan(int l) {
                                        break;
                                case 6:
                                        proutn("Energy        %.2f", energy);
+                                       if (icrystl)
+                                           proutn(" (crystals on board)");
                                        break;
                                case 7:
                                        proutn("Torpedoes     %d", torps);
@@ -345,11 +346,11 @@ int srscan(int l) {
                                        break;
                        }
                }
-               if (i<10) c_printf("\n\r");
+               if (i<10) proutn("\n\r");
                if (k!=0) return(goodScan);
        }
-       if (nn) chart(1);
        prout("");
+       if (nn) chart(1);
         return(goodScan);
 }