Fix the slightly broken prompt test.
[open-adventure.git] / misc.c
diff --git a/misc.c b/misc.c
index 8f0a2b21680dc11522f1057e02d5d5da501cf442..a08720cbeb20b08cd7414d20eb743343bb3f1d83 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -1,6 +1,8 @@
+#include <unistd.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include "main.h"
+#include "share.h"     /* for SETUP */
 #include "misc.h"
 #include "funcs.h"
 
@@ -171,10 +173,10 @@ void fSETPRM(long FIRST, long P1, long P2) {
 #define WORD1X (*wORD1X)
 #define WORD2 (*wORD2)
 #define WORD2X (*wORD2X)
-void fGETIN(long *wORD1, long *wORD1X, long *wORD2, long *wORD2X) {
+void fGETIN(FILE *input, long *wORD1, long *wORD1X, long *wORD2, long *wORD2X) {
 long JUNK;
 
-/*  Get a command from the adventurer.  snarf out the first word, pad it with
+/*  Get a command from the adventurer.  Snarf out the first word, pad it with
  *  blanks, and return it in WORD1.  Chars 6 thru 10 are returned in WORD1X, in
  *  case we need to print out the whole word in an error message.  Any number of
  *  blanks may follow the word.  If a second word appears, it is returned in
@@ -182,8 +184,8 @@ long JUNK;
 
 
 L10:   if(BLKLIN)TYPE0();
-       MAPLIN(stdin);
-       if(feof(stdin)) score(1);
+       MAPLIN(input);
+       if(input == stdin && feof(stdin)) score(1);
        WORD1=GETTXT(true,true,true,0);
        if(BLKLIN && WORD1 < 0) goto L10;
        WORD1X=GETTXT(false,true,true,0);
@@ -204,9 +206,9 @@ L22:        JUNK=GETTXT(false,true,true,0);
 #undef WORD1X
 #undef WORD2
 #undef WORD2X
-#define GETIN(WORD1,WORD1X,WORD2,WORD2X) fGETIN(&WORD1,&WORD1X,&WORD2,&WORD2X)
+#define GETIN(SRC,WORD1,WORD1X,WORD2,WORD2X) fGETIN(SRC,&WORD1,&WORD1X,&WORD2,&WORD2X)
 #undef YES
-long fYES(long X, long Y, long Z) {
+long fYES(FILE *input, long X, long Y, long Z) {
 
 long YES, REPLY, JUNK1, JUNK2, JUNK3;
 
@@ -214,7 +216,7 @@ long YES, REPLY, JUNK1, JUNK2, JUNK3;
  *  if no, print Z and return false. */
 
 L1:    RSPEAK(X);
-       GETIN(REPLY,JUNK1,JUNK2,JUNK3);
+       GETIN(input, REPLY,JUNK1,JUNK2,JUNK3);
        if(REPLY == MAKEWD(250519) || REPLY == MAKEWD(25)) goto L10;
        if(REPLY == MAKEWD(1415) || REPLY == MAKEWD(14)) goto L20;
        RSPEAK(185);
@@ -884,8 +886,17 @@ long I, VAL;
 
        if(MAP2[1] == 0)MPINIT();
 
+       if (!oldstyle && SETUP)
+           fputs("> ", stdout);
        IGNORE(fgets(INLINE+1,sizeof(INLINE)-1,OPENED));
-       if (!feof(OPENED)) {
+       if (feof(OPENED)) {
+               if (logfp)
+                       fclose(logfp);
+       } else {
+               if (logfp)
+                       IGNORE(fputs(INLINE+1, logfp));
+               else if (!isatty(0))
+                       IGNORE(fputs(INLINE+1, stdout));
                LNLENG=0;
                for (I=1; I<=sizeof(INLINE) && INLINE[I]!=0; I++) {
                VAL=INLINE[I]+1;