10 ' AIRINPUT.BAS (c) 1982 Alan Bose 22-Jan-82 Rev 2/10/83 20 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr. 30 CLEAR:WIDTH 255:ON ERROR GOTO 3160 40 BL$=CHR$(7):E$=CHR$(27):ER$=E$+"E":P$=E$+"p":Q$=E$+"q":G$=E$+"F":NG$=E$+"G" 50 Y$=E$+"Y":L$=E$+"l":J$=E$+"j":K$=E$+"k":J1$=E$+"J":U=57.29577950000003# 60 DEF FNC$(C1,C2)=Y$+CHR$(C1+31)+CHR$(C2+31) 70 DEF FNS6(X)=INT(X*10+.5)/10 80 DEF FNS7(X)=ATN(X/SQR(1-X*X))*U 90 DEF FNS8(X)=SIN(ABS(A/2)/U)*COS(X/U)/SIN(Q2/2) 100 PRINT ER$"Standby one";:MX=32767:MN=0 110 OPEN"R",1,"B:AIRPORTS.RND",255:GOSUB 3330:PRINT"..." 120 OPEN"R",2,"B:AIRINDEX.RND",255:MD=(MD*5)-1:IF MD=-1 THEN MD=0 130 OL=MD+10:DIM ID$(OL),RN$(2),RN(2):FOR J=0 TO MD:REC=(J\51)+1:SS=J MOD 51 140 IF LOC(2)<>REC THEN GET #2,REC 150 FIELD #2,SS*5 AS DU$,5 AS ID$:ID$(J)=ID$ 160 IF ASC(ID$)=0 THEN ID$(J)=SPACE$(5) 170 NEXT J:CLOSE#2:IM=MD 180 'data box 190 PRINT ER$G$FNC$(2,6)"f"; 200 FOR J=7 TO 74:PRINT "a";:NEXT J:PRINT "c"FNC$(4,6)"e"; 210 FOR J=7 TO 74:PRINT "a";:NEXT J:PRINT "d" 220 PRINT FNC$(2,12)"s"FNC$(2,15)"s"FNC$(2,23)"s"FNC$(2,44)"s"; 230 PRINT FNC$(2,52)"s"FNC$(2,61)"s"FNC$(2,69)"s"; 240 PRINT FNC$(4,12)"u"FNC$(4,15)"u"FNC$(4,23)"u"FNC$(4,44)"u"; 250 PRINT FNC$(4,52)"u"FNC$(4,61)"u"FNC$(4,69)"u"; 260 PRINT FNC$(3,6)"`"FNC$(3,12)"`"FNC$(3,15)"`"FNC$(3,23)"`"FNC$(3,44); 270 PRINT "`"FNC$(3,52)"`"FNC$(3,61)"`"FNC$(3,69)"`"FNC$(3,75)"`":PRINT NG$ 280 PRINT FNC$(1,7)"Ident Fac Freq"FNC$(1,32)"Name"FNC$(1,47)"Lat" 290 PRINT FNC$(1,55)"Long"FNC$(1,64)"Var"FNC$(1,70)"Elev" 300 PRINT FNC$(5,9)"1"FNC$(5,13)"2"FNC$(5,19)"3"FNC$(5,33)"4"FNC$(5,47); 310 PRINT "5"FNC$(5,56)"6"FNC$(5,65)"7"FNC$(5,72)"8" 320 'menu 330 PRINT FNC$(7,1)J1$FNC$(8,7)"PRESS `I' to input new data" 340 PRINT FNC$(9,14)"`U' to update existing data" 350 PRINT FNC$(10,14)"`E' to exit" 360 X$=INPUT$(1):GOSUB 3120:MD$=X$:PRINT FNC$(8,1)J1$:IF MD$="I" THEN 430 370 IF MD$="U" THEN 440 380 IF MD$<>"E" THEN PRINT BL$:GOTO 330 390 PRINT ER$"Returning to menu. Sure? (Y or N) ";:X$=INPUT$(1):PRINT X$ 400 IF X$=CHR$(13) THEN X$="N" 410 GOSUB 3120:IF X$="Y" THEN CLOSE:GOSUB 2680:RUN"MENU" 420 IF X$="N" THEN 180 ELSE PRINT BL$:GOTO 390 430 C8=0:GOTO 510 440 'revise 450 PRINT FNC$(8,7)L$"Enter Identifier "J$STRING$(5,95)K$; 460 LINE INPUT X$:PRINT J1$:IF X$="" THEN 320 470 IF LEN(X$)>5 THEN PRINT BL$:GOTO 450 480 GOSUB 3120:AP$=X$+SPACE$(5-LEN(X$)):NL$=AP$:GOSUB 1450 490 IF FD=0 THEN PRINT BL$"Can't find "AP$:GOTO 450 500 RO=3:GOSUB 1750 510 IF MD$="I" AND C8=8 THEN PUT#1,REC:ID$(PI)=ID$:EN=1:GOTO 320 520 IF MD$="I" THEN C8=C8+1:GOTO 560 530 PRINT FNC$(7,1)J1$:PRINT FNC$(8,7)"Press number for revision "; 540 C$=INPUT$(1):IF C$=CHR$(13) THEN PUT#1,REC:ID$(PI)=ID$:GOTO 320 550 C8=VAL(C$) 560 PRINT FNC$(7,1)J1$; 570 ON C8 GOTO 590,750,840,900,980,1160,1320,1400 580 PRINT BL$:GOTO 530 590 'id 600 PRINT "Enter airport/facility code: "J$STRING$(5,95) 610 IF MD$="U" THEN PRINT:PRINT"Enter 'D' to erase listing" 620 PRINT K$;:LINE INPUT X$:IF MD$="I" AND X$="" THEN 320 630 IF X$="" THEN 500 640 GOSUB 3120:AP$=X$+SPACE$(5-LEN(X$)):NL$=AP$ 650 IF (MD$="I" AND X$="D") OR LEN(X$)>5 THEN PRINT BL$:GOTO 560 660 IF MD$="I" THEN GOSUB 1600 670 IF X$<>"D" THEN LSET ID$=NL$:EN=1:GOTO 500 680 GOSUB 3200:KY=KY-1:FOR J=1 TO KY:IF LI$(J)=ID$ THEN LI$(J)="":EE=1 690 IF R1$(J)=ID$ AND R1(J)=PI THEN R1$(J)="":EE=1 700 IF R2$(J)=ID$ AND R2(J)=PI THEN R2$(J)="":EE=1 710 IF R1$(J)="" AND R2$(J)="" THEN LI$(J)="" 720 IF LI$(J)="" THEN DD=DD+1 730 NEXT J:IF EE=1 THEN GOSUB 3270 ELSE GOSUB 3320 740 GOSUB 2630:GOSUB 1750:GOTO 320 750 'facility 760 PRINT L$"Enter facility code: "J$STRING$(2,95) 770 PRINT:PRINT"A = Airport":PRINT"V = VOR/VORTAC":PRINT"N = NDB/LOM" 780 PRINT "I = Intersection":PRINT "R = Reporting point":PRINT "C = Checkpoint" 790 PRINT "W = Waypoint":PRINT "L = Landmark":PRINT K$;:LINE INPUT X$ 800 IF LEN(X$)>2 THEN PRINT BL$:GOTO 560 810 IF MD$="I" AND X$="" THEN 320 820 IF X$<>"" THEN GOSUB 3120:LSET FAC$=X$ 830 GOTO 500 840 'freq 850 IF MD$="I" AND INSTR(FAC$,"V")=0 AND INSTR(FAC$,"N")=0 THEN 500 860 PRINT"Enter navaid frequency "J$STRING$(7,95)K$;:LINE INPUT X$ 870 IF MD$="I" AND X$="" THEN 320 880 IF X$<>"" THEN LSET FR$=MKS$(VAL(X$)) 890 GOTO 500 900 'name 910 PRINT L$"Enter facility name "J$STRING$(20,95)K$;:LINE INPUT X$ 920 IF MD$="I" AND X$="" THEN 320 930 IF LEN(X$)>20 THEN PRINT BL$"20 characters maximum"FNC$(7,1);:GOTO 910 940 IF INSTR(X$,",")<>0 THEN 960 950 PRINT BL$"Forgot state preceded by comma"FNC$(7,1);:GOTO 910 960 IF X$<>"" THEN LSET NM$=X$ 970 GOTO 500 980 'lat 990 IF MD$="I" AND INSTR(FAC$,"I")>0 AND INSTR(FAC$,"V")=0 THEN 1000 ELSE 1010 1000 IF INSTR(FAC$,"N")=0 THEN GOSUB 1930:GOTO 500 1010 PRINT"Enter degrees latitude"FNC$(7,30)J$STRING$(2,95)" deg" 1020 PRINT:PRINT"Enter `R' for RNAV calculation of lat. & long. from known fix" 1030 PRINT K$;:LINE INPUT X$:X=VAL(X$) 1040 IF MD$="I" AND X$="" THEN 320 1050 IF X$="R" OR X$="r" THEN TR=REC:TS=SS:I$=ID$:PUT#1,REC:GOSUB 1930:GOTO 500 1060 IF X$="" THEN 500 1070 IF X>90 OR X<=0 THEN PRINT BL$:GOTO 1030 1080 LSET D1$=MKI$(X) 1090 PRINT J1$"Enter minutes latitude <0> "J$STRING$(4,95)" min"K$; 1100 LINE INPUT X$:X=VAL(X$):IF X$="" THEN X=0:PRINT K$"0" 1110 IF X>=60 OR X<0 THEN PRINT BL$:GOTO 1090 1120 PRINT J1$"Enter seconds latitude <0> "J$STRING$(4,95)" sec"K$; 1130 LINE INPUT X$:Y=VAL(X$):IF X$="" THEN Y=0:PRINT K$"0" 1140 IF Y>60 OR Y<0 THEN PRINT BL$:GOTO 1120 1150 X=X+(Y/60):LSET M1$=MKS$(X):GOTO 500 1160 'enter long 1162 PRINT"East or West Longitude? ";:X$=INPUT$(1):PRINT X$ 1164 IF X$="E" OR X$="e" THEN EW=1 ELSE EW=0 1170 PRINT"Enter degrees longitude"FNC$(8,31)J$STRING$(3,95)" deg" 1180 PRINT:PRINT"Enter `R' for RNAV calculation of lat. & long. from known fix" 1190 PRINT K$;:LINE INPUT X$:X=VAL(X$) 1200 IF MD$="I" AND X$="" THEN 320 1210 IF X$="" THEN 500 1220 IF X$="R" OR X$="r" THEN TR=REC:TS=SS:I$=ID$:PUT#1,REC:GOSUB 1930:GOTO 500 1230 IF X>180 OR X<0 THEN PRINT BL$:GOTO 1170 1235 IF EW=1 THEN X=-X 1240 LSET D$=MKI$(X) 1250 PRINT J1$"Enter minutes longitude <0> "J$STRING$(4,95)" min"K$; 1260 LINE INPUT X$:X=VAL(X$):IF X$="" THEN X=0:PRINT K$"0" 1270 IF X>=60 OR X<0 THEN PRINT BL$;:GOTO 1250 1280 PRINT"Enter seconds longitude <0> "J$STRING$(4,95)" sec"K$; 1290 LINE INPUT X$:Y=VAL(X$):IF X$="" THEN Y=0:PRINT K$"0" 1300 IF Y>60 OR Y<0 THEN PRINT BL$:GOTO 1280 1310 X=X+(Y/60) 1312 IF EW=1 THEN X=-X 1314 LSET M$=MKS$(X):GOTO 500 1320 'var 1330 PRINT"Enter magnetic variation <0> "J$STRING$(4,95)" deg"K$; 1340 LINE INPUT X$:X=VAL(X$):IF MD$="I" AND X$="" THEN X=0 1350 IF X$="" THEN 500 1360 LSET V$=MKS$(X):IF X=0 THEN LSET V1$=" ":GOTO 500 1370 PRINT"East or West variation? "J1$;:X$=INPUT$(1):PRINT X$:GOSUB 3120 1380 IF X$<>"E" AND X$<>"W" THEN PRINT BL$;:GOTO 1370 1390 PRINT FNC$(7,1)J1$:LSET V1$=X$:GOTO 500 1400 'elev 1410 PRINT"Enter elevation of facility "J$STRING$(5,95)K$; 1420 LINE INPUT X$:X=VAL(X$):IF MD$="I" AND X$="" THEN PRINT BL$:GOTO 560 1430 IF X$<>"" THEN LSET EL$=MKI$(X) 1440 GOTO 500 1450 'search-match 1460 RO=3 1470 FD=0 1480 FOR J=0 TO IM:IF ID$(J)<>AP$ THEN 1530 1490 IF FD=1 THEN RO=7:GET#1,REC:PRINT FNC$(7,1)J1$:GOSUB 1750:RO=8:FD=2 1500 PI=J 1510 IF FD>1 THEN REC=(J\5)+1:SS=J MOD 5:GET#1,REC:GOSUB 1750:FD=FD+1:RO=RO+1 1520 IF FD=0 THEN FD=1:REC=(J\5)+1:SS=J MOD 5:GET#1,REC 1530 NEXT J 1540 IF FD=0 OR FD=1 THEN 1590 1550 PRINT FNC$(RO+1,1)"Enter number of your choice <"PI"> "J$; 1560 PRINT STRING$(3,95)K$;:LINE INPUT X$ 1570 IF X$="" THEN 1590 1580 PI=VAL(X$):REC=(PI\5)+1:SS=PI MOD 5:GET #1,REC:PRINT FNC$(6,1)J1$ 1590 RETURN 1600 'search-blank 1610 FD=0:FH=0:FOR J=0 TO IM 1620 IF ID$(J)=SPACE$(5) THEN FH=1:TI=J:J=IM+1 1630 IF ID$(J)<>AP$ THEN 1650 1640 FD=FD+1:RO=8+FD:REC=(J\5)+1:SS=J MOD 5:GET#1,REC:PI=J:GOSUB 1750 1650 NEXT J 1660 IF FH=0 THEN IM=IM+1:TI=IM 1670 IF IM<=OL THEN 1690 1680 PRINT ER$"Standby one...then re-enter":CLOSE:GOSUB 2680:GOTO 10 1690 RO=3:IF FD=0 THEN 1730 1700 PRINT FNC$(10+FD,7)"Found...continue with additional entry? (Y or N)"; 1710 PRINT " ";:X$=INPUT$(1):GOSUB 3120:IF X$="N" THEN 320 1720 IF X$<>"Y" AND X$<>CHR$(13) THEN PRINT BL$:GOTO 1700 1730 PI=TI:REC=(PI\5)+1:SS=PI MOD 5:GET #1,REC:GOSUB 1750:GOSUB 2630 1740 RETURN 1750 'decode & display 1760 FIELD #1,SS*50 AS DU$,5 AS ID$,2 AS FAC$,4 AS FR$,20 AS NM$,2 AS D1$, 4 AS M1$,2 AS D$,4 AS M$,4 AS V$,1 AS V1$,2 AS EL$ 1770 F5=CVS(FR$):D6=CVI(D1$):M6=CVS(M1$):D5=CVI(D$):M5=CVS(M$):V5=CVS(V$) 1780 E5=CVI(EL$) 1790 PI$=STR$(PI):PI$=PI$+SPACE$(4-LEN(PI$)):PRINT FNC$(RO,1)PI$; 1800 PRINT FNC$(RO,7)ID$FNC$(RO,13)FAC$FNC$(RO,16)SPC(7)FNC$(RO,16); 1810 IF F5=0 THEN 1860 1820 IF F5>136 THEN PRINT USING"#####";F5;:GOTO 1860 1830 IF F5*10\1=F5*10/1 THEN PRINT USING"####.#";F5;:GOTO 1860 1840 IF F5*100\1=F5*100/1 THEN PRINT USING"####.##";F5;:GOTO 1860 1850 PRINT USING"###.###";F5; 1860 PRINT FNC$(RO,24);NM$; 1870 PRINT FNC$(RO,45);USING"##";D6;:PRINT FNC$(RO,48);USING"##.#";M6; 1880 PRINT FNC$(RO,53);USING"###";D5;:PRINT FNC$(RO,57);USING"##.#";ABS(M5); 1890 PRINT FNC$(RO,62);USING"###.#";V5; 1900 PRINT FNC$(RO,68)V1$;FNC$(RO,70);USING"#####";E5 1910 IF INSTR(FAC$,"V")=0 AND INSTR(FAC$,"N")=0 THEN NV=0 ELSE NV=1 1920 RETURN 1930 'RNAV lat & long 1940 PRINT FNC$(6,1)J1$ 1950 PRINT"This routine will find the latitude & longitude of "I$ 1960 PRINT"by taking fixes on 1 or 2 navaids already on file.":PRINT 1970 PRINT"The navaids you specify should be the ones you'll use in the air" 1980 PRINT"to determine your position.":PRINT 1990 PRINT"Postion can be determined two ways:":PRINT 2000 PRINT TAB(5)"1 - Distance & bearing FROM one navaid":PRINT 2010 PRINT TAB(5)"2 - Bearings FROM two navaids":PRINT 2020 PRINT J$J1$TAB(5)"Enter selection ";:X$=INPUT$(1):PRINT X$ 2030 '2 bearings 2040 IF X$=CHR$(13) THEN C8=C8-1:GOTO 2620 2050 IF X$="2" THEN RN=1:GOTO 2070 2060 IF X$="1" THEN RN=0 ELSE PRINT BL$K$;:GOTO 2020 2070 PRINT FNC$(7,1)J1$; 2080 PRINT FNC$(7,1)L$"Enter identifier of known fix on file "J$; 2090 PRINT STRING$(5,95)K$;:LINE INPUT X$:PRINT J1$ 2100 IF X$="" THEN C8=C8-1:GOTO 2620 2110 IF LEN(X$)>5 THEN PRINT BL$:GOTO 2080 2120 GOSUB 3120:AP$=X$+SPACE$(5-LEN(X$)):PUT#1,REC:TI=PI:RO=9:GOSUB 1470 2130 IF FD=0 THEN PRINT BL$"Can't find "AP$:GOTO 2080 2140 PRINT FNC$(7,1)J1$:RO=9:GOSUB 1750:RN$(RN)=ID$:RN(RN)=PI:PI=TI 2150 IF NV=1 THEN 2200 2160 PRINT BL$"Not listed as navaid. Use? (Y or N) ";:X$=INPUT$(1):PRINT X$ 2170 IF X$=CHR$(13) THEN X$="N" 2180 GOSUB 3120:IF X$="N" THEN 2080 2190 IF X$<>"Y" THEN PRINT BL$:GOTO 2160 2200 X4=D6+(M6/60):X6=-(D5+(M5/60)):K9=0:L9=0 2210 IF RN<>0 THEN PRINT FNC$(RO+2,1)"Bearing FROM "ID$" to "NL$:GOTO 2270 2220 'dist & 1 bearing 2230 PRINT FNC$(RO+2,1)"Distance & bearing FROM "ID$" to "NL$ 2240 PRINT FNC$(RO+4,5)"Enter distance in nautical miles "J$; 2250 PRINT STRING$(3,95)K$; 2260 LINE INPUT D$:D=VAL(D$):IF D=0 THEN PRINT BL$:GOTO 2240 2270 PRINT FNC$(RO+5,5)"Enter bearing "J$STRING$(3,95)K$; 2280 LINE INPUT H$:H=VAL(H$):IF H<0 OR H>360 THEN PRINT BL$:GOTO 2270 2290 IF H$="" THEN C8=C8-1:GOTO 1930 2300 PRINT FNC$(RO+6,5)"Is bearing True or Magnetic? "J1$; 2310 X$=INPUT$(1):PRINT X$:GOSUB 3120:IF X$="T" OR X$=CHR$(13) THEN 2350 2320 IF X$<>"M" THEN PRINT BL$:GOTO 2300 2330 V=V5:IF V1$="E" THEN V=-V 2340 H=H-V 2350 IF RN<>0 THEN P2(RN)=X4:P1(RN)=-X6:RA(RN)=H 2360 IF RN=1 THEN RN=2:GOTO 2070 2370 IF RN=2 THEN GOSUB 2800:GOTO 2400 2380 C=D:C1=H 2390 'solve lat & long 2400 IF C1>270 THEN 2440 2410 IF C1>180 THEN 2450 2420 IF C1>90 THEN 2460 2430 IF C1<=90 THEN 2470 2440 A=360-C1:GOSUB 2480:K=B1:L=-B2:GOTO 2490 2450 A=C1-180:GOSUB 2480:K=-B1:L=-B2:GOTO 2490 2460 A=180-C1:GOSUB 2480:K=-B1:L=B2:GOTO 2490 2470 A=C1:GOSUB 2480:K=B1:L=B2:GOTO 2490 2480 B=A/U:B1=C*COS(B):B2=C*SIN(B):RETURN 2490 K9=K:L9=L:X8=X4+(K9/60):X9=(X4+X8)/(2*U):X8=ABS(X8):Y=INT(X8):Y1=X8-Y 2500 Y2=Y1*60:Y3=(L9/COS(X9))/60:Y4=ABS(X6+Y3):Y5=INT(Y4):Y6=Y4-Y5:Y7=Y6*60 2510 REC=(PI\5)+1:SS=PI MOD 5:GET#1,REC:RO=3:GOSUB 1750:LSET D1$=MKI$(Y) 2520 LSET M1$=MKS$(Y2):LSET D$=MKI$(Y5):LSET M$=MKS$(Y7):GOSUB 1750:C8=C8+1 2530 IF INSTR(FAC$,"V")>0 THEN 2620 2540 GOSUB 3200:LI$(KY)=NL$ 2550 IF RN=0 THEN R1$(KY)=RN$(0):R1(KY)=RN(0):R2$(KY)="":R2(KY)=0:GOTO 2570 2560 R1$(KY)=RN$(1):R1(KY)=RN(1):R2$(KY)=RN$(2):R2(KY)=RN(2) 2570 RP=0:FOR J=1 TO KY-1 2580 IF LI$(J)=LI$(KY) AND R1$(J)=R1$(KY) AND R1(J)=R1(KY) THEN 2590 ELSE 2600 2590 IF R2$(J)=R2$(KY) AND R2(J)=R2(KY) THEN RP=1 2600 NEXT J 2610 IF RP=0 THEN GOSUB 3270 ELSE GOSUB 3320 2620 RETURN 2630 'clear 2640 EN=1:LSET ID$=SPACE$(5):LSET FAC$=SPACE$(2):LSET FR$=MKS$(0) 2650 LSET NM$=SPACE$(20):LSET D1$=MKI$(0):LSET M1$=MKS$(0) 2660 LSET D$=MKI$(0):LSET M$=MKS$(0):LSET V$=MKS$(0):LSET V1$=" " 2670 LSET EL$=MKI$(0):PUT#1,REC:ID$(PI)=SPACE$(5):RETURN 2680 'write index 2690 IF EN=0 THEN RETURN 2700 PRINT ER$"Standby one..." 2710 OPEN"R",2,"B:AIRINDEX.RND",255 2720 REC=1:FOR J=0 TO IM:RC=(J\51)+1:SS=J MOD 51 2730 IF REC<>RC THEN PUT#2,REC:REC=RC:FIELD#2,255 AS CL$:LSET CL$=" " 2740 FIELD #2,SS*5 AS DU$,5 AS ID$ 2750 LSET ID$=ID$(J) 2760 NEXT J 2770 IF RC<>LOC(2)-1 THEN PUT#2,RC 2780 CLOSE#2:RETURN 2790 '2 bearings 2800 IF RA(1)>RA(2) AND RA(2)180 THEN AB=AB-180 2830 IF AB>=15 AND AB<=165 THEN 2870 2840 PRINT BL$FNC$(7,1)J1$FNC$(9,1)"You're too close to the line that "; 2850 PRINT "runs between the navaids":PRINT "to compute your position "; 2860 PRINT "accurately.":GOTO 2080 2870 GOSUB 2950 2880 IF RA(1)>T AND T180 THEN AA=AA-180 2900 IF T>180 THEN T1=T-180 ELSE T1=T+180 2910 IF RA(2)>T1 AND T1180 THEN AC=AC-180 2930 SC=SIN(AC/U)*SIN(Q2)/SIN(AB/U):SC=ATN(SC/SQR(-SC*SC+1)):C=SC*U*60 2940 C1=RA(1):X4=P2(1):X6=-P1(1):H=RA(1):RETURN 2950 'distance 2960 A=P1(1)-P1(2):B1=P2(1)-P2(2):P#=COS(P2(1)/U)*COS(P2(2)/U) 2970 Q=P#*COS(ABS(A)/U)+COS(ABS(B1)/U)-P#:IF Q<=0 THEN PRINT BL$:GOTO 3100 2980 Q2=ATN(SQR(1-Q*Q)/Q):Q=Q2*U*60 2990 C=FNS6(Q):IF C>900 AND ABS(A)>30 THEN PRINT BL$:GOTO 3090 3000 IF C=0 THEN T=0:RETURN 3010 ' true course 3020 S=FNS8((P2(1)+P2(2))/2):IF S>=1 THEN S=90-S ELSE S=FNS7(S) 3030 IF A>0 AND B1=0 THEN T=90:GOTO 3080 3040 IF A<0 AND B1=0 THEN T=270:GOTO 3080 3050 IF A>0 AND B1<0 THEN T=S:GOTO 3080 3060 IF A>=0 AND B1>0 THEN T=180-S:GOTO 3080 3070 IF A<0 AND B1>0 THEN T=180+S ELSE T=360-S 3080 T=FNS6(T):RETURN 3090 PRINT BL$"Distance excessive...":GOTO 1990 3100 PRINT BL$"Distance excessive." 3110 PRINT"Possible course errors due to rhumb line.":GOTO 1990 3120 'map lc 3130 FOR L=1 TO LEN(X$):U$=MID$(X$,L,1) 3140 IF ASC(U$)>96 AND ASC(U$)<123 THEN MID$(X$,L,1)=CHR$(ASC(U$)-32) 3150 NEXT L:RETURN 3160 'error 3170 IF ERR=53 AND ERL=3210 THEN KY=1:RESUME 3260 3180 IF ERL=2750 AND ERR=9 THEN RESUME NEXT 3190 ON ERROR GOTO 0 3200 'read RNAV 3210 OPEN"I",2,"B:RNAVLIST.DAT" 3220 INPUT#2,KY 3230 KY=KY+1:DIM LI$(KY),R1$(KY),R1(KY),R2$(KY),R2(KY) 3240 FOR J=1 TO KY-1:LINE INPUT#2,LI$(J):LINE INPUT#2,R1$(J):INPUT#2,R1(J) 3250 LINE INPUT#2,R2$(J):INPUT#2,R2(J):NEXT J:CLOSE#2 3260 RETURN 3270 'write RNAV 3280 OPEN"O",2,"B:RNAVLIST.DAT":PRINT#2,KY-DD 3290 FOR J=1 TO KY:IF LI$(J)="" THEN 3310 ELSE PRINT#2,LI$(J) 3300 PRINT#2,R1$(J):PRINT#2,R1(J):PRINT#2,R2$(J):PRINT#2,R2(J) 3310 NEXT J:CLOSE#2 3320 DD=0:ERASE LI$,R1$,R1,R2$,R2:RETURN 3330 MD=(MX+MN)\2:GET #1,MD:IF EOF(1) THEN MX=MD ELSE MN=MD 3340 IF MX>MN+1 THEN 3330 ELSE MD=MN:RETURN