!*! Updated on 12-Feb-93 at 9:59 AM by Jim Randazzo; edit time: 0:00:20
100 SCALE=3
200 DIM LEG(20,20), SCREEN(20)
210 FOR I=1 TO 20
220    FOR J=1 TO 20
230       LEG(I,J) = 0
240    NEXT J
250 NEXT I
260 RESTORE
270 FOR I=1 TO 20 : READ SCREEN(I) : NEXT I
280 DATA 4,5,6,7,8,9,10,11,12,15,16,17,18,19,20,0,0,0,0,0
290 RESTORE
300 STRSIZ 30
310 SIZ = 0
320 PI=3.141592654
500 PRINT TAB(-1,0);"DO YOU DESIRE INSTRUCTIONS (Y/N)"
510 ROW=1 : COL=35 : CC=1 : GOSUB 59830
520 IF A$="N" THEN 1100
530 IF A$="Y" THEN 600
540 ROW=24 : CC=28 : MES$="INVALID RESPONSE"
550 GOSUB 59900 : GOTO 510
600 PRINT : PRINT
605 PRINT "THIS PROGRAM HELPS YOU TO PLAN YOUR FLIGHT MORE EASILY"
610 PRINT
620 PRINT "IN A MINUTE A FLIGHT PLANNING SCHEDULE WILL APPEAR ON THE SCREEN"
630 PRINT "YOU WILL BE ASKED TO FILL PERTINENT DATA ABOUT YOUR FLIGHT"
640 PRINT:PRINT"THIS INFORMATION IS ENTERED BY CHOOSING THE APPROPRIATE LINE #"
650 PRINT "AND THEN FILLING IN THE VALUE.  IN ADITION TO A LINE # RESPONSE,"
660 PRINT "THERE ARE 4 OTHER VALID RESPONSES"
670 PRINT
680 PRINT "     C   -   INITIATE FLIGHT CALCULATIONS"
690 PRINT "     I   -   PRINT INSTRUCTIONS"
700 PRINT "     S   -   REDISPLAY SCREEN"
710 PRINT "     E   -   EXIT PROGRAM"
720 PRINT
730 PRINT "WHEN YOU ARE READY TO PROCEED, HIT RETURN"
740 INPUT A$
1000 REM
1010 REM    SCREEN PRINT
1020 REM
1100 PRINT TAB(-1,0);TAB(22);"*** FLIGHT PLANNING PROGRAM - VER 1.0 ***"
1110 PRINT
1120 PRINT "COURSE LEG DATA";TAB(65);"  UNITS"
1130 PRINT "     (1)  LEG #"
1140 PRINT "     (2)  FUEL CONSUMPTION RATE";TAB(65);"GALS/HOUR"
1150 PRINT "     (3)  TOTAL GALLONS USABLE FUEL";TAB(65);"GALLONS"
1160 PRINT "     (4)  TRUE AIR SPEED";TAB(65);"KNOTS"
1170 PRINT "     (5)  THE WIND IS FROM WHAT TRUE DIRECTION";TAB(65);"DEGREES"
1180 PRINT "     (6)  MAGNETIC VARIATION (EAST = -, WEST = +)";TAB(65);"DEGREES"
1190 PRINT "     (7)  WIND SPEED";TAB(65);"KNOTS"
1200 PRINT "     (8)  COURSE FOR THIS LEG";TAB(65);"DEGREES"
1210 PRINT "     (9)  LENGTH OF THIS LEG";TAB(65);"NAUT MILES"
1220 PRINT
1230 PRINT "COURSE LEG CALCULATIONS"
1240 PRINT "     (10) COURSE HEADING";TAB(65);"DEGREES"
1250 PRINT "     (11) GROUND SPEED";TAB(65);"KNOTS"
1260 PRINT "     (12) ELASPED TIME FOR THIS LEG";TAB(65);"HOUR-MIN"
1270 PRINT "     (13) TOTAL ELASPED TIME SINCE TAKE-OFF";TAB(65);"HOUR-MIN"
1280 PRINT "     (14) FUEL CONSUMED THIS LEG";TAB(65);"GALLONS"
1290 PRINT "     (15) TOTAL FUEL CONSUMED THIS FLIGHT";TAB(65);"GALLONS"
1300 PRINT
1310 PRINT "TO ENTER DATA FOR LINES 1-9, ENTER THE LINE #:"
1320 PRINT "OR  C  - FLIGHT CALCULATIONS OR  I  - INSTRUCTIONS"
1330 PRINT "OR  S  - REDISPLAY SCREEN    OR  E  - EXIT PROGRAM";
1400 LEGNUM=1
1410 GOSUB 5000
2000 ROW=22 : COL=65 : CC=2
2010 GOSUB 59830
2020 IF A$="C" THEN GOSUB 3000 : GOSUB 5000 : GOTO 2000
2030 IF A$="E" THEN END
2040 IF A$="I" THEN PRINT TAB(-1,0); : GOTO 600
2050 IF A$="S" THEN 1100
2100 A=VAL(A$)
2110 IF A>0 AND A<10 THEN 2140
2120 CC=28 : MES$="INVALID RESPONSE"
2130 ROW=24 : COL=52 : GOSUB 59900 : GOTO 2000
2140 ROW=SCREEN(A) : COL=52 : CC=8 : GOSUB 59830
2150 B=VAL(A$)
2160 PRINT TAB(ROW,COL);
2170 PRINT USING "####.###";B;
2180 LEG(LEGNUM,A)=B
2190 IF A=1 THEN 2230
2200 GOTO 2000
2210 REM
2215 REM    DISPLAY DATA FOR NEW LEG
2220 REM
2230 LEGNUM = B
2235 IF LEG(LEGNUM,17) = 1 THEN GOSUB 5000 : GOTO 2000
2240 IF LEGNUM=1 THEN LASTLG=1
2250 FOR I= 2 TO 9
2260    LEG(LEGNUM,I)=LEG(LASTLG,I)
2270 NEXT I
2280 LEG(LEGNUM,1) = LEGNUM
2283 LASTLG = LEGNUM
2285 LEG(LEGNUM,17) = 1
2290 IF LEG(LEGNUM,16) = 1 THEN GOSUB 3000
2300 GOSUB 5000
2310 GOTO 2000
3000 REM
3010 REM    FLIGHT CALCULATIONS
3020 REM
3100 R = 180 / PI
3110 GOSUB 3500
3120 WD = WD - MV
3130 ANG = SIN((WD - CD) / R)
3140 IF WS = 0 THEN WCOR=0 : GOTO 3160
3150 WCOR = WS / TAS
3155 WSATN=WCOR/SQR(-WCOR*WCOR+1)
3160 GOSUB 3800
3170 HEAD = CD + (WCOR1*R*ANG)
3180 IF HEAD<0 THEN HEAD = HEAD + 360
3190 HEAD = INT(HEAD*100+.5)/100
3200 GS = TAS*COS((HEAD-CD)/R) - WS*COS((WD-CD)/R)
3210 GS = INT(GS*100+.5)/100
3220 IF GS>0 THEN 3250
3230 CC=28 : MES$="YOU CAN'T GET THERE THIS WAY"
3240 ROW=24 : COL=52 : GOSUB 59900
3250 TLEG = 60*CL/GS
3260 TLEG = INT(TLEG*100+.5)/100
3270 TTOT = 0
3300 FCL = FRATE*(TLEG/60)
3310 FCL = INT(FCL*100+.5)/100
3320 FCT = 0
3321 IF LEGNUM=1 THEN FCT=FCL : TTOT=TLEG : GOTO 3330
3322 FOR I=1 TO LEGNUM-1
3324    FCT = FCT + LEG(I,14)
3326    TTOT = TTOT + LEG(I,12)
3328 NEXT I
3329 FCT = FCT + FCL : TTOT = TTOT + TLEG
3330 IF (FUEL - FCT)>0 THEN 3360
3340 MES$="OUT OF FUEL"
3350 ROW=19 : COL=38 : CC=12 : GOSUB 59900
3360 GOSUB 3700
3370 RETURN
3500 L=LEGNUM
3510 FRATE = LEG(L,2)
3520 FUEL = LEG(L,3)
3530 TAS = LEG(L,4)
3540 WD = LEG(L,5)
3550 MV = LEG(L,6)
3560 WS = LEG(L,7)
3570 CD = LEG(L,8)
3580 CL = LEG(L,9)
3590 RETURN
3700 LEG(L,10) = HEAD
3710 LEG(L,11) = GS
3720 LEG(L,12) = TLEG
3730 LEG(L,13) = TTOT
3740 LEG(L,14) = FCL
3750 LEG(L,15) = FCT
3760 RETURN
3800 IF WSATN**2<1 THEN 3850
3810 IF WSANT>1 THEN 3900
3820 IF WSATN<-1 THEN 3950
3830 CC=28 : MES$="ATN FUNCTION FAILED"
3840 ROW=24 : COL=52 : GOSUB 59900 : WCOR1=1 : RETURN
3850 X = WSATN
3860 WCOR1=X-X**3/3+X**5/5-X**7/7+X**9/9-X**11/11+X**13/13-X**15/15
3870 RETURN
3900 X = WSATN
3910 WCOR1=PI/2-1/X+1/(3*X^2)-1/(5*X^5)+1/(7*X^7)-1/(9*X^9)+1/(11*X^11)
3920 WCOR1=WCOR1-1/(13*X^13)
3930 RETURN
3950 X = WSATN
3960 WCOR1=-PI/2-1/X+1/(3*X^2)-1/(5*X^5)+1/(7*X^7)-1/(9*X^9)+1/(11*X^11)
3970 WCOR1=WCOR1-1/(13*X^13)
3980 RETURN
5000 REM
5010 REM    PRINT LEG #'S
5020 REM
5100 COL=52
5110 FOR I=1 TO 15
5120    ROW=SCREEN(I)
5130    GOSUB 59980
5135    PRINT TAB(ROW,COL);
5140    PRINT USING "####.###", LEG(LEGNUM,I);
5150 NEXT I
5160 RETURN
59800 REM
59810 REM    INPUT DATA
59820 REM
59830 GOSUB 59980 : PRINT TAB(ROW,COL);"  ";
59840 FOR I=1 TO CC
59850    PRINT "*";
59860 NEXT I
59870 PRINT TAB(ROW,COL); : INPUT A$
59872 A$=LEFT(A$,CC)
59874 PRINT TAB(ROW,COL);"  ";A$;SPACE(CC+1-LEN(A$));
59880 RETURN
59890 REM
59900 REM    FLASH ERROR MESSAGE
59910 REM
59920 GOSUB 59980
59930 FOR I=1 TO 10
59940    PRINT TAB(ROW,COL);SPACE(CC);
59950    PRINT TAB(ROW,COL);CHR(7);MES$;
59960 NEXT I
59970 RETURN
59980 RETURN
59990 RETURN
60000 END