5  COM A[100],C[100]
7  COM X1,X9,Y1,Y9,H5,V5
10  COM E,P9,D2,D1,P1,P8,P3,Q7,Q8,Z$[60],D8,D9,H$[4]
20  COM X2,Y2,V1,V9,H1,H9,D3,Q9
30  COM E9,P0,S9,A9,F[2],X3,Y3
31  COM A$[1],D7
32  COM D4,Q1
33  COM S$[6]
35  DIM I$[12],C$[10],B$[15],E$[1],T$[1]
38  DIM V$[56],Q$[15]
39  V$=" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,+-?=/*$><#()%^'  "
40  FILES $HPCHAR
45  DIM N[15],W[15]
50  GOTO P0 OF 3615,4080,4170,3830
61  DEF FNL()=LOG()/LOG(10)
100  END 
2454  GOTO 3560
2955  PRINT "5000 5000 PLTT"
2960  T=0
2965  F1=0
2970  F3=0
2975  F4=0
2980  T1=A[1]
2985  T2=C[1]
2990  IF X2=0 THEN 3010
2995  H1=FNL(H1)
3000  H9=FNL(H9)
3005  T1=FNL(T1)
3010  IF Y2=0 THEN 3030
3015  V1=FNL(V1)
3020  V9=FNL(V9)
3025  T2=FNL(T2)
3030  H5=(-1)*H1+H9
3035  V5=(-1)*V1+V9
3040  T1=(-1)*H1+T1
3045  T2=(-1)*V1+T2
3050  G1=9999*T1/H5
3055  G2=9999*T2/V5
3060  PRINT "     ";H$
3070  FOR I=1 TO E
3071  K1=J1=I
3075  J5=J6=1
3080  T1=A[I]
3085  T2=C[I]
3090  IF T1>X9 THEN 3365
3095  IF T1<X1 THEN 3365
3100  IF T2>Y9 THEN 3365
3105  IF T2<Y1 THEN 3365
3110  H2=T1
3115  V2=T2
3120  IF X2=0 THEN 3130
3125  H2=FNL(H2)
3130  IF Y2=0 THEN 3140
3135  V2=FNL(V2)
3140  H2=H2-H1
3145  V2=V2-V1
3150  H=9999*H2/H5
3155  V=9999*V2/V5
3160  IF INT(H)>9999 THEN 3185
3165  IF INT(H)<0 THEN 3185
3170  IF INT(V)>9999 THEN 3185
3175  IF INT(V)<0 THEN 3185
3180  GOTO 3200
3185  PRINT "OFF SCALE"
3190  F4=F4+1
3195  GOTO 3370
3200  F3=F3+1
3205  IF T=0 THEN 3336
3210  IF H$="PLTL" THEN 3240
3215  IF H$="PLTP" THEN 3336
3220  J9=6000
3230  GOTO 3245
3240  J9=3000
3245  H6=H-G1
3250  V6=V-G2
3255  IF ABS(H6)>J9 THEN 3270
3260  IF ABS(V6)>J9 THEN 3270
3265  GOTO 3336
3270  F2=2
3275  H7=H6/F2
3280  V7=V6/F2
3285  IF ABS(H7)>J9 THEN 3300
3290  IF ABS(V7)>J9 THEN 3300
3295  GOTO 3310
3300  F2=F2+1
3305  GOTO 3275
3310  L2=F2-1
3315  FOR J2=1 TO L2
3320  G1=G1+H7
3325  G2=G2+V7
3326  P2=G1
3327  GOSUB 6000
3328  C$=B$
3329  P2=G2
3330  GOSUB 6000
3331  PRINT C$;" ";B$
3335  NEXT J2
3336  P2=H
3337  GOSUB 6000
3338  C$=B$
3339  P2=V
3340  GOSUB 6000
3341  PRINT C$;" ";B$
3345  T=1
3350  G1=H
3355  G2=V
3360  GOTO 3390
3365  PRINT "OUTSIDE RANGE"
3370  F1=F1+1
3375  T=0
3380  G1=((-1)*H1+T1)*9999/H5
3385  G2=((-1)*V1+T2)*9999/V5
3390  IF A$="S" THEN 3405
3395  IF A$="B" THEN 3490
3400  GOTO 3570
3405  IF I=1 THEN 3430
3410  IF I=E THEN 3475
3415  GOTO J5 OF 3420,3570
3420  T1=A[J1+1]
3425  GOTO 3560
3430  GOTO J5 OF 3435,3465,3420,3570
3435  IF Y2=0 THEN 3450
3440  IF A$="B" THEN 3443
3441  T2=10^C[I]
3442  GOTO 3560
3443  T2=10^V1
3444  GOTO 3560
3450  IF A$="B" THEN 3453
3451  T2=C[I]
3452  GOTO 3560
3453  T2=V1
3460  GOTO 3560
3465  T2=C[K1]
3470  GOTO 3560
3475  GOTO J5 OF 3480,3435,3570
3480  T1=2*A[J1]-A[J1-1]
3485  GOTO 3560
3490  IF I=1 THEN 3535
3495  IF I=E THEN 3550
3500  GOTO J5 OF 3505,3435,3515,3525,3570
3505  T1=A[J1]+.25*(A[J1+1]-A[J1])
3510  GOTO 3560
3515  T1=A[J1]+.75*(A[J1+1]-A[J1])
3520  GOTO 3560
3525  T2=C[K1+1]
3530  GOTO 3560
3535  GOTO J5 OF 3540,3435,3465,3505,3435,3515,3525,3570
3540  T1=A[J1]-.25*(A[J1+1]-A[J1])
3545  GOTO 3560
3550  GOTO J5 OF 3555,3435,3570
3555  T1=A[J1]+.25*(A[J1]-A[J1-1])
3560  J5=J5+1
3565  GOTO 3110
3570  NEXT I
3575  PRINT "5000 5000 PLTT"
3580  PRINT F3;"POINTS PLOTTED ";F1;"POINTS NOT PLOTTED"
3585  F5=F1-F4
3590  PRINT F4;"POINTS OFF SCALE";F5;"POINTS OUTSIDE RANGE"
3595  PRINT 
3600  CHAIN "$PLTFIL"
3610  INPUT Z$
3615  IF Z$="N" THEN 4240
3620  IF Z$=" " THEN 4240
3625  IF Z$="" THEN 4240
3630  PRINT "ENTER X COORDINATE WHERE FIRST CHARACTER OF LABEL IS TO APPEAR"
3635  INPUT Q$
3640  L3=LEN(Q$)
3645  FOR I=1 TO L3
3650  E$=Q$[I,I]
3655  IF E$="/" THEN 3695
3660  IF E$='92 THEN 3695
3665  IF E$="," THEN 3695
3670  NEXT I
3672  B$=" "
3675  B$=Q$
3676  GOSUB 5100
3677  N9=B2
3680  PRINT "ENTER Y COORDINATE WHERE FIRST CHARACTER OF THE LABEL IS TO APPEAR"
3685  INPUT W9
3690  GOTO 3725
3695  P=I-1
3700  B$=Q$[1,P]
3705  GOSUB 5100
3706  N9=B2
3710  P=P+2
3715  B$=Q$[P,L3]
3717  GOSUB 5100
3720  W9=B2
3725  IF X2=0 THEN 3735
3730  N9=FNL(N9)
3735  IF Y2=0 THEN 3745
3740  W9=FNL(W9)
3745  L3=LEN(Z$)
3750  T1=(-1)*H1+N9
3755  T2=(-1)*V1+W9
3760  N9=T1/H5
3762  W9=T2/V5
3765  Q9=D1/100*S9
3767  IF A9=90 THEN 3780
3770  IF (N9+L3*Q9) >= H9 THEN 3790
3772  GOTO 3805
3780  Q9=D2/100*S9
3785  IF (W9+L3*Q9)<V9 THEN 3805
3790  PRINT "LABEL TOO LONG. MAKE SHORTER AND RE-ENTER"
3795  GOTO 3610
3800  A9=0
3805  W9=W9*D4
3810  N9=N9*D3
3815  GOSUB 4305
3820  PRINT "5000 5000 PLTT"
3825  GOTO 4240
3830  PRINT "5000 5000 PLTT"
3835  Q1=1
3845  IF D7 <> 0 THEN 3860
3850  D3=D4=10
3855  GOTO 3867
3860  D3=D8
3865  D4=D9
3867  IF F[1]=1 THEN 2955
3870  IF Y3=1 THEN 3960
3875  Q9=D4/100*S9
3880  A9=90
3883  P2=V1
3885  GOSUB 7000
3887  Z$=B$
3890  W9=.1+Q9
3895  IF Y3=2 THEN 3910
3900  N9=0+Q9
3905  GOTO 3915
3910  N9=D3-Q9
3915  GOSUB 4305
3917  P2=V9
3920  GOSUB 7000
3923  Z$=B$
3925  L3=LEN(Z$)
3930  W9=D4-(L3+1)*Q9
3935  IF Y3=2 THEN 3950
3940  N9=0+Q9
3945  GOTO 3955
3950  N9=D3-Q9
3955  GOSUB 4305
3960  IF X3=1 THEN 2955
3965  Q9=D3/100*S9
3970  A9=0
3973  P2=H1
3975  GOSUB 7000
3978  Z$=B$
3980  N9=0+1.1*Q9
3985  IF X3 <> 2 THEN 4000
3990  W9=D4-Q9
3995  GOTO 4005
4000  W9=0+2/3*Q9
4005  GOSUB 4305
4008  P2=H9
4010  GOSUB 7000
4013  Z$=B$
4015  L3=LEN(Z$)
4020  N9=D3-(L3+1.1)*Q9
4025  IF X3 <> 2 THEN 4040
4030  W9=D4-Q9
4035  GOTO 4045
4040  W9=0+2/3*Q9
4045  GOSUB 4305
4050  GOTO 2955
4060  PRINT "5000 5000 PLTT"
4065  A9=0
4070  PRINT "ENTER X-AXIS LABEL"
4075  INPUT Z$
4080  IF Z$#"N" THEN 4083
4082  CHAIN "$PLTFIL"
4083  A9=0
4085  IF Z$#" " THEN 4095
4090  CHAIN "$PLTFIL"
4095  L3=LEN(Z$)
4100  N9=(D3/2)-(L3/2*Q9)
4105  IF N9>0 THEN 4120
4110  PRINT "LABEL TOO LONG. MAKE SHORTER AND RE-ENTER"
4115  GOTO 4075
4120  IF X3=2 THEN 4135
4125  W9=0+5/6*Q9
4130  GOTO 4140
4135  W9=D4-4/3*Q9
4140  GOSUB 4305
4150  PRINT "5000 5000 PLTT"
4153  CHAIN "$PLTFIL"
4155  A9=90
4160  PRINT "ENTER Y-AXIS LABEL"
4165  INPUT Z$
4170  IF Z$#"N" THEN 4175
4173  CHAIN "$PLTFIL"
4175  IF Z$#" " THEN 4177
4176  CHAIN "$PLTFIL"
4177  A9=90
4180  L3=LEN(Z$)
4185  Q9=D4/100*S9
4190  W9=(D4/2)-(L3/2*Q9)
4195  IF W9>0 THEN 4210
4200  PRINT "LABEL TOO LONG. MAKE SHORTER AND RE-ENTER"
4205  GOTO 4165
4210  IF Y3=2 THEN 4225
4215  N9=0+2*Q9
4220  GOTO 4230
4225  N9=D3-2*Q9
4230  GOSUB 4305
4235  A9=0
4240  CHAIN "$PLTFIL"
4270  PRINT "PLTL"
4275  PRINT "9999 9999 PLTT"
4280  PRINT "DONE"
4285  STOP 
4290  RESTORE 
4295  CHAIN "$PLTFIL"
4305  F9=1
4310  F8=3.14159
4315  U1=0
4320  T9=A9*F8/180
4325  N7=N8=N9*9999/D4
4330  W7=W8=W9*9999/D4
4335  FOR I=1 TO LEN(Z$)
4340  U1=1
4345  N6=W6=0
4347  T$[1,1]=Z$[I,I]
4350  GOSUB 5000
4355  IF J2=0 THEN 4570
4360  IF J2 <> 1 THEN 4370
4365  GOTO 4500
4370  READ #1,J2;J7
4375  FOR J5=1 TO J7
4395  READ #1;N[J5],W[J5]
4425  NEXT J5
4430  FOR U9=1 TO J7
4435  IF N[U9]>-1 THEN 4450
4440  U1=1
4445  GOTO 4495
4450  N6=N7+N[U9]*Q7
4455  W6=W7+W[U9]*Q8
4460  IF A9=0 THEN 4475
4465  GOSUB 4585
4470  GOTO 4485
4475  N5=N6*D4/D3
4480  W5=W6
4485  GOSUB 4620
4490  U1=0
4495  NEXT U9
4500  N7=N7+100*Q7
4505  NEXT I
4510  GOTO 4725
4515  N7=N8
4520  W7=W8=W8-100*Q8
4525  IF A9=0 THEN 4560
4530  N6=N7
4535  W6=W7
4540  W8=W7+100*S9
4545  GOSUB 4585
4550  N8=N7=N5*D3/D4
4555  W8=W7=W5
4560  GOTO 4505
4565  PRINT "     PLTT"
4570  PRINT "CHARACTER '";Z$[I,I];"' NOT IN TABLE"
4575  F9=1
4580  GOTO 4500
4585  H6=SQR((N6-N8)^2+(W6-W8)^2)
4590  T8=F8/2*SGN(W6-W8)
4595  IF N6=N8 THEN 4605
4600  T8=ATN((W6-W8)/(N6-N8))
4605  N5=(N8+H6*COS(T8+T9))*D4/D3
4610  W5=W8+H6*SIN(T8+T9)
4615  RETURN 
4620  IF (N5 MAX W5)>9999 THEN 4700
4625  IF (N5 MIN W5)<0 THEN 4700
4630  IF F9=0 THEN 4645
4635  F9=0
4640  PRINT "     PLTL"
4645  IF U1=0 THEN 4680
4650  N5=INT(N5)
4655  W5=INT(W5)
4656  P2=N5
4657  GOSUB 6000
4658  C$=B$
4659  P2=W5
4660  GOSUB 6000
4665  PRINT C$;" ";B$;"^"
4670  U1=0
4675  GOTO 4695
4680  N5=INT(N5)
4685  W5=INT(W5)
4686  P2=N5
4687  GOSUB 6000
4688  C$=B$
4689  P2=W5
4690  GOSUB 6000
4691  PRINT C$;" ";B$
4695  RETURN 
4700  PRINT "     PLTT"
4705  F9=1
4710  PRINT " OFF SCALE"
4715  CHAIN "$PLTFIL"
4720  STOP 
4725  PRINT "5000 5000 PLTT"
4730  RETURN 
5000  FOR I1=1 TO LEN(V$)
5010  IF V$[I1,I1]=T$[1,1] THEN 5050
5020  NEXT I1
5030  J2=0
5040  RETURN 
5050  J2=I1
5060  RETURN 
5100  I$=" 0123456789."
5110  B8=1
5120  B2=0
5130  FOR I=1 TO LEN(B$)
5135  FOR I1=1 TO LEN(I$)
5140  IF B$[I,I]=I$[I1,I1] THEN 5180
5150  NEXT I1
5151  IF B$[I,I] <> "-" THEN 5160
5152  B8=-1
5153  GOTO 5210
5160  PRINT "ERROR ON INPUT-NONNUMERIC CHARACTER AFTER="
5167  CHAIN "$PLTFIL"
5180  IF I1=1 THEN 5210
5190  IF I1=12 THEN 5230
5200  B2=B2*10+I1-2
5210  NEXT I
5215  B2=B2*B8
5220  RETURN 
5230  I2=I
5240  I$=" 0123456789"
5250  FOR I=I2+1 TO LEN(B$)
5260  FOR I1=1 TO LEN(I$)
5270  IF B$[I,I]=I$[I1,I1] THEN 5310
5280  NEXT I1
5290  PRINT "ERROR ON INPUT-NONNUMERIC CHARACTER AFTER="
5292  CHAIN "$PLTFIL"
5310  IF I1=1 THEN 5330
5320  B2=B2+(I1-1)*10^(-(I-I2))
5330  NEXT I
5340  RETURN 
6000  I$="0123456789"
6005  B$="0000"
6007  FOR J=1 TO 4
6010  P5=INT(P2/10^(4-J))
6020  P2=P2-P5*10^(4-J)
6050  FOR J4=0 TO 9
6060  IF P5=J4 THEN 6080
6070  NEXT J4
6080  B$[J,J]=I$[J4+1,J4+1]
6090  NEXT J
6100  RETURN 
7000  E1=0
7001  C$="     "
7002  P6=SGN(P2)
7004  IF P2=0 THEN 7400
7005  IF ABS(P2) >= 10 THEN 7135
7010  IF ABS(P2)<1 THEN 7155
7020  IF E1>2 THEN 7170
7030  IF E1<-1 THEN 7170
7040  P4=2-E1
7050  P2=ABS(P2*100)+.05
7060  GOSUB 6000
7065  C$=B$
7070  IF P6=-1 THEN 7100
7080  C$[1,1]=" "
7090  GOTO 7102
7100  C$[1,1]="-"
7102  B$[1,1]=C$[1,1]
7105  IF P4=0 THEN 7130
7110  FOR J=4 TO 5-P4 STEP -1
7115  C$[J+1,J+1]=B$[J,J]
7120  NEXT J
7122  J=J+1
7125  C$[J,J]="."
7127  B$=C$
7130  RETURN 
7135  E1=E1+1
7140  P2=P2/10
7150  GOTO 7005
7155  E1=E1-1
7160  P2=P2*10
7165  GOTO 7005
7170  P2=ABS(P2*100)
7175  GOSUB 6000
7180  IF P6=1 THEN 7195
7185  C$[1,1]="-"
7190  GOTO 7200
7195  C$[1,1]=" "
7200  C$[2,2]=B$[2,2]
7205  C$[3,3]="."
7210  C$[4,5]=B$[3,4]
7215  C$[6,6]="E"
7220  IF SGN(E1)=1 THEN 7235
7225  C$[7,7]="-"
7230  GOTO 7240
7235  C$[7,7]=" "
7240  P2=ABS(E1)
7245  GOSUB 6000
7250  C$[8,9]=B$[3,4]
7260  B$=C$
7310  RETURN 
7400  C$="0"
7405  B$=C$
7410  RETURN 
7500  END 
