Goto elimination.

This commit is contained in:
Eric S. Raymond 2017-06-07 14:26:46 -04:00
parent 14fee6b979
commit 78f606c879

82
init.c
View file

@ -179,40 +179,44 @@ void initialise(void) {
} }
static int finish_init(void) { static int finish_init(void) {
for (I=1; I<=100; I++) { int i;
game.place[I]=0; for (i=1; i<=NOBJECTS; i++) {
game.prop[I]=0; game.place[i]=0;
game.link[I]=0; game.prop[i]=0;
{long x = I+NOBJECTS; game.link[x]=0;} game.link[i]=0;
{long x = i+NOBJECTS; game.link[x]=0;}
} /* end loop */ } /* end loop */
/* 1102 */ for (I=1; I<=LOCSIZ; I++) { for (i=1; i<=LOCSIZ; i++) {
game.abbrev[I]=0; game.abbrev[i]=0;
if(LTEXT[I] == 0 || KEY[I] == 0) goto L1102; if (!(LTEXT[i] == 0 || KEY[i] == 0)) {
K=KEY[I]; K=KEY[i];
if(MOD(labs(TRAVEL[K]),1000) == 1)COND[I]=2; if(MOD(labs(TRAVEL[K]),1000) == 1)COND[i]=2;
L1102: game.atloc[I]=0; }
game.atloc[i]=0;
} /* end loop */ } /* end loop */
/* Set up the game.atloc and game.link arrays as described above. We'll use the DROP /* Set up the game.atloc and game.link arrays as described above.
* subroutine, which prefaces new objects on the lists. Since we want things * We'll use the DROP subroutine, which prefaces new objects on the
* in the other order, we'll run the loop backwards. If the object is in two * lists. Since we want things in the other order, we'll run the
* locs, we drop it twice. This also sets up "game.place" and "fixed" as copies of * loop backwards. If the object is in two locs, we drop it twice.
* "PLAC" and "FIXD". Also, since two-placed objects are typically best * This also sets up "game.place" and "fixed" as copies of "PLAC" and
* "FIXD". Also, since two-placed objects are typically best
* described last, we'll drop them first. */ * described last, we'll drop them first. */
/* 1106 */ for (I=1; I<=NOBJECTS; I++) { for (i=1; i<=NOBJECTS; i++) {
K=NOBJECTS + 1 - I; K=NOBJECTS + 1 - i;
if(FIXD[K] <= 0) goto L1106; if(FIXD[K] > 0) {
DROP(K+NOBJECTS,FIXD[K]); DROP(K+NOBJECTS,FIXD[K]);
DROP(K,PLAC[K]); DROP(K,PLAC[K]);
L1106: /*etc*/ ; }
} /* end loop */ } /* end loop */
for (I=1; I<=NOBJECTS; I++) { for (i=1; i<=NOBJECTS; i++) {
K=NOBJECTS + 1 - I; K=NOBJECTS + 1 - i;
game.fixed[K]=FIXD[K]; game.fixed[K]=FIXD[K];
if(PLAC[K] != 0 && FIXD[K] <= 0)DROP(K,PLAC[K]); if(PLAC[K] != 0 && FIXD[K] <= 0)
DROP(K,PLAC[K]);
} /* end loop */ } /* end loop */
/* Treasures, as noted earlier, are objects MINTRS through MAXTRS /* Treasures, as noted earlier, are objects MINTRS through MAXTRS
@ -221,17 +225,19 @@ L1106: /*etc*/ ;
* when to close the cave. */ * when to close the cave. */
game.tally=0; game.tally=0;
for (I=MINTRS; I<=MAXTRS; I++) { for (i=MINTRS; i<=MAXTRS; i++) {
if(PTEXT[I] != 0)game.prop[I]= -1; if(PTEXT[i] != 0)
game.tally=game.tally-game.prop[I]; game.prop[i]= -1;
game.tally=game.tally-game.prop[i];
} /* end loop */ } /* end loop */
/* Clear the hint stuff. game.hintlc[I] is how long he's been at LOC with cond bit /* Clear the hint stuff. game.hintlc[i] is how long he's been at LOC
* I. game.hinted[I] is true iff hint I has been used. */ * with cond bit i. game.hinted[i] is true iff hint i has been
* used. */
for (I=1; I<=HNTMAX; I++) { for (i=1; i<=HNTMAX; i++) {
game.hinted[I]=false; game.hinted[i]=false;
game.hintlc[I]=0; game.hintlc[i]=0;
} /* end loop */ } /* end loop */
/* Define some handy mnemonics. These correspond to object numbers. */ /* Define some handy mnemonics. These correspond to object numbers. */
@ -330,8 +336,8 @@ L1106: /*etc*/ ;
game.chloc=114; game.chloc=114;
game.chloc2=140; game.chloc2=140;
for (I=1; I<=NDWARVES; I++) { for (i=1; i<=NDWARVES; i++) {
game.dseen[I]=false; game.dseen[i]=false;
} /* end loop */ } /* end loop */
game.dflag=0; game.dflag=0;
game.dloc[1]=19; game.dloc[1]=19;
@ -373,8 +379,8 @@ L1106: /*etc*/ ;
game.knfloc=0; game.knfloc=0;
game.detail=0; game.detail=0;
game.abbnum=5; game.abbnum=5;
for (I=0; I<=4; I++) { for (i=0; i<=4; i++) {
{long x = 2*I+81; if(RTEXT[x] != 0)MAXDIE=I+1;} {long x = 2*i+81; if(RTEXT[x] != 0)MAXDIE=i+1;}
} /* end loop */ } /* end loop */
game.numdie=0; game.numdie=0;
game.holdng=0; game.holdng=0;