home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / navprog7.lbr / NAVPROG7.BZS / NAVPROG7.BAS
Encoding:
BASIC Source File  |  1987-02-15  |  17.6 KB  |  365 lines

  1. 10 ' NAVPROG7.BAS       (c) 1982 Alan Bose      22-Jan-82   Rev 8/21/84
  2. 20 ' CP/M modifications (c) 1982 by Glen Hassebrock, Jr.
  3. 30 CLEAR:ON ERROR GOTO 2520:WIDTH 255:DEFINT I-J
  4. 40 BL$=CHR$(7):E$=CHR$(27):ER$=E$+"E":PG$=E$+"p":QG$=E$+"q":G$=E$+"F"
  5. 50 NG$=E$+"G":Y$=E$+"Y":L$=E$+"l":J$=E$+"j":K$=E$+"k":J1$=E$+"J":U=57.29577950000004#
  6. 60 DEF FNC$(C1,C2)=Y$+CHR$(C1+31)+CHR$(C2+31)
  7. 70 DEF FNS5(X)=SIN(X/U):DEF FNS6(X)=INT(X*10+.5)/10
  8. 80 DEF FNS7(X)=ATN(X/SQR(1-X*X))*U
  9. 90 DEF FNS8(X)=SIN(ABS(A/2)/U)*COS(X/U)/SIN(Q2/2)
  10. 100 PRINT ER$E$"x1"FNC$(1,34)"NAVPROGseven"FNC$(25,1)ER$E$"H"
  11. 110 OPEN "R",1,"B:AIRPORTS.RND",255
  12. 120 PRINT FNC$(25,1)ER$
  13. 130 PRINT FNC$(5,1)L$"Aircraft identification?  <MENU>  N"J$;
  14. 140 PRINT STRING$(7,95)K$;:LINE INPUT X$:PRINT J1$:IF X$="" THEN RUN"MENU"
  15. 150 GOSUB 2830:IF X$="I" THEN CLOSE:RUN"AIRCRAFT"
  16. 160 F$="N"+X$
  17. 170 OPEN"I",2,"B:"+F$:LINE INPUT#2,AT$:INPUT#2,RU:INPUT#2,T9:INPUT#2,G9
  18. 180 INPUT#2,D9:INPUT#2,NA:INPUT#2,NS:INPUT#2,NF:INPUT#2,NB:INPUT#2,PH:CLOSE#2
  19. 190 RC=(NA/T9)*60:CF=(G9/T9)*60:CS=(D9/T9)*60
  20. 200 PRINT FNC$(5,1)J1$FNC$(24,40-((LEN(AT$)+LEN(F$))/2))F$" "AT$
  21. 210 OPEN"I",2,"B:FLIGHT.SEQ"
  22. 220 FOR J=1 TO 10:INPUT#2,ID$(J):ID$(J)=ID$(J)+SPACE$(5-LEN(ID$(J)))
  23. 230 INPUT #2,PI(J):N=J
  24. 240 NEXT J:CLOSE#2
  25. 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)
  26. 260 DIM F(N),F1(N),J(N),K(N),I$(N),FR(N),K8(N),FC$(N),EL(N),AL%(N)
  27. 270 'data box
  28. 280 PRINT FNC$(2,1)J1$:PRINT G$FNC$(3,6)"f";
  29. 290 FOR J=7 TO 74:PRINT"a";:NEXT J:PRINT"c":PRINT FNC$(4+N,6)"e";
  30. 300 FOR J=7 TO 74:PRINT"a";:NEXT J:PRINT"d"
  31. 310 PRINT FNC$(3,12)"s"FNC$(3,15)"s"FNC$(3,23)"s"FNC$(3,44)"s";
  32. 320 PRINT FNC$(3,52)"s"FNC$(3,61)"s"FNC$(3,69)"s"
  33. 330 PRINT FNC$(4+N,12)"u"FNC$(4+N,15)"u"FNC$(4+N,23)"u"FNC$(4+N,44)"u";
  34. 340 PRINT FNC$(4+N,52)"u"FNC$(4+N,61)"u"FNC$(4+N,69)"u"
  35. 350 FOR I=1 TO N
  36. 360 PRINT FNC$(3+I,6)"`"FNC$(3+I,12)"`"FNC$(3+I,15)"`"FNC$(3+I,23)"`";
  37. 370 PRINT FNC$(3+I,44)"`"FNC$(3+I,52)"`"FNC$(3+I,61)"`"FNC$(3+I,69)"`";
  38. 380 PRINT FNC$(3+I,75)"`":NEXT I
  39. 390 PRINT NG$FNC$(2,7)"Ident Fac Freq"SPC(11)"Name"SPC(11)"Lat"SPC(5)"Long";
  40. 400 PRINT SPC(5)"Var   Elev"
  41. 410 FOR I=1 TO N:REC=(PI(I)\5)+1:SS=PI(I) MOD 5:GET#1,REC:RO=I+3:GOSUB 430
  42. 420 NEXT I:ERASE ID$,PI:GOTO 640
  43. 430 'decode & display
  44. 440 FIELD #1,SS*50 AS DU$,5 AS ID$,2 AS FAC$,4 AS FR$,20 AS NM$,2 AS D1$,
  45.  
  46. 4 AS M1$,2 AS D$,4 AS M$,4 AS V$,1 AS V1$,2 AS EL$
  47. 450 F5=CVS(FR$):D6=CVI(D1$):M6=CVS(M1$)
  48. 460 D5=CVI(D$):M5=CVS(M$):V5=CVS(V$):E5=CVI(EL$):IF ID$=ID$(I) THEN 500
  49. 470 PRINT BL$FNC$(N+6,1)"Aborted.  Checkpoint "ID$(I)" missing or moved"
  50. 480 PRINT"Delete this route, re-enter checkpoint if missing, re-enter route."
  51. 490 PRINT:PRINT"Press any key to continue...";:X$=INPUT$(1):GOTO 2450
  52. 500 I$(I)=ID$:FC$(I)=FAC$:FR(I)=F5:P$(I)=NM$:M1=M6/60:P2(I)=D6+M1:M=M5/60
  53. 510 P1(I)=D5+M:V(I)=V5:V$(I)=V1$:EL(I)=E5:IF V$(I)="E" THEN V(I)=-V(I)
  54. 520 PRINT FNC$(RO,1)I;FNC$(RO,7)ID$FNC$(RO,13)FAC$;FNC$(RO,16);
  55. 530 IF F5=0 THEN PRINT SPC(7);:GOTO 580
  56. 540 IF F5>136 THEN PRINT USING"####";F5;:GOTO 580
  57. 550 IF F5*10\1=F5*10/1 THEN PRINT USING"####.#";F5;:GOTO 580
  58. 560 IF F5*100\1=F5*100/1 THEN PRINT USING"####.##";F5;:GOTO 580
  59. 570 PRINT USING"###.###";F5;
  60. 580 PRINT FNC$(RO,24)NM$FNC$(RO,45);USING"##";D6;
  61. 590 PRINT FNC$(RO,48);USING"##.#";M6;
  62. 600 PRINT FNC$(RO,53);USING"###";D5;
  63. 610 PRINT FNC$(RO,57);USING"##.#";ABS(M5);
  64. 620 PRINT FNC$(RO,62);USING"###.#";V5;
  65. 630 PRINT FNC$(RO,68)V1$FNC$(RO,70)USING"#####";E5:RETURN
  66. 640 PRINT FNC$(N+6,1)J1$"Route of flight correct? (Y or N)  <Y>  ";
  67. 650 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
  68. 660 GOSUB 2830:IF X$<>"N" AND X$<>"Y" THEN PRINT BL$:GOTO 640
  69. 670 IF X$="N" THEN KILL"B:FLIGHT.SEQ":RUN"MENU"
  70. 680 R1=0:CLOSE
  71. 690 PRINT FNC$(N+6,1)J1$"Flight Service Station you'll close with?  "J$;
  72. 700 PRINT STRING$(17,95)K$;:LINE INPUT X$:IF X$<>"" THEN GOSUB 2830:FS$=X$
  73. 710 FOR I=1 TO N
  74. 720 PRINT FNC$(N+6,1)J1$;
  75. 730 IF I=1 OR I=N THEN PRINT"Enter SURFACE wind at ";:GOTO 750
  76. 740 PRINT"Enter winds ALOFT at ";
  77. 750 PRINT I$(I)" "P$(I)"  (deg,kts)  ";:INPUT W(I),S(I):IF S(I)=0 THEN 830
  78. 760 IF W(I)>360 THEN PRINT BL$:PRINT"360 degrees maximum":GOTO 730
  79. 770 IF S(I)<50 THEN 810 ELSE PRINT BL$:PRINT"Wind > 50 knots?  (Y or N)  ";
  80. 780 X$=INPUT$(1):IF X$=CHR$(13) THEN X$="Y":GOSUB 2830
  81. 790 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$;:GOTO 770
  82. 800 IF X$="N" THEN 720
  83. 810 IF W(I)<=180 THEN W(I)=W(I)+180:GOTO 830
  84. 820 W(I)=W(I)-180
  85. 830 NEXT I
  86. 840 PRINT FNC$(N+6,1)J1$"Enter usable fuel on board  <"NB">  "J$;
  87. 850 PRINT STRING$(3,95)" gal"K$;
  88. 860 LINE INPUT X$:UF=VAL(X$):IF X$="" THEN UF=NB
  89. 870 IF UF=0 THEN PRINT BL$;:GOTO 840
  90. 880 NB=UF:K8(0)=UF-RU:F=K8(0)
  91. 890 PRINT FNC$(N+6,1)J1$;:INPUT"Enter ZULU departure time  (hhmm)";HR
  92. 900 IF HR>2400 THEN PRINT BL$:PRINT"2400 hours maximum":GOTO 890
  93. 910 L0=INT(HR/100):L1=(HR/100-L0)*100/60
  94. 920 IF L1>1 THEN PRINT BL$:PRINT"60 minutes/hour":GOTO 890
  95. 930 CD=0:CK=0:CT=0:MT=0:OC=0:PRINT FNC$(N+6,1)J1$"Calculating..."
  96. 940 FOR I=1 TO N-1:PRINT E$"x4"FNC$(I+4,2);
  97. 950 'distance
  98. 960 A=P1(I)-P1(I+1):B1=P2(I)-P2(I+1):P#=COS(P2(I)/U)*COS(P2(I+1)/U)
  99. 970 Q=P#*COS(ABS(A)/U)+COS(ABS(B1)/U)-P#:IF Q<=0 THEN PRINT BL$:GOTO 2470
  100. 980 Q2=ATN(SQR(1-Q*Q)/Q):Q=Q2*U*60
  101. 990 C(I)=FNS6(Q):IF C(I)>900 AND ABS(A)>30 THEN PRINT BL$:GOTO 2490
  102. 1000 IF C(I)=0 THEN T(I)=0:Y(I)=0:E(I)=0:G(I)=0:R=0:GOTO 1650
  103. 1010 'true course
  104. 1020 S=FNS8((P2(I)+P2(I+1))/2):IF S>=1 THEN S=90-S ELSE S=FNS7(S)
  105. 1030 IF A>0 AND B1=0 THEN T=90:GOTO 1080
  106. 1040 IF A<0 AND B1=0 THEN T=270:GOTO 1080
  107. 1050 IF A>0 AND B1<0 THEN T=S:GOTO 1080
  108. 1060 IF A>=0 AND B1>0 THEN T=180-S:GOTO 1080
  109. 1070 IF A<0 AND B1>0 THEN T=180+S ELSE T=360-S
  110. 1080 T(I)=FNS6(T)
  111. 1090 'magnetic course
  112. 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)
  113. 1110 IF Y(I)>360 THEN Y(I)=Y(I)-360
  114. 1120 IF I>1 THEN 1380
  115. 1130 PRINT E$"y4"FNC$(N+6,1)J1$"Initial magnetic course is"Y(I)"degrees."
  116. 1140 PRINT "Enter cruise altitude  ";
  117. 1150 IF Y(I)<180 THEN PRINT"(Odd thousands)  "; ELSE PRINT"(Even thousands)  ";
  118. 1160 PRINT "<"NA">  "J$STRING$(5,95)K$;
  119. 1170 LINE INPUT X$:CA=VAL(X$):IF X$="" THEN CA=NA
  120. 1180 FOR J=1 TO N:IF EL(J)+1000<=CA THEN 1220
  121. 1190 PRINT BL$FNC$(N+6,1)J1$"Low altitude...less than 1000 ft terrain";
  122. 1200 PRINT " clearance at "P$(J):PRINT TAB(55)"Elev:"EL(J)
  123. 1210 PRINT "Press any key to continue...";:X$=INPUT$(1):GOTO 1130
  124. 1220 NEXT J:NA=CA:PRINT FNC$(N+6,1)J1$;
  125. 1230 PRINT"Enter cruise TAS  <"NS">  "J$STRING$(3,95)" kts"K$;
  126. 1240 LINE INPUT X$:TA=VAL(X$):IF X$="" THEN TA=NS
  127. 1250 IF TA>30 AND TA<250 THEN 1300
  128. 1260 PRINT BL$:PRINT"Is"TA"knots the correct TAS?  (Y or N)  <Y>  ";
  129. 1270 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
  130. 1280 GOSUB 2830
  131. 1290 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$:GOTO 1260 ELSE IF X$="N" THEN 1230
  132. 1300 NS=TA:PRINT FNC$(N+6,1)J1$"Enter cruise fuel consumption  <"NF">  "J$;
  133. 1310 PRINT STRING$(4,95)" gal"K$;:LINE INPUT X$:F3=VAL(X$):IF X$="" THEN F3=NF
  134. 1320 IF F3>3 AND F3<50 THEN 1370
  135. 1330 PRINT BL$:PRINT"Is"F3"gal/hr the correct fuel rate?  (Y or N)  <Y>  ";
  136. 1340 X$=INPUT$(1):PRINT X$:IF X$=CHR$(13) THEN X$="Y"
  137. 1350 GOSUB 2830
  138. 1360 IF X$<>"Y" AND X$<>"N" THEN PRINT BL$:GOTO 1330 ELSE IF X$="N" THEN 1300
  139. 1370 NF=F3:PRINT FNC$(N+6,1)J1$"Calculating..."
  140. 1380 'cruise grndspd
  141. 1390 G0=I:A4=TA:GOSUB 2580
  142. 1400 'climb?..climb grndspd
  143. 1410 IF I=1 THEN AT=CA-EL(1)
  144. 1420 AL%(I)=CA-AT:IF AT<=0 THEN 1530
  145. 1430 G0=0:A4=CS:GOSUB 2580:TT=AT/RC:IF TT<C(I)/G(0) THEN 1480
  146. 1440 'climb entire leg
  147. 1450 CL=C(I)/G(0):CT=CT+CL:AT=AT-(RC*CL):IF CA-AT<EL(I+1)+1000 THEN MT=1
  148. 1460 IF CA-AT<EL(I+1) THEN MT=2
  149. 1470 CD=CD+C(I):R=CT:FU=CF:GOSUB 2810:K(I)=KU:CK=CK+KU:G(I)=G(0):GOTO 1540
  150. 1480 'climb part of leg
  151. 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
  152. 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
  153. 1510 AT=0:GOTO 1540
  154. 1520 'no climb
  155. 1530 FU=F3:R=C(I)/G(I):GOSUB 2810:K(I)=KU
  156. 1540 G(I)=FNS6(G(I))
  157. 1550 'magnetic heading
  158. 1560 IF T(I)+180>360 THEN 1580
  159. 1570 IF Q(I)>T(I) AND Q(I)<T(I)+180 THEN 1590 ELSE 1610
  160. 1580 IF Q(I)<T(I) AND Q(I)>T(I)-180 THEN 1610
  161. 1590 E(I)=Y(I)-B:IF B<=Y(I) THEN 1620
  162. 1600 E(I)=360-E(I):GOTO 1620
  163. 1610 E(I)=Y(I)+B:IF E(I)>360 THEN E(I)=E(I)-360
  164. 1620 E(I)=FNS6(E(I))
  165. 1630 'time enroute
  166. 1640 R=C(I)/G(I)
  167. 1650 F(I)=INT(R):F1(I)=FNS6((R-F(I))*60)
  168. 1660 'ETA
  169. 1670 R1=R1+R:O3=INT(R1):O4=(R1-O3):L3=INT(L1+O4):L2=INT((L1+O4-L3)*600+.5)/10
  170. 1680 J(I)=L2:IF C(I)=0 THEN J(I)=0
  171. 1690 OC=OC+C(I)
  172. 1700 NEXT I:PRINT E$"y4"
  173. 1710 'short flight...max alt?
  174. 1720 IF N=2 THEN I=1:G0=N:A4=TA:GOSUB 2580:GN=G(N) ELSE GN=G(N-1)
  175. 1730 AL=CA-EL(N):DS=GN*3.333:DC=N-1:NR=DS/((GN/60)*6076.12):IF OC>D9*3 THEN 1800
  176. 1740 OC=OC*6076.12:PR=(RC/60)/((G(0)/60)*6076.12)
  177. 1750 X=((OC*NR)+EL(N)-EL(1))/(PR+NR):Y=(PR*X)+EL(1):IF CA<=Y THEN 1800
  178. 1760 PRINT BL$FNC$(N+6,1)"Unable to calculate flight profile to"CA"feet."
  179. 1770 PRINT:PRINT"You can climb to"INT(Y)"feet before begining descent."
  180. 1780 PRINT"Select new cruise altitude and appropriate TAS & fuel consumption."
  181. 1790 PRINT:PRINT"Press any key to continue...";:X$=INPUT$(1):GOTO 930
  182. 1800 'descent profile
  183. 1810 DP=AL/1000*5:NC=0
  184. 1820 NC=NC+C(DC):IF DP<NC THEN 1860
  185. 1830 ND=NC*6076.12:AL%(DC)=(NR*ND)+EL(N):IF AL%(DC)<EL(DC)+1000 THEN DW=1
  186. 1840 IF AL%(DC)<EL(DC) THEN DW=2
  187. 1850 DP=DP-C(DC):DC=DC-1:GOTO 1820
  188. 1860 'final ETA
  189. 1870 L0=INT(L0+R1+L1):IF L2=60 THEN L0=L0+1:L2=0
  190. 1880 IF L0<>2 OR L2<>0 THEN IF L0>23 THEN L0=L0-24:GOTO 1880
  191. 1890 O4=INT(O4*60+.5)
  192. 1900 'print
  193. 1910 PRINT ER$;:O=0:GOSUB 3610
  194. 1920 PRINT TAB(22)"IDENT"TAB(36)"DIST"TAB(44)"TC"TAB(51)"MH"TAB(57)"GS";
  195. 1930 PRINT TAB(63)"ETE"TAB(70)"ETA"TAB(75)"FUEL"
  196. 1940 PRINT TAB(5)"CHECKPOINT"TAB(29)"FREQ"TAB(36)"nm"TAB(43)"deg"TAB(50)"deg";
  197. 1950 PRINT TAB(56)"kts"TAB(62)"h:mm"TAB(69)":mm"TAB(75)"gal"
  198. 1960 PRINT STRING$(78,45)
  199. 1970 FOR I=1 TO N:PRINT P$(I)TAB(22)I$(I);
  200. 1980 IF FR(I)=0 THEN 2030
  201. 1990 IF FR(I)>136 THEN PRINT USING"####";FR(I);:GOTO 2030
  202. 2000 IF FR(I)*10\1=FR(I)*10/1 THEN PRINT USING"####.#";FR(I);:GOTO 2030
  203. 2010 IF FR(I)*100\1=FR(I)*100/1 THEN PRINT USING"####.##";FR(I);:GOTO 2030
  204. 2020 PRINT USING"###.###";FR(I);
  205. 2030 IF I=N THEN PRINT J1$:GOTO 2150
  206. 2040 PRINT TAB(34);USING "####.#";C(I);
  207. 2050 PRINT TAB(42);USING "###.#";T(I);
  208. 2060 PRINT TAB(49);USING "###.#";E(I);
  209. 2070 PRINT TAB(56);USING "###";G(I);
  210. 2080 PRINT TAB(61);USING "##";F(I);
  211. 2090 PRINT ":";USING "##";F1(I);
  212. 2100 PRINT TAB(69)":";USING "##";J(I);
  213. 2110 PRINT TAB(74);USING "##.#";K(I);
  214. 2120 IF K8(I)<=F3*.5 THEN PRINT "<<":GOTO 2140
  215. 2130 IF K8(I)<F3*.75 THEN PRINT "<" ELSE PRINT
  216. 2140 O=O+C(I):O1=O1+1:NEXT I
  217. 2150 PRINT:PRINT"Total dist ="O"nm"TAB(30)"Time Off =";
  218. 2160 PRINT TAB(55)"Time On ="
  219. 2170 PRINT "Total time ="O3"hrs:"O4"mins"TAB(30)"Depart at"HR"GMT";
  220. 2180 PRINT TAB(55)"Final ETA ="INT((L0*100)+L2)"GMT"
  221. 2190 F=UF-K8(N-1):F=FNS6(F)
  222. 2200 PRINT "Avg. fuel usage ="F"gal"TAB(30)"Fuel rate ="F3"gal/hr";
  223. 2210 PRINT TAB(55)"Fuel on board ="UF"gal"
  224. 2220 X8=INT(ABS(K8(I-1)/F3)):X9=INT((ABS(K8(I-1)/F3)-X8)*60)
  225. 2230 IF K8(I-1)<=0 THEN K8(I-1)=0:X8=0:X9=0
  226. 2240 PRINT "Reserve ="FNS6(K8(I-1))"gal ="X8":"X9;TAB(30)"Cruise Alt ="CA;
  227. 2250 PRINT "ft"TAB(55)"TAS ="TA"("USING"###";CS;
  228. 2260 PRINT " climb)"
  229. 2270 PRINT "Fuel to climb ="CK"gal"TAB(30)"Dist to climb ="FNS6(CD)"nm";
  230. 2280 PRINT TAB(55)"Time to climb ="INT(CT*60)"min"
  231. 2290 PRINT "Cost "CHR$(64)USING"$$##.##";PH;
  232. 2300 PRINT "/hr = "USING"$$##.##";PH*R1
  233. 2310 IF K8(I-1)<>0 THEN 2330
  234. 2320 PRINT BL$PG$" INSUFFICIENT FUEL TO COMPLETE TRIP! "QG$:GOTO 2350
  235. 2330 IF K8(I-1)>=F3*.5 THEN 2350
  236. 2340 PRINT BL$PG$" FUEL RESERVES LESS THAN VFR MINIMUMS! "QG$
  237. 2350 PRINT FNC$(N+12,1)J1$"Hard copy printout? (Y or N)  <Y>  ";:X$=INPUT$(1)
  238. 2360 PRINT L$;:IF X$=CHR$(13) THEN X$="Y"
  239. 2370 GOSUB 2830:IF X$="Y" THEN HC=1
  240. 2380 IF X$="N" THEN 2410
  241. 2390 IF X$<>"Y" THEN PRINT BL$;:GOTO 2350
  242. 2400 O9=O:GOSUB 2870
  243. 2410 PRINT FNC$(N+12,1)J1$"Alternate winds aloft, cruise altitude? (Y or N)";
  244. 2420 PRINT"  <Y>  ";:X$=INPUT$(1):PRINT L$:IF X$=CHR$(13) THEN X$="Y"
  245. 2430 GOSUB 2830:IF X$="Y" THEN O9=0:R1=0:PRINT FNC$(N+5,1)J1$:GOTO 710
  246. 2440 IF X$<>"N" THEN PRINT BL$;:GOTO 2410
  247. 2450 CLOSE:IF HC=1 THEN RUN"RNAVREF" ELSE KILL"B:FLIGHT.SEQ":RUN"MENU"
  248. 2460 'error trap
  249. 2470 PRINT FNC$(N+6,1)E$"y4"BL$"Distance "P$(I)" to "P$(I+1)" excessive.";
  250. 2480 PRINT"Press any key to continue...":X$=INPUT$(1):GOTO 200
  251. 2490 PRINT FNC$(N+6,1)E$"y4"BL$"Distance "P$(I)" to "P$(I+1)" excessive."
  252. 2500 PRINT "Possible course errors due to rhumb line."
  253. 2510 PRINT "Press any key to continue...":X$=INPUT$(1):GOTO 2450
  254. 2520 IF NOT(ERR=53 AND ERL=170) THEN 2550
  255. 2530 PRINT"No data on file for "F$:PRINT"Re-enter N-number or `I' to input";
  256. 2540 PRINT" data":RESUME 130
  257. 2550 IF ERR=53 AND ERL=210 THEN PRINT BL$"No flight on file.":RUN"MENU"
  258. 2560 IF ERR=62 AND ERL=220 THEN N=J-1:J=11:RESUME 240
  259. 2570 ON ERROR GOTO 0
  260. 2580 'avg wind & grndspd
  261. 2590 IF S(I)=0 AND S(I+1)=0 THEN R2=0:Q(I)=T(I):GOTO 2750
  262. 2600 IF W(I)<W(I+1) THEN W3=W(I) ELSE W3=W(I+1)
  263. 2610 IF W(I)>W(I+1) THEN W4=W(I) ELSE W4=W(I+1)
  264. 2620 S3=S(I+1):S4=S(I)
  265. 2630 IF W3=W(I) THEN S3=S(I):S4=S(I+1)
  266. 2640 IF S3<>0 AND S4=0 THEN R2=S3/2:Q(I)=W3:GOTO 2750
  267. 2650 IF S3=0 AND S4<>0 THEN R2=S4/2:Q(I)=W4:GOTO 2750
  268. 2660 X=W4-W3:S1=S3*S3:S2=S4*S4
  269. 2670 IF X=0 THEN R2=(S3+S4)/2:Q(I)=W3:GOTO 2750
  270. 2680 IF X=180 THEN R2=0:Q(I)=T(I):GOTO 2750
  271. 2690 IF X>180 THEN X=360-X
  272. 2700 R=SQR(S1+S2-2*S3*S4*COS(X/U)):Q=(S2+R*R-S1)/(2*S4*R)
  273. 2710 R2=SQR((S2+(R/2)*(R/2))-2*S4*(R/2)*Q):X1=(S2+R2*R2-(R/2)*(R/2))/(2*S4*R2)
  274. 2720 X1=ATN(SQR(1-X1*X1)/X1)*U:IF X>180 THEN Q(I)=W4+X1:GOTO 2740
  275. 2730 Q(I)=W4-X1:GOTO 2750
  276. 2740 IF Q(I)>360 THEN Q(I)=Q(I)-360
  277. 2750 W=ABS(T(I)-Q(I)):IF W<=180 THEN 2770
  278. 2760 IF Q(I)<T(I) THEN W=360-T(I)+Q(I) ELSE W=360-Q(I)+T(I)
  279. 2770 B=(R2*FNS5(W))/A4:IF B>=1 THEN B=90 ELSE B=FNS7(B)
  280. 2780 G=180-(W+B):M=FNS5(W):IF M=0 THEN R=A4+R2:GOTO 2800
  281. 2790 T=FNS5(G):IF T=0 THEN R=A4-R2 ELSE R=(A4*T)/M
  282. 2800 G(G0)=R:RETURN
  283. 2810 'fuel used
  284. 2820 KU=FNS6(R*FU):K8(I)=K8(I-1)-KU:RETURN
  285. 2830 'map lc
  286. 2840 FOR L=1 TO LEN(X$):U$=MID$(X$,L,1)
  287. 2850 IF ASC(U$)>96 AND ASC(U$)<123 THEN MID$(X$,L,1)=CHR$(ASC(U$)-32)
  288. 2860 NEXT L:RETURN
  289. 2870 O=0:GOSUB 3610:LPRINT F$" "AT$TAB(31)"   NAVPROGseven"TAB(59)TM$" "D5$
  290. 2880 LPRINT STRING$(78,61)
  291. 2890 LPRINT TAB(22)"IDENT"TAB(36)"DIST"TAB(42)"MC/TC"TAB(50)"MH"TAB(56)"GS";
  292. 2900 LPRINT TAB(62)"ETE"TAB(69)"ETA"TAB(75)"FUEL"
  293. 2910 LPRINT TAB(5)"CHECKPOINT"TAB(22)"ID/fac"TAB(29)"FREQ"TAB(34)"rem/leg";
  294. 2920 LPRINT TAB(43)"deg"TAB(50)"deg"TAB(56)"kts"TAB(62)"h:mm"TAB(69)":mm";
  295. 2930 LPRINT TAB(75)"gal":LPRINT STRING$(78,45):FOR I=1 TO N
  296. 2940 LPRINT P$(I)TAB(22)I$(I);
  297. 2950 IF FR(I)=0 THEN 3000
  298. 2960 IF FR(I)>136 THEN LPRINT USING"####";FR(I);:GOTO 3000
  299. 2970 IF FR(I)*10\1=FR(I)*10/1 THEN LPRINT USING"####.#";FR(I);:GOTO 3000
  300. 2980 IF FR(I)*100\1=FR(I)*100/1 THEN LPRINT USING"####.##";FR(I);:GOTO 3000
  301. 2990 LPRINT USING"###.###";FR(I);
  302. 3000 IF I=N THEN 3170
  303. 3010 LPRINT TAB(34)USING "####.#";O9;
  304. 3020 LPRINT TAB(42)USING"###.#";Y(I);
  305. 3030 LPRINT TAB(49)USING "###.#";E(I);
  306. 3040 LPRINT TAB(56)USING "###";G(I);
  307. 3050 LPRINT TAB(73)USING "###.#";K8(I-1);
  308. 3060 IF K8(I)<=F3*.5 THEN LPRINT "<<":GOTO 3080
  309. 3070 IF K8(I)<F3*.75 THEN LPRINT "<" ELSE LPRINT
  310. 3080 LPRINT I;:IF I=1 THEN LPRINT TAB(5)"Elev:"EL(1);:GOTO 3100
  311. 3090 IF AL%(I)<>AL%(I-1) THEN LPRINT TAB(5)"Alt:"AL%(I);
  312. 3100 LPRINT TAB(22)FC$(I)TAB(34)USING"####.#";C(I);
  313. 3110 LPRINT TAB(42)USING"###.#";T(I);
  314. 3120 LPRINT TAB(61)USING "##";F(I);
  315. 3130 LPRINT ":"USING "##";F1(I);
  316. 3140 LPRINT TAB(69)":"USING "##";J(I);
  317. 3150 LPRINT TAB(74)USING "##.#";K(I)
  318. 3160 O=O+C(I):O1=O1+1:O9=O9-C(I):IF I<>N THEN 3190
  319. 3170 LPRINT TAB(34)"CLOSE FLIGHT PLAN WITH "FS$" FSS"
  320. 3180 LPRINT TAB(5)"Elev:"EL(N)TAB(21)FC$(N):LPRINT STRING$(78,61):GOTO 3200
  321. 3190 LPRINT
  322. 3200 NEXT I:I=N
  323. 3210 LPRINT:LPRINT"Total dist ="O"nm"TAB(30)"Time Off ="TAB(55)"Time On ="
  324. 3220 LPRINT:LPRINT "Total time ="O3"hrs:"O4"mins"TAB(30)"Depart at"HR"GMT";
  325. 3230 LPRINT TAB(55)"Final ETA ="INT((L0*100)+L2)"GMT":LPRINT
  326. 3240 F=UF-K8(N-1):F=FNS6(F)
  327. 3250 LPRINT "Avg. fuel usage ="F"gal"TAB(30)"Fuel rate ="F3"gal/hr";
  328. 3260 LPRINT TAB(55)"Fuel on board ="UF"gal"
  329. 3270 LPRINT TAB(40)"("FNS6(CF)"climb)"
  330. 3280 X8=INT(ABS(K8(I-1)/F3)):X9=INT((ABS(K8(I-1)/F3)-X8)*60)
  331. 3290 IF K8(I-1)<=0 THEN K8(I-1)=0:X8=0:X9=0
  332. 3300 LPRINT "Reserve ="FNS6(K8(I-1))"gal ="X8":"X9;TAB(30)"Cruise Alt ="CA;
  333. 3310 LPRINT "ft"TAB(55)"TAS ="TA"("USING"###";CS;
  334. 3320 LPRINT " climb)"TAB(55)"CAS =";
  335. 3330 LPRINT INT(TA-(1.75*(CA/1000)))"("INT(CS-(1.75*(CA/2000)))"climb)"
  336. 3340 LPRINT "Fuel to climb ="CK"gal"TAB(30)"Dist to climb ="FNS6(CD)"nm";
  337. 3350 LPRINT TAB(55)"Time to climb ="INT(CT*60)"min":LPRINT
  338. 3360 LPRINT "Cost "CHR$(64)USING"$$##.##";PH;
  339. 3370 LPRINT "/hr = "USING"$$##.##";PH*R1
  340. 3380 IF MT<>2 THEN 3400
  341. 3390 LPRINT "WARNING! STANDARD CLIMB WILL NOT CLEAR TERRAIN DURING CLIMBOUT"
  342. 3400 IF MT<>1 THEN 3420
  343. 3410 LPRINT "CAUTION: MARGINAL TERRAIN CLEARANCE DURING CLIMBOUT"
  344. 3420 IF K8(I-1)<>0 THEN 3440
  345. 3430 LPRINT BL$PG$" INSUFFICIENT FUEL TO COMPLETE TRIP! "QG$:GOTO 3460
  346. 3440 IF K8(I-1)>=F3*.5 THEN 3460
  347. 3450 LPRINT BL$PG$" FUEL RESERVES LESS THAN VFR MINIMUMS! "QG$
  348. 3460 IF DW<>2 THEN 3480
  349. 3470 LPRINT "WARNING! NOMINAL DESCENT WILL NOT CLEAR TERRAIN!":GOTO 3520
  350. 3480 LPRINT:LPRINT"Nominal descent: "INT(DS)"ft/min, ";
  351. 3490 LPRINT INT(DP)"nm from "I$(DC+1)" "P$(DC+1)
  352. 3500 IF DW<>1 THEN 3520
  353. 3510 LPRINT "WARNING! MARGINAL TERRAIN CLEARANCE DURING DESCENT/APPROACH."
  354. 3520 LPRINT "Check charts for minimum terrain and obstruction ";
  355. 3530 LPRINT "clearance altitudes."
  356. 3540 LPRINT:LPRINT "  --- WINDS ---"
  357. 3550 FOR J=1 TO N:LPRINT I$(J),
  358. 3560 IF W(J)>180 THEN W(J)=W(J)-180 ELSE W(J)=W(J)+180
  359. 3570 IF S(J)>0 THEN LPRINT W(J)"degrees at"S(J)"knots." ELSE LPRINT
  360. 3580 NEXT J
  361. 3590 LPRINT CHR$(12):RETURN
  362. 3600 ' date and time subroutines
  363. 3610 D5$="" ' :A=-2508:CALL A:FOR A=-2605 TO -2597:D5$=D5$+CHR$(PEEK(A)):NEXT A
  364. 3620 TM$="" ' :FOR A=-2596 TO -2589:TM$=TM$+CHR$(PEEK(A)):NEXT A
  365. 3630 RETURN
  366.  A=-2605 TO -2597:D5$=D5$+CHR$