home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 14.2 KB | 378 lines |
- 10 ' NAVPROG7.BAS (c) 1982 Alan Bose 22-Jan-82 Rev 01/22/86
- 20 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr.
- 25 ' HP-150 modifications (c) 1984 by Alan Bose
- 26 ' PC-DOS modifications (c) 1985 by Bruce Carson Version F.03.02
- 30 CLEAR:ON ERROR GOTO 2520:WIDTH 80:DEFINT I-J:GOSUB 4000
- 32 PROGDISK$="A:":DATADISK$="B:"
- 34 OPEN "I",1,"NAVDISCS.DAT"
- 36 INPUT #1,PROGDISK$,DATADISK$:CLOSE
- 40 BL$=CHR$(7):E$=CHR$(27)
- 50 U=57.2958
- 70 DEF FNS5(X)=SIN(X/U):DEF FNS6(X)=INT(X*10+0.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)
- 95 DIM ID$(20),PI(20)
- 100 CLS:PRINT TAB(34);"NAVPROGseven"
- 110 OPEN "R",1,DATADISK$+"AIRPORTS.RND",255
- 120 KEY OFF
- 130 LOCATE 5,1:PRINT "Aircraft identification? <MENU> N ";
- 140 LOCATE ,POS(0)-7:LINE INPUT X$:IF X$="" THEN RUN PROGDISK$+"NAVMENU"
- 150 GOSUB 2830:IF X$="I" THEN CLOSE:RUN PROGDISK$+"AIRCRAFT"
- 160 F$="N"+X$
- 170 OPEN"I",2,DATADISK$+F$:LINE INPUT#2,AT$:INPUT#2,RU:INPUT#2,T9:INPUT#2,G9
- 180 INPUT#2,D9:INPUT#2,NA:INPUT#2,NS:INPUT#2,NF:INPUT#2,NB:INPUT#2,PH:CLOSE#2
- 190 RC=(NA/T9)*60:CF=(G9/T9)*60:CS=(D9/T9)*60
- 210 OPEN"I",2,DATADISK$+"FLIGHT.SEQ"
- 220 FOR J=1 TO 20:INPUT#2,ID$(J):ID$(J)=ID$(J)+SPACE$(5-LEN(ID$(J)))
- 230 INPUT #2,PI(J):N=J
- 240 NEXT J:CLOSE#2
- 250 DIM C(N),T(N),V$(N),V(N),Y(N),P$(N),P1(N),P2(N),Q(N),G(N),W(N),S(N),E(N)
- 260 DIM F(N),F1(N),J(N),K(N),I$(N),FR(N),K8(N),FC$(N),EL(N),AL%(N)
- 270 'data box
- 280 '
- 385 CLS:PRINT " NAVPROGseven"TAB(38);F$;" "AT$TAB(88);NG$
- 390 LOCATE 2,7:PRINT "Ident Fac Freq"SPC(11)"Name"SPC(11)"Lat"SPC(5)"Long";
- 400 PRINT SPC(5)"Var Elev"
- 410 FOR I=1 TO N:REC=(PI(I)\5)+1:SS=PI(I) MOD 5:GET#1,REC:RO=I+3:GOSUB 430
- 420 NEXT I:ERASE ID$,PI:GOTO 640
- 430 'decode & display
- 440 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$
- 450 F5=CVS(FR$):D6=CVI(D1$):M6=CVS(M1$)
- 460 D5=CVI(D$):M5=CVS(M$):V5=CVS(V$):E5=CVI(EL$):IF ID$=ID$(I) THEN 500
- 470 PRINT BL$;:LOCATE N+6,1:PRINT "Aborted. Checkpoint ";ID$(I);" missing or moved"
- 480 PRINT"Delete this route, re-enter checkpoint if missing, re-enter route."
- 490 PRINT:PRINT"Press any key to continue...";:X$=INPUT$(1):GOTO 2450
- 500 I$(I)=ID$:FC$(I)=FAC$:FR(I)=F5:P$(I)=NM$:M1=M6/60:P2(I)=D6+M1:M=M5/60
- 510 P1(I)=D5+M:V(I)=V5:V$(I)=V1$:EL(I)=E5:IF V$(I)="E" THEN V(I)=-V(I)
- 520 LOCATE RO,1:PRINT I;TAB(7);ID$;TAB(13);FAC$;TAB(16);
- 530 IF F5=0 THEN PRINT SPC(7);:GOTO 580
- 540 IF F5>136 THEN PRINT USING"####";F5;:GOTO 580
- 550 IF F5*10\1=F5*10/1 THEN PRINT USING"####.#";F5;:GOTO 580
- 560 IF F5*100\1=F5*100/1 THEN PRINT USING"####.##";F5;:GOTO 580
- 570 PRINT USING"###.###";F5;
- 580 PRINT TAB(24);NM$;TAB(45);USING"##";D6;
- 590 PRINT TAB(48);USING"##.#";M6;
- 600 PRINT TAB(53);USING"###";D5;
- 610 PRINT TAB(57);USING"##.#";ABS(M5);
- 620 PRINT TAB(62);USING"###.#";V5;
- 630 PRINT TAB(68);V1$;TAB(70);USING"#####";E5:RETURN
- 640 LOCATE N+6,1:GOSUB 5000:PRINT "Route of flight correct? (Y or N) <Y> ";
- 650 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
- 660 GOSUB 2830:IF X$<>"N" AND X$<>"Y" THEN PRINT BL$:GOTO 640
- 670 IF X$="N" THEN KILL DATADISK$+"FLIGHT.SEQ":RUN PROGDISK$+"NAVMENU"
- 680 R1=0:CLOSE
- 690 LOCATE N+6,1:PRINT "Flight Service Station you'll close with? ";
- 700 PRINT SPC(17);:LOCATE ,POS(0)-17:LINE INPUT X$:IF X$<>"" THEN GOSUB 2830:FS$=X$
- 710 FOR I=1 TO N
- 720 LOCATE N+6,1:GOSUB 5000
- 730 IF I=1 OR I=N THEN PRINT"Enter SURFACE wind at ";:GOTO 750
- 740 PRINT"Enter winds ALOFT at ";
- 750 PRINT I$(I)" "P$(I)" (deg,kts) ";:INPUT W(I),S(I):IF S(I)=0 THEN 830
- 760 IF W(I)>360 THEN PRINT BL$:PRINT"360 degrees maximum":GOTO 720
- 770 IF S(I)<50 THEN 810 ELSE PRINT BL$:PRINT"Wind > 50 knots? (Y or N) ";
- 780 X$=INPUT$(1):IF X$=CHR$(13) THEN X$="Y":GOSUB 2830
- 790 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$;:GOTO 770
- 800 IF X$="N" THEN 720
- 810 IF W(I)<=180 THEN W(I)=W(I)+180:GOTO 830
- 820 W(I)=W(I)-180
- 830 NEXT I
- 840 LOCATE N+6,1:GOSUB 5000:PRINT"Enter usable fuel on board <"NB"> ";
- 850 PRINT " gal";:LOCATE ,POS(0)-7
- 860 LINE INPUT X$:UF=VAL(X$):IF X$="" THEN UF=NB
- 870 IF UF=0 THEN PRINT BL$;:GOTO 840
- 880 NB=UF:K8(0)=UF-RU:F=K8(0)
- 890 LOCATE N+6,1:GOSUB 5000:INPUT"Enter ZULU departure time (hhmm)";HR
- 900 IF HR>2400 THEN PRINT BL$:PRINT"2400 hours maximum":GOTO 890
- 910 L0=INT(HR/100):L1=(HR/100-L0)*100/60
- 920 IF L1>1 THEN PRINT BL$:PRINT"60 minutes/hour":GOTO 890
- 930 CD=0:CK=0:CT=0:MT=0:OC=0:LOCATE N+6,1:GOSUB 5000:PRINT"Calculating..."
- 940 FOR I=1 TO N-1:LOCATE I+4,2
- 950 'distance
- 960 A=P1(I)-P1(I+1):B1=P2(I)-P2(I+1):P#=COS(P2(I)/U)*COS(P2(I+1)/U)
- 970 Q=P#*COS(ABS(A)/U)+COS(ABS(B1)/U)-P#:IF Q<=0 THEN PRINT BL$:GOTO 2470
- 980 Q2=ATN(SQR(1-Q*Q)/Q):Q=Q2*U*60
- 990 C(I)=FNS6(Q):IF C(I)>900 AND ABS(A)>30 THEN PRINT BL$:GOTO 2490
- 1000 IF C(I)=0 THEN T(I)=0:Y(I)=0:E(I)=0:G(I)=0:R=0:GOTO 1650
- 1010 'true course
- 1020 S=FNS8((P2(I)+P2(I+1))/2):IF S>=1 THEN S=90-S ELSE S=FNS7(S)
- 1030 IF A>0 AND B1=0 THEN T=90:GOTO 1080
- 1040 IF A<0 AND B1=0 THEN T=270:GOTO 1080
- 1050 IF A>0 AND B1<0 THEN T=S:GOTO 1080
- 1060 IF A>=0 AND B1>0 THEN T=180-S:GOTO 1080
- 1070 IF A<0 AND B1>0 THEN T=180+S ELSE T=360-S
- 1080 T(I)=FNS6(T)
- 1090 'magnetic course
- 1100 V1=(V(I)+V(I+1))/2:V2=FNS6(V1):Y(I)=T(I)+V2:IF Y(I)<0 THEN Y(I)=360+Y(I)
- 1110 IF Y(I)>360 THEN Y(I)=Y(I)-360
- 1120 IF I>1 THEN 1380
- 1130 LOCATE N+6,1:GOSUB 5000:PRINT"Initial magnetic course is"Y(I)"degrees."
- 1140 PRINT "Enter cruise altitude ";
- 1150 IF Y(I)<180 THEN PRINT"(Odd thousands) "; ELSE PRINT"(Even thousands) ";
- 1160 PRINT "<"NA"> ";:LOCATE ,POS(0)-5
- 1170 LINE INPUT X$:CA=VAL(X$):IF X$="" THEN CA=NA
- 1180 FOR J=1 TO N:IF EL(J)+1000<=CA THEN 1220
- 1190 LOCATE N+6,1:GOSUB 5000:PRINT "Low altitude...less than 1000 ft terrain";
- 1200 PRINT " clearance at "P$(J):PRINT TAB(55)"Elev:"EL(J)
- 1210 PRINT "Press any key to continue...";:X$=INPUT$(1):GOTO 1130
- 1220 NEXT J:NA=CA:LOCATE N+6,1:GOSUB 5000
- 1230 PRINT"Enter cruise TAS <"NS"> kts";:LOCATE ,POS(0)-8
- 1240 LINE INPUT X$:TA=VAL(X$):IF X$="" THEN TA=NS
- 1250 IF TA>30 AND TA<250 THEN 1300
- 1260 PRINT BL$:PRINT"Is"TA"knots the correct TAS? (Y or N) <Y> ";
- 1270 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
- 1280 GOSUB 2830
- 1290 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$:GOTO 1260 ELSE IF X$="N" THEN 1230
- 1300 NS=TA:LOCATE N+6,1:GOSUB 5000:PRINT"Enter cruise fuel consumption <"NF"> gal";
- 1310 LOCATE ,POS(0)-8:LINE INPUT X$:F3=VAL(X$):IF X$="" THEN F3=NF
- 1320 IF F3>3 AND F3<50 THEN 1370
- 1330 PRINT BL$:PRINT"Is"F3"gal/hr the correct fuel rate? (Y or N) <Y> ";
- 1340 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
- 1350 GOSUB 2830
- 1360 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$:GOTO 1330 ELSE IF X$="N" THEN 1300
- 1370 NF=F3:LOCATE N+6,1:GOSUB 5000:PRINT "Calculating..."
- 1380 'cruise grndspd
- 1390 G0=I:A4=TA:GOSUB 2580
- 1400 'climb?..climb grndspd
- 1410 IF I=1 THEN AT=CA-EL(1)
- 1420 AL%(I)=CA-AT:IF AT<=0 THEN 1530
- 1430 G0=0:A4=CS:GOSUB 2580:TT=AT/RC:IF TT<C(I)/G(0) THEN 1480
- 1440 'climb entire leg
- 1450 CL=C(I)/G(0):CT=CT+CL:AT=AT-(RC*CL):IF CA-AT<EL(I+1)+1000 THEN MT=1
- 1460 IF CA-AT<EL(I+1) THEN MT=2
- 1470 CD=CD+C(I):R=CT:FU=CF:GOSUB 2810:K(I)=KU:CK=CK+KU:G(I)=G(0):GOTO 1540
- 1480 'climb part of leg
- 1490 DC=TT*G(0):R=TT:FU=CF:GOSUB 2810:K(I)=KU:KC=KU:CK=CK+KU:CD=CD+DC:CT=CT+R:G0=I
- 1500 A4=TA:R=(C(I)-DC)/G(I):FU=F3:GOSUB 2810:K(I)=K(I)+KU:K8(I)=K8(I)-KC:R=R+TT:G(I)=C(I)/R
- 1510 AT=0:GOTO 1540
- 1520 'no climb
- 1530 FU=F3:R=C(I)/G(I):GOSUB 2810:K(I)=KU
- 1540 G(I)=FNS6(G(I))
- 1550 'magnetic heading
- 1560 IF T(I)+180>360 THEN 1580
- 1570 IF Q(I)>T(I) AND Q(I)<T(I)+180 THEN 1590 ELSE 1610
- 1580 IF Q(I)<T(I) AND Q(I)>T(I)-180 THEN 1610
- 1590 E(I)=Y(I)-B:IF B<=Y(I) THEN 1620
- 1600 E(I)=360-E(I):GOTO 1620
- 1610 E(I)=Y(I)+B:IF E(I)>360 THEN E(I)=E(I)-360
- 1620 E(I)=FNS6(E(I))
- 1630 'time enroute
- 1640 R=C(I)/G(I)
- 1650 F(I)=INT(R):F1(I)=FNS6((R-F(I))*60)
- 1660 'ETA
- 1670 R1=R1+R:O3=INT(R1):O4=(R1-O3):L3=INT(L1+O4):L2=INT((L1+O4-L3)*600+0.5)/10
- 1680 J(I)=L2:IF C(I)=0 THEN J(I)=0
- 1690 OC=OC+C(I)
- 1700 NEXT I:PRINT
- 1710 'short flight...max alt?
- 1720 IF N=2 THEN I=1:G0=N:A4=TA:GOSUB 2580:GN=G(N) ELSE GN=G(N-1)
- 1730 AL=CA-EL(N):DS=GN*3.333:DC=N-1:NR=DS/((GN/60)*6076.12):IF OC>D9*3 THEN 1800
- 1740 OC=OC*6076.12:PR=(RC/60)/((G(0)/60)*6076.12)
- 1750 X=((OC*NR)+EL(N)-EL(1))/(PR+NR):Y=(PR*X)+EL(1):IF CA<=Y THEN 1800
- 1760 PRINT BL$;:LOCATE N+6,1:GOSUB 5000:PRINT "Unable to calculate flight profile to"CA"feet."
- 1770 PRINT:PRINT"You can climb to"INT(Y)"feet before begining descent."
- 1780 PRINT"Select new cruise altitude and appropriate TAS & fuel consumption."
- 1790 PRINT:PRINT"Press any key to continue...";:X$=INPUT$(1):GOTO 930
- 1800 'descent profile
- 1810 DP=AL/1000*5:NC=0
- 1820 NC=NC+C(DC):IF DP<NC THEN 1860
- 1830 ND=NC*6076.12:AL%(DC)=(NR*ND)+EL(N):IF AL%(DC)<EL(DC)+1000 THEN DW=1
- 1840 IF AL%(DC)<EL(DC) THEN DW=2
- 1850 DP=DP-C(DC):DC=DC-1:GOTO 1820
- 1860 'final ETA
- 1870 L0=INT(L0+R1+L1):IF L2=60 THEN L0=L0+1:L2=0
- 1880 IF L0<>2 OR L2<>0 THEN IF L0>23 THEN L0=L0-24:GOTO 1880
- 1890 O4=INT(O4*60+0.5)
- 1900 'print
- 1910 CLS::O=0
- 1920 PRINT TAB(22)"IDENT"TAB(36)"DIST"TAB(44)"TC"TAB(51)"MH"TAB(57)"GS";
- 1930 PRINT TAB(63)"ETE"TAB(70)"ETA"TAB(75)"FUEL"
- 1940 PRINT TAB(5)"CHECKPOINT"TAB(29)"FREQ"TAB(36)"nm"TAB(43)"deg"TAB(50)"deg";
- 1950 PRINT TAB(56)"kts"TAB(62)"h:mm"TAB(69)":mm"TAB(75)"gal"
- 1960 PRINT STRING$(78,45)
- 1970 FOR I=1 TO N:PRINT P$(I)TAB(22)I$(I);
- 1980 IF FR(I)=0 THEN 2030
- 1990 IF FR(I)>136 THEN PRINT USING"####";FR(I);:GOTO 2030
- 2000 IF FR(I)*10\1=FR(I)*10/1 THEN PRINT USING"####.#";FR(I);:GOTO 2030
- 2010 IF FR(I)*100\1=FR(I)*100/1 THEN PRINT USING"####.##";FR(I);:GOTO 2030
- 2020 PRINT USING"###.###";FR(I);
- 2030 IF I=N THEN PRINT J1$:GOTO 2150
- 2040 PRINT TAB(34);USING "####.#";C(I);
- 2050 PRINT TAB(42);USING "###.#";T(I);
- 2060 PRINT TAB(49);USING "###.#";E(I);
- 2070 PRINT TAB(56);USING "###";G(I);
- 2080 PRINT TAB(61);USING "##";F(I);
- 2090 PRINT ":";USING "##";F1(I);
- 2100 PRINT TAB(69)":";USING "##";J(I);
- 2110 PRINT TAB(74);USING "##.#";K(I);
- 2120 IF K8(I)<=F3*0.5 THEN PRINT "<<":GOTO 2140
- 2130 IF K8(I)<F3*0.75 THEN PRINT "<" ELSE PRINT
- 2140 O=O+C(I):O1=O1+1:NEXT I
- 2150 PRINT:PRINT"Total dist ="O"nm"TAB(30)"Time Off =";
- 2160 PRINT TAB(55)"Time On ="
- 2170 PRINT "Total time ="O3"hrs:"O4"mins"TAB(30)"Depart at"HR"GMT";
- 2180 PRINT TAB(55)"Final ETA ="INT((L0*100)+L2)"GMT"
- 2190 F=UF-K8(N-1):F=FNS6(F)
- 2200 PRINT "Avg. fuel usage ="F"gal"TAB(30)"Fuel rate ="F3"gal/hr";
- 2210 PRINT TAB(55)"Fuel on board ="UF"gal"
- 2220 X8=INT(ABS(K8(I-1)/F3)):X9=INT((ABS(K8(I-1)/F3)-X8)*60)
- 2230 IF K8(I-1)<=0 THEN K8(I-1)=0:X8=0:X9=0
- 2240 PRINT "Reserve ="FNS6(K8(I-1))"gal ="X8":"X9;TAB(30)"Cruise Alt ="CA;
- 2250 PRINT "ft"TAB(55)"TAS ="TA"("USING"###";CS;
- 2260 PRINT " climb)"
- 2270 PRINT "Fuel to climb ="CK"gal"TAB(30)"Dist to climb ="FNS6(CD)"nm";
- 2280 PRINT TAB(55)"Time to climb ="INT(CT*60)"min"
- 2290 PRINT "Cost "CHR$(64)USING"$$##.##";PH;
- 2300 PRINT "/hr = "USING"$$##.##";PH*R1
- 2310 IF K8(I-1)<>0 THEN 2330
- 2320 PRINT BL$;" INSUFFICIENT FUEL TO COMPLETE TRIP! ":GOTO 2350
- 2330 IF K8(I-1)>=F3*0.5 THEN 2350
- 2340 PRINT BL$;" FUEL RESERVES LESS THAN VFR MINIMUMS! "
- 2350 LOCATE N+12,1:GOSUB 5000:PRINT "Hard copy printout? (Y or N) <Y> ";:X$=INPUT$(1)
- 2360 IF X$=CHR$(13) THEN X$="Y"
- 2370 GOSUB 2830:IF X$="Y" THEN HC=1
- 2380 IF X$="N" THEN 2410
- 2390 IF X$<>"Y" THEN PRINT BL$;:GOTO 2350
- 2400 O9=O:GOSUB 2870
- 2410 LOCATE N+12,1:GOSUB 5000:PRINT "Alternate winds aloft, cruise altitude? (Y or N)";
- 2420 PRINT" <Y> ";:X$=INPUT$(1):PRINT L$:IF X$=CHR$(13) THEN X$="Y"
- 2430 GOSUB 2830:IF X$="Y" THEN O9=0:R1=0:LOCATE N+5,1:GOSUB 5000:GOTO 710
- 2440 IF X$<>"N" THEN PRINT BL$;:GOTO 2410
- 2450 CLOSE:IF HC=1 THEN RUN PROGDISK$+"RNAVREF" ELSE KILL DATADISK$+"FLIGHT.SEQ":RUN PROGDISK$+"NAVMENU"
- 2460 'error trap
- 2470 LOCATE N+6,1:PRINT BL$"Distance "P$(I)" to "P$(I+1)" excessive.";
- 2480 PRINT"Press any key to continue...":X$=INPUT$(1):GOTO 210
- 2490 LOCATE N+6,1:PRINT BL$"Distance "P$(I)" to "P$(I+1)" excessive."
- 2500 PRINT "Possible course errors due to rhumb line."
- 2510 PRINT "Press any key to continue...":X$=INPUT$(1):GOTO 2450
- 2520 IF NOT(ERR=53 AND ERL=170) THEN 2550
- 2530 PRINT"No data on file for "F$:PRINT"Re-enter N-number or `I' to input";
- 2540 PRINT" data":RESUME 130
- 2550 IF ERR=53 AND ERL=210 THEN PRINT BL$"No flight on file.":RUN PROGDISK$+"NAVMENU"
- 2560 IF ERR=62 AND ERL=220 THEN N=J-1:J=21:RESUME 240
- 2565 IF ERR=53 AND ERL=34 THEN CLOSE:RESUME 40
- 2570 ON ERROR GOTO 0
- 2580 'avg wind & grndspd
- 2590 IF S(I)=0 AND S(I+1)=0 THEN R2=0:Q(I)=T(I):GOTO 2750
- 2600 IF W(I)<W(I+1) THEN W3=W(I) ELSE W3=W(I+1)
- 2610 IF W(I)>W(I+1) THEN W4=W(I) ELSE W4=W(I+1)
- 2620 S3=S(I+1):S4=S(I)
- 2630 IF W3=W(I) THEN S3=S(I):S4=S(I+1)
- 2640 IF S3<>0 AND S4=0 THEN R2=S3/2:Q(I)=W3:GOTO 2750
- 2650 IF S3=0 AND S4<>0 THEN R2=S4/2:Q(I)=W4:GOTO 2750
- 2660 X=W4-W3:S1=S3*S3:S2=S4*S4
- 2670 IF X=0 THEN R2=(S3+S4)/2:Q(I)=W3:GOTO 2750
- 2680 IF X=180 THEN R2=0:Q(I)=T(I):GOTO 2750
- 2690 IF X>180 THEN X=360-X
- 2700 R=SQR(S1+S2-2*S3*S4*COS(X/U)):Q=(S2+R*R-S1)/(2*S4*R)
- 2710 R2=SQR((S2+(R/2)*(R/2))-2*S4*(R/2)*Q):X1=(S2+R2*R2-(R/2)*(R/2))/(2*S4*R2)
- 2720 X1=ATN(SQR(1-X1*X1)/X1)*U:IF X>180 THEN Q(I)=W4+X1:GOTO 2740
- 2730 Q(I)=W4-X1:GOTO 2750
- 2740 IF Q(I)>360 THEN Q(I)=Q(I)-360
- 2750 W=ABS(T(I)-Q(I)):IF W<=180 THEN 2770
- 2760 IF Q(I)<T(I) THEN W=360-T(I)+Q(I) ELSE W=360-Q(I)+T(I)
- 2770 B=(R2*FNS5(W))/A4:IF B>=1 THEN B=90 ELSE B=FNS7(B)
- 2780 G=180-(W+B):M=FNS5(W):IF M=0 THEN R=A4+R2:GOTO 2800
- 2790 T=FNS5(G):IF T=0 THEN R=A4-R2 ELSE R=(A4*T)/M
- 2800 G(G0)=R:RETURN
- 2810 'fuel used
- 2820 KU=FNS6(R*FU):K8(I)=K8(I-1)-KU:RETURN
- 2830 'map lc
- 2840 FOR L=1 TO LEN(X$):U$=MID$(X$,L,1)
- 2850 IF ASC(U$)>96 AND ASC(U$)<123 THEN MID$(X$,L,1)=CHR$(ASC(U$)-32)
- 2860 NEXT L:RETURN
- 2870 O=0:LPRINT TAB(31)" NAVPROGseven"
- 2875 LPRINT F$" "AT$TAB(62)LEFT$(TIME$,5)" "DATE$
- 2880 LPRINT STRING$(78,61)
- 2890 LPRINT TAB(22)"IDENT"TAB(36)"DIST"TAB(42)"MC/TC"TAB(50)"MH"TAB(56)"GS";
- 2900 LPRINT TAB(62)"ETE"TAB(69)"ETA"TAB(75)"FUEL"
- 2910 LPRINT TAB(5)"CHECKPOINT"TAB(22)"ID/fac"TAB(29)"FREQ"TAB(34)"rem/leg";
- 2920 LPRINT TAB(43)"deg"TAB(50)"deg"TAB(56)"kts"TAB(62)"h:mm"TAB(69)":mm";
- 2930 LPRINT TAB(75)"gal":LPRINT STRING$(78,45):FOR I=1 TO N
- 2940 LPRINT P$(I)TAB(22)I$(I);
- 2950 IF FR(I)=0 THEN 3000
- 2960 IF FR(I)>136 THEN LPRINT USING"####";FR(I);:GOTO 3000
- 2970 IF FR(I)*10\1=FR(I)*10/1 THEN LPRINT USING"####.#";FR(I);:GOTO 3000
- 2980 IF FR(I)*100\1=FR(I)*100/1 THEN LPRINT USING"####.##";FR(I);:GOTO 3000
- 2990 LPRINT USING"###.###";FR(I);
- 3000 IF I=N THEN 3170
- 3010 LPRINT TAB(34)USING "####.#";O9;
- 3020 LPRINT TAB(42)USING"###.#";Y(I);
- 3030 LPRINT TAB(49)USING "###.#";E(I);
- 3040 LPRINT TAB(56)USING "###";G(I);
- 3050 LPRINT TAB(73)USING "###.#";K8(I-1);
- 3060 IF K8(I)<=F3*0.5 THEN LPRINT "<<":GOTO 3080
- 3070 IF K8(I)<F3*0.75 THEN LPRINT "<" ELSE LPRINT
- 3080 LPRINT I;:IF I=1 THEN LPRINT TAB(5)"Elev:"EL(1);:GOTO 3100
- 3090 IF AL%(I)<>AL%(I-1) THEN LPRINT TAB(5)"Alt:"AL%(I);
- 3100 LPRINT TAB(22)FC$(I)TAB(34)USING"####.#";C(I);
- 3110 LPRINT TAB(42)USING"###.#";T(I);
- 3120 LPRINT TAB(61)USING "##";F(I);
- 3130 LPRINT ":"USING "##";F1(I);
- 3140 LPRINT TAB(69)":"USING "##";J(I);
- 3150 LPRINT TAB(74)USING "##.#";K(I)
- 3160 O=O+C(I):O1=O1+1:O9=O9-C(I):IF I<>N THEN 3190
- 3170 LPRINT TAB(34)"CLOSE FLIGHT PLAN WITH "FS$" FSS"
- 3180 LPRINT TAB(5)"Elev:"EL(N)TAB(21)FC$(N):LPRINT STRING$(78,61):GOTO 3200
- 3190 LPRINT
- 3200 NEXT I:I=N
- 3210 LPRINT:LPRINT"Total dist ="O"nm"TAB(30)"Time Off ="TAB(55)"Time On ="
- 3220 LPRINT:LPRINT "Total time ="O3"hrs:"O4"mins"TAB(30)"Depart at"HR"GMT";
- 3230 LPRINT TAB(55)"Final ETA ="INT((L0*100)+L2)"GMT":LPRINT
- 3240 F=UF-K8(N-1):F=FNS6(F)
- 3250 LPRINT "Avg. fuel usage ="F"gal"TAB(30)"Fuel rate ="F3"gal/hr";
- 3260 LPRINT TAB(55)"Fuel on board ="UF"gal"
- 3270 LPRINT TAB(40)"("FNS6(CF)"climb)"
- 3280 X8=INT(ABS(K8(I-1)/F3)):X9=INT((ABS(K8(I-1)/F3)-X8)*60)
- 3290 IF K8(I-1)<=0 THEN K8(I-1)=0:X8=0:X9=0
- 3300 LPRINT "Reserve ="FNS6(K8(I-1))"gal ="X8":"X9;TAB(30)"Cruise Alt ="CA;
- 3310 LPRINT "ft"TAB(55)"TAS ="TA"("USING"###";CS;
- 3320 LPRINT " climb)"TAB(55)"CAS =";
- 3330 LPRINT INT(TA-(1.75*(CA/1000)))"("INT(CS-(1.75*(CA/2000)))"climb)"
- 3340 LPRINT "Fuel to climb ="CK"gal"TAB(30)"Dist to climb ="FNS6(CD)"nm";
- 3350 LPRINT TAB(55)"Time to climb ="INT(CT*60)"min":LPRINT
- 3360 LPRINT "Cost "CHR$(64)USING"$$##.##";PH;
- 3370 LPRINT "/hr = "USING"$$##.##";PH*R1
- 3380 IF MT<>2 THEN 3400
- 3390 LPRINT "WARNING! STANDARD CLIMB WILL NOT CLEAR TERRAIN DURING CLIMBOUT"
- 3400 IF MT<>1 THEN 3420
- 3410 LPRINT "CAUTION: MARGINAL TERRAIN CLEARANCE DURING CLIMBOUT"
- 3420 IF K8(I-1)<>0 THEN 3440
- 3430 LPRINT BL$PG$" INSUFFICIENT FUEL TO COMPLETE TRIP! "QG$:GOTO 3460
- 3440 IF K8(I-1)>=F3*0.5 THEN 3460
- 3450 LPRINT BL$PG$" FUEL RESERVES LESS THAN VFR MINIMUMS! "QG$
- 3460 IF DW<>2 THEN 3480
- 3470 LPRINT "WARNING! NOMINAL DESCENT WILL NOT CLEAR TERRAIN!":GOTO 3520
- 3480 LPRINT:LPRINT"Nominal descent: "INT(DS)"ft/min, ";
- 3490 LPRINT INT(DP)"nm from "I$(DC+1)" "P$(DC+1)
- 3500 IF DW<>1 THEN 3520
- 3510 LPRINT "WARNING! MARGINAL TERRAIN CLEARANCE DURING DESCENT/APPROACH."
- 3520 LPRINT "Check charts for minimum terrain and obstruction ";
- 3530 LPRINT "clearance altitudes."
- 3540 LPRINT:LPRINT " ID LAT - LONG --- WINDS ---"
- 3550 FOR J=1 TO N:LPRINT I$(J),
- 3560 IF W(J)>180 THEN W(J)=W(J)-180 ELSE W(J)=W(J)+180
- 3565 LPRINT USING "###.##";P1(J);
- 3566 LPRINT USING " ###.##";P2(J);
- 3570 IF S(J)>0 THEN LPRINT " "W(J)"degrees at"S(J)"knots." ELSE LPRINT
- 3580 NEXT J
- 3590 LPRINT CHR$(12):RETURN
- 4000 ' install erase-to-end-of-screen subroutine
- 4010 DEF SEG=&H1700
- 4020 FOR ADDR% = 0 TO 19
- 4030 READ CODE%
- 4040 POKE ADDR%,CODE%
- 4050 NEXT
- 4060 CLREOS% = 0
- 4070 RETURN
- 4080 DATA &h55,&h8b,&hec,&h8b,&h76,&h06,&h8b,&h0c
- 4090 DATA &hb8,&h20,&h0a,&hb7,&h00
- 4100 DATA &hcd,&h10
- 4110 DATA &h5d,&hca,&h02,&h00,&h00
- 5000 ' erase to end-of-screen
- 5010 CLINE = CSRLIN 'remember cursor position
- 5020 CROW = POS(0)
- 5030 NUMCHR% = 1919 - ((CLINE - 1)*80 +CROW) 'num chars to write
- 5040 CALL CLREOS%(NUMCHR%) 'erase to end of screen
- 5050 LOCATE CLINE,CROW,1 'restore cursor
- 5060 RETURN
-