!*! 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