1 CLS:PRINT@134,"John Allen's";:PRINT@214,"$TIMESAVER'";:GOSUB38 2 DIM TR(4),AN(4),S$(5),WX(7),WY(7),LX(7),LY(7),ND(7),RN(7),TX(24),TY$(24),SX(5),SY(5),CR$(12):FOR X=0TO12:READ CR$(X):NEXT 3 DATA L,t,T,f,F,s,S,b,B,r,R,g,G,1,10,1,11,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14 4 DATA 3,8,3,11,4,9,4,10,5,9,6,5,6,6,6,7,6,8,6,9,6,10,6,11 5 FOR X=1TO24:READ A,B:TX(X)=((A-1)*40)+B:NEXT:DATA 2,7,2,9,2,12,4,10,6,8:FOR X=1TO5:READ SX(X),SY(X):NEXT:S1$="o":S2$=":FOR X=1TO5:S$(X)=S1$:NEXT 6 DATA 4,9,2,5,1,11,2,14,6,5,6,6,6,10,6,11 7 Y=1:GOSUB27:Y=1:GOSUB29:FOR Y=0TO7:READ LX(Y),LY(Y):NEXT:TR(2)=LX(0):AN(2)=LY(0):FOR X=1TO24:TY$(X)="-":NEXT:TY$(5)=S1$:TY$(7)=S1$:TY$(10)=S1$:TY$(16)=S1$ 8 TY$(21)=S1$:TY$(1)="/":TY$(13)="\":TY$(14)="/":TY$(17)="/":CLS:PRINT"#=Switch 1/2/3/4/5-straight/diverted":PRINT"C=Coupler":PRINT"U=Uncouple":PRINT"B=Brake control -stop" 9 PRINT"F=Forward -loco faces right":PRINT"R=Reverse -loco faces right":PRINT:INPUT"hit $enter' to continue";A$ 10 CLS:GOSUB26:X=1:GOSUB16:GOSUB33:PRINT@291,"Uncoupled";:PRINT@301,"Stopped";:FOR X=1TO7:Y=((X-1)*40)+29:PRINT@Y,CHR$(X+64);" ";:PRINT CR$(RN(X));:PRINT " ";CHR$(ND(X)+64):NEXT:GOSUB31 11 PRINT@309,"Move#";MV;:GOTO34 12 A$=INKEY$:IF A$=""THEN RETURN 13 IF A$="1"OR A$="2"OR A$="3"OR A$="4"OR A$="5"THEN14ELSE17 14 X=VAL(A$):IF S$(X)=S1$ THEN S$(X)=S2$ ELSE S$(X)=S1$ 15 PRINT@(((SX(X)-1)*40)+SY(X)),S$(X); 16 PRINT@280,S$(X);:IF S$(X)=S1$ THEN PRINT"=Straight";:GOTO32 ELSE PRINT"=Diverted";:GOTO32 17 IF A$="c"OR A$="C"THEN18 ELSE20 18 IF C<2 AND CAR<>0 AND NT<>0THEN C=C+1:PRINT@291,"Coupled ";:GOTO119 ELSE RETURN 19 IF C>0 AND CAR<>0THEN C=C-1:PRINT@291,"Uncoupled";:GOTO122 ELSE RETURN 20 IF A$="b"OR A$="B"THEN21ELSE22 21 IF DIR<>0THEN DIR=0:PRINT@301,"Stopped";:RETURN ELSE RETURN 22 IF A$="f"OR A$="F"THEN23ELSE24 23 IF LD<>1THEN DIR=1:MV=MV+1:PRINT@301,"Forward";:LD=1:RETURN ELSE DIR=1:PRINT@301,"Forward";:LD=1:RETURN 24 IF A$="r"OR A$="R"THEN25ELSE39 25 IF LD<>-1THEN DIR=-1:MV=MV+1:PRINT@301,"Reverse";:LD=-1:RETURN ELSE DIR=-1:PRINT@301,"Reverse";:LD=-1:RETURN 26 FOR X=1TO24:PRINT@TX(X),TY$(X);:NEXT:FOR X=1TO5:PRINT@(((SX(X)-1)*40)+SY(X)),S$(X);:NEXT:GOTO32 27 GOSUB38:Z=INT(RND(1)*11)+2:FOR X=1TO7:IF RN(X)=Z THEN27 ELSE NEXT:RN(Y)=Z:Y=Y+1 28 IF Y>7THEN RETURN ELSE GOTO27 29 GOSUB38:Z=INT(RND(1)*7)+1:FOR X=1TO 7:IF ND(X)=Z THEN29 ELSE NEXT:ND(Y)=Z:Y=Y+1 30 FOR X=7TO1STEP-1:IF ND(X)=0 THEN29 ELSE RETURN 31 FOR X=0TO7:WX(X)=LX(ND(X)):WY(X)=LY(ND(X)):NEXT:RETURN 32 PRINT@43,"A";:PRINT@13,"B";:PRINT@56,"C";:PRINT@203,"D";:PRINT@246,"E";:PRINT@250,"F";:PRINT@213,"G";:RETURN 33 FOR X=0TO7:PRINT@(((LX(X)-1)*40)+LY(X)),CR$(RN(X));:NEXT:RETURN 34 GOSUB12:PRINT@309,"Move#";MV; 35 IF DIR=0THEN34 36 GOTO40 38 A=VAL(RIGHT$(TIME$,2)):FOR X=1TO A:B=RND(1):NEXT:RETURN 39 IF A$="u"OR A$="U"THEN19ELSE RETURN 40 FOR X=1TO2:IF AN(X)=AN(X+1)-1 OR AN(X)=0 OR AN(X+1)=0THEN NEXT ELSE SOUND12000,30:PRINT@280,"You derailed and crashed! ";:GOTO118 41 IF DIR=-1THEN FOR X=1TO3 ELSE FOR X=3TO1STEP-1 42 IF TR(X)=0 AND AN(X)=0 THEN NEXT:GOTO103 43 A=TR(X):B=AN(X):ON A GOTO44,45,46,47,48,49 44 Z7=B-9:ON Z7 GOTO51,56:GOTO34 45 Z7=B-4:ON Z7 GOTO73,54,84,96,87,93,99,90,54,56 46 IF B<9THEN65ELSE62 47 Z7=B-8:ON Z7 GOTO68,81 48 GOTO57 49 Z7=B-4:ON Z7 GOTO73,54,54,75,78,54,56 50 GOTO34 51 IF DIR=1THEN B=B+1:GOTO102 52 IF DIR=-1AND S$(2)=S1$THEN GOSUB21:GOTO34 53 IF DIR=-1AND S$(2)=S2$THEN A=A+1:B=B-1:GOTO102ELSE34 54 IF DIR=1THEN B=B+1:GOTO102 55 IF DIR=-1THEN B=B-1:GOTO102ELSE34 56 IF DIR=-1THEN B=B-1:GOTO102ELSE GOSUB21:GOTO34 57 IF DIR=-1AND S$(5)=S1$ THEN GOSUB21:GOTO34 58 IF DIR=-1AND S$(5)=S2$THEN A=A+1:B=B-1:GOTO102 59 IF DIR=1AND S$(4)=S2$THEN GOSUB21:GOTO34 60 IF DIR=1AND S$(4)=S1$THEN A=A-1:B=B+1:GOTO102ELSE34 62 IF DIR=-1THEN A=A+1:B=B-1:GOTO102 63 IF DIR=1AND S$(3)=S1$THEN GOSUB21:GOTO34 64 IF DIR=1AND S$(3)=S2$THEN A=A-1:B=B+1:GOTO102ELSE34 65 IF DIR=-1AND S$(1)=S1$THEN GOSUB21:GOTO34 66 IF DIR=-1AND S$(1)=S2$THEN A=A-1:B=B-1:GOTO102 67 IF DIR=1THEN A=A+1:B=B+1:GOTO102ELSE34 68 IF DIR=-1THEN A=A-1:B=B-1:GOTO102 71 IF DIR=1AND S$(4)=S1$THEN GOSUB21:GOTO34 72 IF DIR=1AND S$(4)=S2$THEN B=B+1:GOTO102ELSE34 73 IF DIR=-1THEN GOSUB21:GOTO34 74 IF DIR=1THEN B=B+1:GOTO102ELSE34 75 IF DIR=-1THEN B=B-1:GOTO102 76 IF DIR=1AND S$(5)=S1$ THEN B=B+1:GOTO102 77 IF DIR=1AND S$(5)=S2$ THEN A=A-1:B=B+1:GOTO102ELSE34 78 IF DIR=1AND S$(5)=S1$ THEN B=B+1:GOTO102 79 IF DIR=-1AND S$(5)=S2$ THEN GOSUB21:GOTO34 80 IF DIR=-1AND S$(5)=S1$ THEN B=B-1:GOTO102 81 IF DIR=1THEN A=A-1:B=B+1:GOTO102 82 IF DIR=-1AND S$(4)=S1$ THEN A=A+1:B=B-1:GOTO102 83 IF DIR=-1AND S$(4)=S2$ THEN B=B-1:GOTO102ELSE34 84 IF DIR=-1THEN B=B-1:GOTO102 85 IF DIR=1AND S$(1)=S2$ THEN A=A+1:B=B+1:GOTO102 86 IF DIR=1AND S$(1)=S1$ THEN B=B+1:GOTO102ELSE34 87 IF DIR=-1THEN B=B-1:GOTO102 88 IF DIR=1AND S$(2)=S2$ THEN A=A-1:B=B+1:GOTO102 89 IF DIR=1AND S$(2)=S1$ THEN B=B+1:GOTO102ELSE34 90 IF DIR=1THEN B=B+1:GOTO102 91 IF DIR=-1AND S$(3)=S2$ THEN A=A+1:B=B-1:GOTO102 92 IF DIR=-1AND S$(3)=S1$ THEN B=B-1:GOTO102ELSE34 93 IF DIR=1 THEN B=B+1:GOTO102 94 IF DIR=-1AND S$(2)=S2$ THEN GOSUB21:GOTO34 95 IF DIR=-1AND S$(2)=S1$ THEN B=B-1:GOTO102 96 IF DIR=1 THEN B=B+1:GOTO102 97 IF DIR=-1AND S$(1)=S2$ THEN GOSUB21:GOTO34 98 IF DIR=-1AND S$(1)=S1$ THEN B=B-1:GOTO102ELSE34 99 IF DIR=-1THEN B=B-1:GOTO102 100 IF DIR=1AND S$(3)=S2$THEN GOSUB21:GOTO34 101 IF DIR=1AND S$(3)=S1$THEN B=B+1:GOTO102ELSE34 102 GOSUB106:NEXT X:GOSUB111:GOSUB26:GOSUB33:GOTO116 103 GOSUB106:GOSUB111:GOSUB26:GOSUB33:GOTO116 106 FOR A2=1TO7:IF A2=CR OR A2=CF THEN108 107 IF A=LX(A2) AND B=LY(A2) AND A2<>CF AND A2<>CR THEN NT=A2:CAR=LD:GOSUB21:GOTO34 108 NEXT:TR(X)=A:AN(X)=B:RETURN 111 LX(0)=TR(2):LY(0)=AN(2) 112 IF CR<>0THEN X=1 ELSE GOTO114 113 IF TR(X)=0 OR AN(X)=0THEN114 ELSE LX(CR)=TR(X):LY(CR)=AN(X) 114 IF CF<>0THEN X=3 ELSE RETURN 115 IF TR(X)=0 OR AN(X)=0THEN RETURN ELSE LX(CF)=TR(X):LY(CF)=AN(X):RETURN 116 FOR X=0TO7:IF LX(X)=WX(X) AND LY(X)=WY(X) THEN NEXT:GOTO117ELSE34 117 PRINT@280,"You're done in";MV;"moves! "; 118 INPUT"Again";A$:IF A$="N"OR A$="n"OR A$="NO"OR A$="no"THEN MENU ELSE RUN 119 IF CAR=0AND NT=0THEN RETURN 120 IF CAR=1AND CF=0THEN TR(3)=LX(NT):AN(3)=LY(NT):CF=NT:NT=0:RETURN 121 IF CAR=-1AND CR=0THEN TR(1)=LX(NT):AN(1)=LY(NT):CR=NT:NT=0:RETURN ELSE RETURN 122 IF CR=0AND CF=0THEN RETURN 123 IF CR<>0AND CF=0THEN TR(1)=0:AN(1)=0:CR=0:RETURN 124 IF CF<>0AND CR=0THEN TR(3)=0:AN(3)=0:CF=0:RETURN 125 IF CR<>0AND CF<>0THEN PRINT@80,"";:INPUT"F/R";FR$ 126 IF FR$="F"OR FR$="f"THEN127ELSE128 127 TR(3)=0:AN(3)=0:CF=0:RETURN 128 TR(1)=0:AN(1)=0:CR=0:RETURN -END-