Fix dropped stitch in last commit.
[open-adventure.git] / misc.c
diff --git a/misc.c b/misc.c
index 7dfa74298e79c5264884520329fd7f4e9bc6d43d..cccf182b965d537aab3fd4109093cb982bfb1881 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -215,7 +215,7 @@ L20:        YEAH=false;
 }
 
 
-/*  Line-parsing routines (GETNUM, GETTXT, MAKEWD, PUTTXT, SHFTXT, TYPE0)
+/*  Line-parsing routines (GETTXT, MAKEWD, PUTTXT, SHFTXT, TYPE0)
                */
 /*  The routines on this page handle all the stuff that would normally be
  *  taken care of by format statements.  We do it this way instead so that
@@ -223,78 +223,53 @@ L20:      YEAH=false;
  *  machine dependent i/o stuff is on the following page.  See that page
  *  for a description of MAPCOM's inline array. */
 
-long GETNUM(FILE *source) {
-long DIGIT, NUMBER, SIGN;
-
-/*  Obtain the next integer from an input line.  If K>0, we first read a
- *  new input line from a file; if K<0, we read a line from the keyboard;
- *  if K=0 we use a line that has already been read (and perhaps partially
- *  scanned).  If we're at the end of the line or encounter an illegal
- *  character (not a digit, hyphen, or blank), we return 0. */
-
-
-       if(source != NULL)MAPLIN(source);
-       NUMBER=0;
-L10:   if(LNPOSN > LNLENG)return(NUMBER);
-       if(INLINE[LNPOSN] != 0) goto L20;
-       LNPOSN=LNPOSN+1;
-        goto L10;
-
-L20:   SIGN=1;
-       if(INLINE[LNPOSN] != 9) goto L32;
-       SIGN= -1;
-L30:   LNPOSN=LNPOSN+1;
-L32:   if(LNPOSN > LNLENG || INLINE[LNPOSN] == 0) goto L42;
-       DIGIT=INLINE[LNPOSN]-64;
-       if(DIGIT < 0 || DIGIT > 9) goto L40;
-       NUMBER=NUMBER*10+DIGIT;
-        goto L30;
-
-L40:   NUMBER=0;
-L42:   NUMBER=NUMBER*SIGN;
-       LNPOSN=LNPOSN+1;
-       return(NUMBER);
-}
-
 long GETTXT(long SKIP,long ONEWRD, long UPPER) {
-long CHAR, TEXT, I; static long SPLITTING = -1;
-
 /*  Take characters from an input line and pack them into 30-bit words.
  *  Skip says to skip leading blanks.  ONEWRD says stop if we come to a
  *  blank.  UPPER says to map all letters to uppercase.  If we reach the
  *  end of the line, the word is filled up with blanks (which encode as 0's).
  *  If we're already at end of line when TEXT is called, we return -1. */
 
-       if(LNPOSN != SPLITTING)SPLITTING = -1;
-       TEXT= -1;
-L10:   if(LNPOSN > LNLENG)return(TEXT);
-       if((!SKIP) || INLINE[LNPOSN] != 0) goto L11;
-       LNPOSN=LNPOSN+1;
-        goto L10;
-
-L11:   TEXT=0;
-       /* 15 */ for (I=1; I<=5; I++) {
-       TEXT=TEXT*64;
-       if(LNPOSN > LNLENG || (ONEWRD && INLINE[LNPOSN] == 0)) goto L15;
-       CHAR=INLINE[LNPOSN];
-       if(CHAR >= 63) goto L12;
-       SPLITTING = -1;
-       if(UPPER && CHAR >= 37)CHAR=CHAR-26;
-       TEXT=TEXT+CHAR;
-        goto L14;
-
-L12:   if(SPLITTING == LNPOSN) goto L13;
-       TEXT=TEXT+63;
-       SPLITTING = LNPOSN;
-        goto L15;
-
-L13:   TEXT=TEXT+CHAR-63;
-       SPLITTING = -1;
-L14:   LNPOSN=LNPOSN+1;
-L15:   /*etc*/ ;
-       } /* end loop */
-
-       return(TEXT);
+  long TEXT;
+  static long SPLITTING = -1;
+
+  if(LNPOSN != SPLITTING)
+    SPLITTING = -1;
+  TEXT= -1;
+  while (true) {
+    if(LNPOSN > LNLENG)
+      return(TEXT);
+    if((!SKIP) || INLINE[LNPOSN] != 0)
+      break;
+    LNPOSN=LNPOSN+1;
+  }
+
+  TEXT=0;
+  for (int I=1; I<=5; I++) {
+    TEXT=TEXT*64;
+    if(LNPOSN > LNLENG || (ONEWRD && INLINE[LNPOSN] == 0))
+      continue;
+    char current=INLINE[LNPOSN];
+    if(current < 63) {
+      SPLITTING = -1;
+      if(UPPER && current >= 37)
+        current=current-26;
+      TEXT=TEXT+current;
+      LNPOSN=LNPOSN+1;
+      continue;
+    }
+    if(SPLITTING != LNPOSN) {
+      TEXT=TEXT+63;
+      SPLITTING = LNPOSN;
+      continue;
+    }
+
+    TEXT=TEXT+current-63;
+    SPLITTING = -1;
+    LNPOSN=LNPOSN+1;
+  }
+
+  return(TEXT);
 }
 
 long MAKEWD(long LETTRS) {
@@ -633,7 +608,7 @@ L2: AT=I;
 
 long SETBIT(long bit) {
 /*  Returns 2**bit for use in constructing bit-masks. */
-    2 << bit;
+    return(2 << bit);
 }
 
 bool TSTBIT(long mask, int bit) {