From: Jason S. Ninneman Date: Sat, 3 Jun 2017 17:55:48 +0000 (-0700) Subject: Make GETTXT() a bit closer to actual C. X-Git-Tag: 0.90~21 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=ab46b5261b3069badea188418c4e3254caa2aa43;p=open-adventure.git Make GETTXT() a bit closer to actual C. --- diff --git a/misc.c b/misc.c index 7dfa742..1224bc0 100644 --- a/misc.c +++ b/misc.c @@ -257,44 +257,53 @@ L42: NUMBER=NUMBER*SIGN; } 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 CHAR; + 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=INLINE[LNPOSN]; + if(CHAR < 63) { + SPLITTING = -1; + if(UPPER && CHAR >= 37) + CHAR=CHAR-26; + TEXT=TEXT+CHAR; + LNPOSN=LNPOSN+1; + continue; + } + if(SPLITTING != LNPOSN) { + TEXT=TEXT+63; + SPLITTING = LNPOSN; + continue; + } + + TEXT=TEXT+CHAR-63; + SPLITTING = -1; + LNPOSN=LNPOSN+1; + } + + return(TEXT); } long MAKEWD(long LETTRS) {