Make RNDVOC() into better C.
authorJason S. Ninneman <jsn@mbar.us>
Mon, 29 May 2017 20:59:06 +0000 (13:59 -0700)
committerJason S. Ninneman <jsn@mbar.us>
Mon, 29 May 2017 20:59:06 +0000 (13:59 -0700)
misc.c

diff --git a/misc.c b/misc.c
index 1e72ba7cb2bc3dc90460f4d0d2bfbb1ba07fdca0..e95439c01e67aaab20c523a31fb5dc31f5cbc96b 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -778,7 +778,7 @@ long randrange(long range)
 
 #undef RNDVOC
 long fRNDVOC(long CHAR, long FORCE) {
-long DIV, I, J, RNDVOC;
+long DIV, J, RNDVOC;
 
 /*  Searches the vocabulary for a word whose second character is char, and
  *  changes that word such that each of the other four characters is a
@@ -787,22 +787,26 @@ long DIV, I, J, RNDVOC;
 
 
        RNDVOC=FORCE;
-       if(RNDVOC != 0) goto L3;
-       for (I=1; I<=5; I++) {
-       J=11+randrange(26);
-       if(I == 2)J=CHAR;
-       RNDVOC=RNDVOC*64+J;
-       } /* end loop */
-L3:    J=10000;
-       DIV=64L*64L*64L;
-       for (I=1; I<=TABSIZ; I++) {
-       J=J+7;
-       if(MOD((ATAB[I]-J*J)/DIV,64L) == CHAR) goto L8;
-       /*etc*/ ;
-       } /* end loop */
-       BUG(5);
 
-L8:    ATAB[I]=RNDVOC+J*J;
+       if (RNDVOC == 0) {
+         for (int I = 1; I <= 5; I++) {
+           J = 11 + randrange(26);
+           if (I == 2)
+             J = CHAR;
+           RNDVOC = RNDVOC * 64 + J;
+         }
+       }
+
+       J = 10000;
+       DIV = 64L * 64L * 64L;
+
+       for (int I = 1; I <= TABSIZ; I++) {
+         J = J + 7;
+         if (MOD((ATAB[I]-J*J)/DIV, 64L) == CHAR)
+           break;
+       }
+
+       ATAB[I] = RNDVOC + J * J;
        return(RNDVOC);
 }