Slashdot Mirror


Crowther's Original Adventure Source Code Found

drxenos writes "I don't know how many of you are fans of old-school text adventures (interactive fiction), but Will Crowther's original Fortran source code has been located in a backup of Don Woods's old student account. For fans like me, this is like finding the Holy Grail."

2 of 309 comments (clear)

  1. Re:I must not be old enough by Mr.+Slippery · · Score: 5, Informative

    what the fuck does rock-climbing have to do with "ethics"?

    The same thing leaving a campsite better than you found it has to do with ethics, or not littering has to do with ethics. Altering the environment and depriving others of potential experiences is an ethical issue.

    A quick Googling will reveal that "climbing ethics" is not an invention of the Wikipedia author, but is an active area of discussion among climbers.

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  2. Re:A good example of how coding has progressed by russotto · · Score: 4, Informative
    The code you're quoting isn't grossly messy because of the GOTO statements. It's grossly messy because PDP-10 Fortran didn't have a CHARACTER type -- instead, you could pack 5 characters to a 36-bit integer, with the low-bit unused. The M2 array contained integer masks with one bit set, the low bit of one of the characters. Multiplying that mask by octal 177 got you a mask which selected a single character, except for the first character where the multiplication would overflow. The octal constant 201004020100 is 5 space characters. The "S" flag indicated whether a space had been found yet.


    So the little snippet you posted goes to label 3 if the current character (selected by J for the integer and K for the character within the integer) is a space, and to 2 if no space has been found yet, and continues without branching if a space has been found but the current character is not a space.


    If A were, more sensibly, a character array, the above would be written as

                    IF(A(J:J).EQ.' ')GOTO 3
                    IF(S.EQ.0) GOTO 2

    which is no problem to read at all, despite the gotos.