Restored REQUEST.
authorEric S. Raymond <esr@thyrsus.com>
Fri, 4 Feb 2005 15:27:17 +0000 (15:27 +0000)
committerEric S. Raymond <esr@thyrsus.com>
Fri, 4 Feb 2005 15:27:17 +0000 (15:27 +0000)
io.c
reports.c
sst.c
sst.h

diff --git a/io.c b/io.c
index 07bc1504a8b599f15968eebff8cc49c4c08e7f69..8841b1aa33c86171bdc418485d8d19890038457b 100644 (file)
--- a/io.c
+++ b/io.c
@@ -350,11 +350,11 @@ void drawmaps(short l) {
      if (l!=2) setwnd(LEFTUPPER_WINDOW);
      gotoxy(1,1);
      enqueue("s");
-     srscan(1);
+     srscan(SCAN_FULL);
      if (l!=2){
         setwnd(SRSCAN_WINDOW);
         clrscr();
-        srscan(2);
+        srscan(SCAN_NO_LEFTSIDE);
         setwnd(LRSCAN_WINDOW);
         clrscr();
         enqueue("l");
index cf5da97de435434397d02a4f7112bff4d6393eb0..8cbf55eb6a1da6138f81538ef7b195a5a8e87476 100644 (file)
--- a/reports.c
+++ b/reports.c
@@ -229,11 +229,13 @@ void chart(int nn) {
                
                
 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) {
@@ -247,17 +249,31 @@ int srscan(int l) {
                         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");
                        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++) {
@@ -348,8 +364,8 @@ int srscan(int l) {
                if (i<10) c_printf("\n\r");
                if (k!=0) return(goodScan);
        }
-       if (nn) chart(1);
        prout("");
+       if (nn) chart(1);
         return(goodScan);
 }
                        
diff --git a/sst.c b/sst.c
index 0f8aed65523ed7d25e1ce48ce5af7c18f8578eed..3352316c823ef74ba3a55aeae740ace684c78af2 100644 (file)
--- a/sst.c
+++ b/sst.c
@@ -172,6 +172,8 @@ commands[] = {
        {"QUIT",        QUIT},
 #define HELP   34
        {"HELP",        HELP},
+#define REQUEST        35
+       {"REQUEST",     REQUEST},
 };
 
 #define NUMCOMMANDS    sizeof(commands)/sizeof(commands[0])
@@ -307,7 +309,7 @@ static void makemoves(void) {
                commandhook(commands[i].name, TRUE);
                switch (i) { /* command switch */
                         case SRSCAN:                 // srscan
-                               srscan(SRSCAN);
+                               srscan(SCAN_FULL);
                                break;
                        case LRSCAN:                    // lrscan
                                lrscan();
@@ -381,6 +383,9 @@ static void makemoves(void) {
                        case REPORT:                    // Game Report 
                                report();
                                break;
+                       case REQUEST:                   // status request 
+                               srscan(SCAN_REQUEST);
+                               break;
                        case COMPUTER:                  // use COMPUTER!
                                eta();
                                break;
diff --git a/sst.h b/sst.h
index 7e0734b824338f36efc6e259bd8990e9789b7f7c..4c1db0ad833e12a85da95c7604a9e3105880cad4 100644 (file)
--- a/sst.h
+++ b/sst.h
@@ -447,6 +447,12 @@ void c_printf (char *format, ... );
 void makechart(void);
 void enqueue(char *s);
 
+/* mode arguments for srscan() */
+#define SCAN_FULL              1
+#define SCAN_REQUEST           2
+#define SCAN_STATUS            3
+#define SCAN_NO_LEFTSIDE       4
+
 typedef struct {
         int wndleft,wndtop,wndright,wndbottom;
 } wnd;