10 ' RNAVREF.BAS NAVPROGseven RNAV Cross-Reference 22-Jan-82 Rev 6/05/82 20 ' 30 ' (c) Copyright 1982 Alan Bose 40 ' President, Taildragger Flyers 50 ' Ross Field, Benton Harbor, MI 60 ' 70 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr. 80 ' 90 CLEAR:ON ERROR GOTO 650:WIDTH 255:DEFINT I-J 100 BL$=CHR$(7):E$=CHR$(27):ER$=E$+"E":U=57.29577950000003# 110 PRINT"Checking RNAV references..."; 120 DEF FNS5(X)=SIN(X/U):DEF FNS6(X)=INT(X*10+.5)/10 130 DEF FNS7(X)=ATN(X/SQR(1-X*X))*U 140 DEF FNS8(X)=SIN(ABS(A/2)/U)*COS(X/U)/SIN(Q2/2) 150 ' 160 OPEN"I",1,"B:FLIGHT.SEQ" 170 FOR I=1 TO 10:LINE INPUT#1,P$(I):INPUT#1,R(I):N=I 180 NEXT I:CLOSE 190 ' 200 OPEN"I",1,"B:RNAVLIST.DAT":INPUT#1,KY 210 DIM LI$(KY),R1$(KY),R1(KY),R2$(KY),R2(KY) 220 FOR J=1 TO KY:LINE INPUT#1,LI$(J):LINE INPUT#1,R1$(J):INPUT#1,R1(J) 230 LINE INPUT#1,R2$(J):INPUT#1,R2(J):NEXT J:CLOSE 240 ' 250 FOR I=1 TO N:FOR J=1 TO KY:IF P$(I)=LI$(J) THEN CP=1 ELSE 310 260 PI=R(I):K=0:GOSUB 350:PI=R1(J):K=1:GOSUB 350:IF R1$(J)="" THEN 280 270 L=1:M=0:GOSUB 450 280 IF R2$(J)="" THEN 310 ELSE PI=R2(J):K=2:GOSUB 350 290 IF R2$(J)="" THEN 310 ELSE L=2:M=0:GOSUB 450 300 IF R1$(J)="" OR R2$(J)="" THEN 310 ELSE L=1:M=2:GOSUB 450 310 CP=0:NEXT J,I:LPRINT CHR$(12) 320 CLOSE:KILL"B:FLIGHT.SEQ" 330 RUN"MENU" 340 ' 350 IF DE=0 THEN OPEN"R",1,"B:AIRPORTS.RND",255:DE=1 360 REC=(PI\5)+1:SS=PI MOD 5:GET#1,REC 370 'decode 380 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$ 390 ' FINISH FIELD 400 F5=CVS(FR$):D6=CVI(D1$):M6=CVS(M1$):D5=CVI(D$):M5=CVS(M$):V5=CVS(V$) 410 E5=CVI(EL$):I$(K)=ID$:FC$(K)=FAC$:FR(K)=F5:NM$(K)=NM$ 420 M1=M6/60:P2(K)=D6+M1:M=M5/60:P1(K)=D5+M:V(K)=V5:V$(K)=V1$:EL(K)=E5 430 IF V$(K)="E" THEN V(K)=-V(K) 440 RETURN 450 'distance 460 A=P1(L)-P1(M):B1=P2(L)-P2(M):P#=COS(P2(L)/U)*COS(P2(M)/U) 470 Q=P#*COS(ABS(A)/U)+COS(ABS(B1)/U)-P#:Q2=ATN(SQR(1-Q*Q)/Q):Q=Q2*U*60 480 C=FNS6(Q):IF C=0 THEN T=0:Y=0:R=0:GOTO 640 490 'true bearing 500 S=FNS8((P2(L)+P2(M))/2):IF S>=1 THEN S=90-S ELSE S=FNS7(S) 510 IF A>0 AND B1=0 THEN T=90:GOTO 560 520 IF A<0 AND B1=0 THEN T=270:GOTO 560 530 IF A>0 AND B1<0 THEN T=S:GOTO 560 540 IF A>=0 AND B1>0 THEN T=180-S:GOTO 560 550 IF A<0 AND B1>0 THEN T=180+S ELSE T=360-S 560 T=FNS6(T) 570 'magnetic bearing 580 V1=(V(L)+V(M))/2:V2=FNS6(V1):Y=T+V2:IF Y<0 THEN Y=360-Y 590 IF Y>360 THEN Y=Y-360 600 'print 610 IF CP=1 THEN LPRINT:LPRINT"RNAV bearings for ";I$(0);" ";NM$(0):CP=0 620 IF M=0 THEN LPRINT"NAV"L": "I$(L);FR(L);C;"nm "Y"deg Mag (";T;"True )" 630 IF M=2 THEN LPRINT"NAV 1 to NAV 2 : ";C;"nm ";Y;"deg Mag (";T;"True )" 640 RETURN 650 'error trap 660 IF ERL=160 AND ERR=53 THEN RESUME 320 670 IF ERL=170 AND ERR=62 THEN J=11:RESUME 180 680 IF ERL=200 AND ERR=53 THEN RESUME 320 690 IF ERL=320 AND ERR=53 THEN RESUME NEXT 700 ON ERROR GOTO 0