From c079542899cdebd703a1286103a3fce307617e90 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 4 Feb 2005 15:27:17 +0000 Subject: [PATCH] Restored REQUEST. --- io.c | 4 ++-- reports.c | 30 +++++++++++++++++++++++------- sst.c | 7 ++++++- sst.h | 6 ++++++ 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/io.c b/io.c index 07bc150..8841b1a 100644 --- 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"); diff --git a/reports.c b/reports.c index cf5da97..8cbf55e 100644 --- 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 0f8aed6..3352316 100644 --- 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 7e0734b..4c1db0a 100644 --- 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; -- 2.31.1