5 ms·
That column of GOTOs in EMPIRE.FOR. That is the stuff of nightmares. EDIT- Terrifying: 251 GOTO (21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37) I-20
by wycy 8y ago
That column of GOTOs in EMPIRE.FOR. That is the stuff of nightmares.
EDIT- Terrifying:
251 GOTO (21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37) I-20
- walshemj 8y agoShockingly Bad use of line numbers. the convention I used was taught was always 4 digits always increasing going down the pages. 7000 and 8000 range where for input and output FORMAT statements, 6000 was used to label code 6999 was always the exit
- wahern 8y agoIf you look at the code, they seem to follow a similar convention. But the computed GOTO described above is using a set of labels employed for what looks like an inner state machine, related to a previous inner state machine (thus the offset by 20). It seems perfectly reasonable (preferable, even) to use an entirely different domain of numeric labels, distinguished by length, for those parts of the code.
- WalterBright 8y ago> Shockingly Bad <hangs head in shame>
- wahern 8y agoIt's basically a switch statement, but without the benefit of descriptive case identifiers. So it's basically, switch (I-20) { case 21: case 22: ... } but you have to imagine "21" as the string identifier, not the integer value. `I-20` is indexing the list of labels in the GOTO statement. The earlier column beginning with GOTO (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) I is easier to read switch (I) { case 1: ... case 2: ... } because the integer value of I, the string labels, and their index in the list are all the same. I've never written Fortran. I did learn to program using TI-85 BASIC, though, and am well versed in C. The GOTO in the Fortran code is possibly the easiest part for me to understand.