1 " "GOTO 10
2 Z=0:REM ----+----+----+----+----+----+----+----+----+----+----+----+----+----+--
3 RETURN 
4 DATA "XL","XH","YL","YH","ZL","ZH","Step %","F(error)"
5 DATA "SQR",&6B,"SIN",&7D,"COS",&7E,"TAN",&7F,"LN",&76,"LOG",&77,"EXP",&78
6 DATA "PI",&5D,"ABS",&70,"ASN",&73,"ACS",&74,"ATN",&75,"INT",&71,"SGN",&79
7 DATA "OR",&51,"AND",&50,"NOT",&6D
10 LOCK :CLEAR :DIM A$(1)*73:WAIT 0:ON ERROR GOTO 500
11 CLS :PAUSE "  3-D CARTESIAN PLOTTER":PAUSE "  Copr. 1982 Tandy Corp."
20 "C":CLS :PRINT "  Fn  Plt Dsp End"
21 Z=ASC INKEY$ -16:IF Z<1OR Z>4THEN 21
22 CLS :GOTO 100*Z
100 M=STATUS 2-STATUS 1+16:INPUT "F(X,Y)=";A$(0):CLS :A$(1)=A$(0)
110 RESTORE 5:IF A$(0)=""POKE M,58,&F1,&AB:GOTO 20
120 Z=ASC A$(0):IF Z<65OR Z>84THEN 160
130 FOR I=1TO 17:READ T$,Z:IF LEFT$ (A$(0),LEN T$)<>T$NEXT I:GOTO 160
140 I=17:NEXT I:POKE M,&F1,Z:M=M+2
150 PRINT T$;:Q=LEN A$(0):R=LEN T$:A$(0)=RIGHT$ (A$(0),Q-R):GOTO 110
160 Z=ASC A$(0):IF Z>32POKE M,Z:M=M+1
170 T$=CHR$ Z:GOTO 150
200 RESTORE 4:FOR I=1TO 8:READ P$:CLS :PRINT P$;" =";@(I);:INPUT "? ";@(I)
201 NEXT I:CLS 
202 IF G>0AND G<101AND G=INT GTHEN 205
203 CLS :INPUT "Redo step: ";G
204 GOTO 202
205 P=1:INPUT "1 or 2 passes? ";P
206 IF P<1OR P>2THEN 205
210 CLS :GRAPH :GLCURSOR (0,-250):SORGN 
211 LINE (0,50)-(120,-10)-(105,-7)-(110,-5):LINE (100,0)-(215,59)-(205,48)-(205,53)
212 LINE (200,50)-(200,150)-(205,135)-(200,140)
213 CSIZE 1:GLCURSOR (205,100):LPRINT "Z":GLCURSOR (150,10):LPRINT "Y":GLCURSOR (50,10):LPRINT "X"
220 FOR I=1TO 100STEP G:X=A+.01*I*(B-A):FOR J=0TO 100STEP G:Y=C+.01*J*(D-C)
221 GOSUB 250:IF JLINE (K,L)-(M,N)
222 K=M:L=N:NEXT J:NEXT I
223 IF P<>2THEN 240
230 FOR I=0TO 100STEP G:Y=C+.01*I*(D-C):FOR J=0TO 100STEP G:X=A+.01*J*(B-A)
231 GOSUB 250:IF JLINE (K,L)-(M,N)
232 K=M:L=N:NEXT J:NEXT I
240 GLCURSOR (0,-30):TEXT :CSIZE 1:LPRINT "F(X,Y)=";A$(1):LF 1:RESTORE 4:FOR I=1TO 8:READ P$:LPRINT P$;" =";@(I)
241 NEXT I:LF 7:GOTO 20
250 GOSUB 2
251 IF Z<ELET Z=E
252 IF Z>FLET Z=F
253 M=100*(X-A)/(B-A)+100*(Y-C)/(D-C)
254 N=50-50*(X-A)/(B-A)+50*(Y-C)/(D-C)+100*(Z-E)/(F-E)
255 RETURN 
300 WAIT :PRINT "F(X,Y)=";A$(1):WAIT 0:GOTO 20
400 UNLOCK :END
500 BEEP 1:Z=H:GOTO 251
999 END
