4  DIM F$[3],O$[19]
5  PRINT "INSTRUCTIONS";
6  INPUT F$
7  IF F$="NO" THEN 80
10  GOTO 6000
70  STOP 
80  X=N=1
85  MAT N=CON[10]
90  GOSUB 100
99  GOTO 2000
100  GOTO 850
501  RETURN 
800  PRINT "ENTER INPUT PARAMETER(S):"
802  IF O8=1 THEN 820
804  FOR I=1 TO O8
806  PRINT "N(";I;")=";
808  INPUT N[I]
810  NEXT I
812  GOTO 824
820  PRINT "N=";
822  INPUT N
824  RETURN 
850  PRINT "PLACE YOUR FUNCTION EXPRESSED AS Y=F(X) ON LINES"
860  PRINT "100 TO 500 AND THEN RUN AGAIN."
870  STOP 
900  PRINT "INPUT NEW PARAMETER VALUES:"
910  IF O8=1 THEN 965
920  PRINT "WHICH ONE? ENTER 1 TO";O8;
930  INPUT I
935  PRINT "N(";I;")=";
940  INPUT N[I]
945  PRINT "MORE";
950  INPUT F$
955  IF F$="YES" THEN 920
960  GOTO 990
965  PRINT "N=";
970  INPUT N
990  RETURN 
2000  PRINT "X MIN ";
2002  INPUT L0
2004  PRINT "X MAX ";
2006  INPUT L1
2008  PRINT "DELTA X";
2010  INPUT I0
2102  O1=O2=0
2104  O9=1
2110  PRINT "FORMAT:A=AUTOMATIC SCALING,B=INPUT GRAPH LIMITS";
2112  INPUT F$
2114  IF F$="A" THEN 2116
2115  O1=1
2116  PRINT "DO YOU HAVE PARAMETERS TO INPUT";
2118  INPUT F$
2120  IF F$="NO" THEN 2200
2122  O2=1
2125  PRINT "HOW MANY";
2130  INPUT O8
2200  IF O1=0 THEN 2220
2201  PRINT "ENTER VALUES FOR EDGES OF GRAPH:"
2202  PRINT "LEFT";
2204  INPUT C1
2206  PRINT "RIGHT";
2208  INPUT C2
2210  PRINT "BOTTOM";
2212  INPUT C3
2214  PRINT "TOP";
2216  INPUT C4
2218  GOTO 2300
2220  PRINT "GRID SIZE IN MAJOR DIVISIONS"
2222  PRINT "WIDTH";
2224  INPUT C5
2226  PRINT "HEIGHT";
2228  INPUT C6
2300  PRINT "AXES";
2302  INPUT F$
2304  O3=0
2306  IF F$="NO" THEN 2900
2308  O3=1
2900  IF O2=0 THEN 3000
2912  GOSUB 800
3000  IF O1=1 THEN 3910
3010  X=L0
3012  GOSUB 100
3014  L2=L3=Y
3020  X=X+I0
3022  IF X<L1 THEN 3026
3024  X=L1
3026  GOSUB 100
3030  IF L2<Y THEN 3034
3032  L2=Y
3034  IF L3>Y THEN 3038
3036  L3=Y
3038  IF X<L1 THEN 3020
3040  IF L2#L3 THEN 3100
3042  L2=10*(INT(L2/10)-.1)
3044  L3=10*(INT(L3/10)+.1)
3100  U1=10^INT(.434294*LOG(ABS(L1-L0)/C5))
3102  U2=(L1-L0)/(C5*U1)
3110  IF U2 <= 5 THEN 3120
3112  U2=10
3114  GOTO 3140
3120  IF U2 <= 2 THEN 3130
3122  U2=5
3124  GOTO 3140
3130  IF U2>1 THEN 3138
3132  U2=10
3134  U1=U1/10
3136  GOTO 3140
3138  U2=2
3140  U2=U2*U1
3142  IF L1>0 THEN 3152
3144  C2=-U2*INT(-L1/U2)
3146  C1=C2-U2*C5
3148  IF C1 <= L0 THEN 3200
3150  GOTO 3160
3152  C1=U2*INT(L0/U2)
3154  C2=U2*C5+C1
3156  IF C2 >= L1 THEN 3200
3160  U2=U2/U1
3162  IF U2<10 THEN 3170
3164  U2=2
3166  U1=U1*10
3168  GOTO 3140
3170  IF U2<5 THEN 3176
3172  U2=10
3174  GOTO 3140
3176  U2=5
3178  GOTO 3140
3200  U1=10^INT(.434294*LOG(ABS(L3-L2)/C6))
3202  U2=(L3-L2)/(C6*U1)
3210  IF U2 <= 5 THEN 3220
3212  U2=10
3214  GOTO 3240
3220  IF U2 <= 2 THEN 3230
3222  U2=5
3224  GOTO 3240
3230  IF U2>1 THEN 3238
3232  U2=10
3234  U1=U1/10
3236  GOTO 3240
3238  U2=2
3240  U2=U2*U1
3242  IF L3>0 THEN 3252
3244  C4=-U2*INT(-L3/U2)
3246  C3=C4-U2*C6
3248  IF C3 <= L2 THEN 3910
3250  GOTO 3260
3252  C3=U2*INT(L2/U2)
3254  C4=U2*C6+C3
3256  IF C4 >= L3 THEN 3910
3260  U2=U2/U1
3262  IF U2<10 THEN 3270
3264  U2=2
3266  U1=U1*10
3268  GOTO 3240
3270  IF U2<5 THEN 3276
3272  U2=10
3274  GOTO 3240
3276  U2=5
3278  GOTO 3240
3910  Z1=9999/(C2-C1)
3912  Z2=-Z1*C1
3914  Z3=9999/(C4-C3)
3916  Z4=-Z3*C3
3924  T1=INT(Z2)
3926  T3=0
4000  PRINT 
4002  PRINT 
4004  PRINT "SCALING"
4006  IF SGN(C1)*SGN(C2)>0 THEN 4010
4008  IF SGN(C3)*SGN(C4) <= 0 THEN 4080
4010  C5=10^INT(.434294*LOG(ABS(C2-C1)))
4012  IF C5/ABS(C2-C1)<.5 THEN 4020
4014  C5=C5/2
4020  C6=10^INT(.434294*LOG(ABS(C4-C3)))
4022  IF C6/ABS(C4-C3)<.5 THEN 4026
4024  C6=C6/2
4026  C7=SGN(C1)*C5*INT(ABS(C1)/C5)
4028  IF C7 >= C1 THEN 4032
4030  C7=C7+C5
4032  C8=SGN(C3)*C6*INT(ABS(C3)/C6)
4034  IF C8 >= C3 THEN 4040
4036  C8=C8+C6
4040  L2=L3=-.5
4044  IF C2>0 THEN 4048
4046  L2=.5
4048  IF C4>0 THEN 4200
4050  L3=.5
4052  GOTO 4200
4080  T1=INT(Z2)
4082  T3=0
4090  PRINT "X AXIS FROM  ";C1;"TO  ";C2
4092  PRINT "Y AXIS FROM  ";C3;"TO  ";C4
4094  O9=1
4096  IF O3=0 THEN 5000
4098  L1=L1+C2-C1
4100  T0=2
4102  X=0
4104  Y=C3
4106  GOSUB 8000
4108  T0=1
4110  Y=C4
4112  GOSUB 8000
4114  Y=C3
4116  GOSUB 8000
4120  Y=T1=0
4122  T3=INT(Z4)
4124  T0=2
4126  X=C1
4130  GOSUB 8000
4134  T0=1
4136  X=C2
4138  GOSUB 8000
4140  L1=L1-C2+C1
4142  X=C1
4144  GOSUB 8000
4150  GOTO 5000
4200  PRINT "X TICS FROM ";C7;"TO";C5*INT(C2/C5);"(";C5;"BETWEEN TICS)"
4202  PRINT "Y TICS FROM ";C8;"TO";C6*INT(C4/C6);"(";C6;"BETWEEN TICS)"
4204  O9=1
4206  IF O3=0 THEN 5000
4208  L1=L1+C2-C1
4210  T1=(L2+.5)*9999
4212  T3=INT(Z3*C8+Z4)
4214  X=(L2+.5)*C2-(L2-.5)*C1
4216  Y=C8
4218  T0=2
4220  GOSUB 8000
4222  X=X-100*L2/Z1
4224  T0=1
4226  GOSUB 8000
4228  C8=C8+C6
4230  IF C8 <= C4 THEN 4210
4240  T1=INT(Z1*C7+Z2)
4242  T3=(L3+.5)*9999
4244  X=C7
4246  Y=(L3+.5)*C4-(L3-.5)*C3
4248  T0=2
4250  GOSUB 8000
4252  Y=Y-100*L3/Z3
4254  T0=1
4256  GOSUB 8000
4258  C7=C7+C5
4260  IF C7 <= C2 THEN 4240
4270  L1=L1-C2+C1
5000  X=L0
5002  GOSUB 100
5004  T1=INT(Z1*L0+Z2)
5006  T3=INT(Z3*Y+Z4)
5008  IF T1 >= 0 THEN 5012
5010  T1=0
5012  IF T1 <= 9999 THEN 5016
5014  T1=9999
5016  IF T3 >= 0 THEN 5020
5018  T3=0
5020  IF T3 <= 9999 THEN 5090
5022  T3=9999
5090  T0=2
5092  GOSUB 8000
5094  T0=1
5100  X=X+I0
5102  GOSUB 100
5104  GOSUB 8000
5106  IF T5<0 THEN 9000
5108  GOTO 5100
5958  Y=C3
6000  PRINT "ENTER YOUR FUNCTION EXPRESSED AS Y=F(X) BEGINNING"
6002  PRINT "ON LINE 100.  FOR EXAMPLE:"
6004  PRINT 
6006  PRINT "100 Y=X^3"
6008  PRINT 
6010  PRINT "YOU WILL THEN BE ASKED QUESTIONS ABOUT THE WAY YOU"
6012  PRINT "WISH THE PLOT TO BE PRESENTED:"
6014  PRINT 
6016  PRINT "1. X MIN AND X MAX: INPUT THE SMALLEST AND LARGEST"
6018  PRINT "VALUES FOR X YOU WISH PLOTTED."
6020  PRINT 
6022  PRINT "2. DELTA X: INPUT THE INCREMENT OF X BETWEEN CALCULATED"
6024  PRINT "DATA POINTS.  USUALLY A VALUE 1/100 THE DIFFERENCE"
6026  PRINT "BETWEEN X MAX AND X MIN IS SUFFICIENT."
6028  PRINT " "
6030  PRINT "3. FORMAT: ASKS WHETHER YOU WISH AUTOMATIC SCALING OR"
6032  PRINT "A FIXED SCALE OF YOUR CHOICE.  IF THE FIXED SCALE IS"
6034  PRINT "CHOSEN YOU WILL BE ASKED FOR THE VALUES OF X AND Y"
6036  PRINT "AT THE EDGES OF THE GRAPH."
6038  PRINT 
6040  PRINT "4. PARAMETERS: ANSWER YES OR NO, WHETHER YOU HAVE"
6042  PRINT "A PARAMETER OTHER THAN X YOU WISH TO INPUT DURING"
6044  PRINT "PROGRAM EXECUTION (MORE ON THIS LATER.)"
6046  PRINT 
6048  PRINT "5. AXES: ANSWER YES OR NO,WHETHER YOU WISH AXES DRAWN"
6050  PRINT "ON THE GRAPH.  TIC MARKS WILL BE DRAWN IF AN AXIS IS"
6052  PRINT "OFF SCALE."
6054  PRINT 
6056  PRINT "YOU MAY INCLUDE OTHER PARAMETERS TO INPUT, FOR EXAMPLE:"
6058  PRINT 
6060  PRINT "100 Y=X^N"
6062  PRINT 
6064  PRINT "THE VARIABLE N MUST BE USED, AND THE COMPUTER WILL"
6066  PRINT "ASK N=?  IN THE PROGRAM.  IF MORE THAN ONE PARAMETER"
6068  PRINT "IS NEEDED, LABEL THEM N(1) UP TO N(10).  EXAMPLE:"
6070  PRINT 
6072  PRINT "100 Y=N(1)*X^2+N(2)*X+N(3)"
6074  PRINT 
6076  PRINT "IS AN EXPRESSION USABLE FOR ANY QUADRATIC EQUATION."
6078  PRINT 
6080  PRINT 
6088  PRINT "NOW ENTER YOUR FUNCTION, FOLLOWED BY 'RUN'."
6090  STOP 
8000  IF X<L1 THEN 8020
8010  X=L1
8012  GOSUB 100
8014  T5=-1
8016  GOTO 8030
8020  T5=1
8030  T2=INT(Z1*X+Z2)
8032  T4=INT(Z3*Y+Z4)
8100  IF T2<0 THEN 8110
8102  IF T2>9999 THEN 8130
8104  IF T4<0 THEN 8150
8106  IF T4>9999 THEN 8170
8108  GOTO 8200
8110  IF T1>0 THEN 8120
8112  T2=0
8114  T0=-ABS(T0)
8116  GOTO 8104
8120  T4=INT(-T1*(T4-T3)/(T2-T1)+T3)
8122  T2=0
8124  GOTO 8104
8130  IF T1<9999 THEN 8140
8132  T2=9999
8134  T0=-ABS(T0)
8136  GOTO 8104
8140  T4=INT((9999-T1)*(T4-T3)/(T2-T1)+T3)
8142  T2=9999
8144  GOTO 8104
8150  IF T3>0 THEN 8160
8152  T4=0
8154  T0=-ABS(T0)
8156  GOTO 8200
8160  T2=INT(-T3*(T2-T1)/(T4-T3)+T1)
8162  T4=0
8164  GOTO 8200
8170  IF T3<9999 THEN 8180
8172  T4=9999
8174  T0=-ABS(T0)
8176  GOTO 8200
8180  T2=INT((9999-T3)*(T2-T1)/(T4-T3)+T1)
8182  T4=9999
8200  IF ABS(T4-T3)>ABS(T2-T1) THEN 8230
8210  IF ABS(T2-T1)<3000 THEN 8800
8212  T5=T5*(INT(ABS(T2-T1)/3000)+1)
8214  T1=(T2-T1)/ABS(T5)
8216  T3=(T4-T3)/ABS(T5)
8218  T2=T2-T1*(ABS(T5)-1)
8220  T4=T4-T3*(ABS(T5)-1)
8222  GOTO 8800
8230  IF ABS(T4-T3)<3000 THEN 8800
8232  T5=T5*(INT(ABS(T4-T3)/3000)+1)
8234  T1=(T2-T1)/ABS(T5)
8236  T3=(T4-T3)/ABS(T5)
8238  T2=T2-T1*(ABS(T5)-1)
8240  T4=T4-T3*(ABS(T5)-1)
8800  IF T0>0 THEN 8814
8802  T0=-T0
8804  IF O9=1 THEN 8900
8806  PRINT "      PLTT"
8808  PRINT "OFF SCALE"
8810  O9=1
8812  GOTO 8900
8814  IF O9=0 THEN 8850
8816  PRINT "PLTL"
8818  O9=0
8850  O$="         0123456789"
8852  Z[1]=T2
8854  Z[2]=T4
8856  FOR O0=1 TO 4
8858  Z[3]=INT(Z[1]/10^(4-O0))
8860  Z[4]=INT(Z[2]/10^(4-O0))
8862  O$[O0,O0]=O$[Z[3]+10,Z[3]+10]
8864  O$[O0+5,O0+5]=O$[Z[4]+10,Z[4]+10]
8866  Z[1]=Z[1]-Z[3]*10^(4-O0)
8868  Z[2]=Z[2]-Z[4]*10^(4-O0)
8870  NEXT O0
8872  IF T0<2 THEN 8878
8874  PRINT O$[1,9];"^"
8876  GOTO 8900
8878  PRINT O$[1,9]
8900  IF ABS(T5)<2 THEN 8922
8910  T2=T2+T1
8912  T4=T4+T3
8914  T5=T5-SGN(T5)
8916  GOTO 8800
8922  T1=INT(T2+.5)
8924  T3=INT(T4+.5)
8926  RETURN 
9000  IF O2=0 THEN 9900
9002  O3=0
9004  PRINT "      PLTT"
9010  PRINT "ANOTHER GRAPH ON SAME SCALE";
9012  INPUT F$
9014  IF F$="NO" THEN 9990
9018  GOSUB 900
9030  O9=1
9032  GOTO 5000
9900  PRINT "      PLTT"
9990  END 
