While not as dramatic an example, I dug up a couple of small programs from my earliest programming days in 1994. The TI-81 was my first programmable device (no PC until 1997!). There was:
Code:
Prgm6:NUMGUESS
# Apparently this was just a two-player only version, though I'm sure I had made ones where the calculator generated the number
:0→I
:ClrHome
:Disp "LETS PLAY NUMBER GUESS!" # No apostrophe char on the 81, and ending quotes are required unlike 83+/84+
:Lbl 1
:0→H # H isn't even used anywhere in the program. Go figure.
:Disp "ENTER A NUMBER FOR ANOTHER PERSON TO GUESS."
:Input N
:ClrHome
:Disp "NOW GIVE THIS TO THE GUESSER."
:Pause
:Disp "HOW MANY CHANCES DO YOU WANT?"
:Input C
:Lbl 2
:Disp "WHAT DO YOU THINK THE ANSWER IS?"
:I+1→I
:Input T
:If T<N
:Goto 4 # 81 also doesn't have If…Then, just If
:If T>N
:Goto 5
:If T=N
:Goto 6
:Lbl 5
:If I≤C
:Goto 9 # Mmm, spaghetti code
:Disp "TOO HIGH."
:Goto 2
:Lbl 4
:If I≤C
:Goto 9 # Redundant spaghetti code, even
:Disp "TOO LOW."
:Goto 2
:Lbl 6
:Disp "THIS ANSWER IS CORRECT. GOOD JOB!"
:Pause
:Lbl 0
:0→I
:Disp "PLAY AGAIN?"
:Disp "1-YES"
:Disp "2-NO"
:Input θ
:If θ=1
:Goto 1
:End
:Lbl 9
:Disp "THAT WAS JUST YOUR LAST CHANCE"
:Disp "THE NUMBER WAS"
:Disp N
:Pause
:Goto 0
which could be optimized to:
Code:
:Disp "NUMBER GUESS! ENTER A NUMBER FOR ANOTHER"
:Disp "PERSON TO GUESS." # One byte shorter than five more spaces
:Input N # The 81 was primitive. Input has no custom input messages, must use Disp as above.
:ClrHome
:Disp "NOW GIVE THIS TOTHE GUESSER."
:Pause
:Disp "HOW MANY"
:Disp "CHANCES?" # Can't provide multiple arguments to 81's Disp, so we have to do it this way
:Input C
:Lbl G
:Disp "YOUR GUESS?"
:Input T
:If T<N
:Disp "TOO LOW" # At least this isn't TI-99/4A BASIC, where you *have* to use Goto with If!
:If T>N
:Disp "TOO HIGH"
:If T=N
:Goto W
:DS<(C,1 # No looping commands! It's either Goto or IS>/DS<
:Goto G
:Goto L
:Lbl W
:Disp "RIGHT. GOOD JOB!"
:End
:Lbl L
:Disp "NO MORE CHANCES!THE NUMBER WAS"
:Disp N
Or a somewhat Rube Goldberg-esque “8-Ball” type program, which looked like this:
Code:
:Disp "ASK A YES/NO QUESTION AND PRESS ENTER."
:Pause
:IPart (Rand*100)→R
:If R≥80
:Goto 1
:If R≥60
:Goto 2
:If R≥40
:Goto 3
:If R≥20
:Goto 4
:If R<20 # This line is superfluous :-)
:Goto 5
:Lbl 1
:Disp "ASK AGAIN LATER"
:End # End on the 81 was the equivalent to Return on the later models. That was its only purpose, since there were no looping or block commands
:Lbl 2
:Disp "YES, OF COURSE."
:End
:Lbl 3
:Disp "MY REPLY IS NO."
:End
:Lbl 4
:Disp "IT IS CERTAIN."
:End
:Lbl 5
:Disp "DONT COUNT ON IT"
No idea why I did all that when I could have just:
Code:
:IPart (5Rand→R
:If R=0
:Disp "ASK AGAIN LATER"
:If R=1
:Disp "YES, OF COURSE"
:If R=2
:Disp "MY REPLY IS NO"
:If R=3
:Disp "IT IS CERTAIN"
:If R=4
:Disp "DONT COUNT ON IT"