; -> GPWS V4.0beta by Wilco van Deijl (puk_muk@knoware.nl) TITLE "-GPWS V4.0beta" DESCRIPTION "Ground Proximity Warning System V4.0beta by Wilco van Deijl" DESCRIPTION "Warning Systems, Flight Mode Annunciator, Radio Utilities, ATC, ATIS," DESCRIPTION "Waypoint Navigation, Autopilot Heading, Altitude, V/S-mode, Autoland." DECLARE aa,adf,alt,alt0,ap,armed,armed0,atc,break,cat,com,crs,dh,dig,dist,dist0 DECLARE dist1,fk,fma,gear,gpws,gs,hdg,hdgalt,ias,ias0,info,inh,keys,land,landtest DECLARE lastcall,loc,nav1,nav2,ns,nx,pitch,pitch0,prt,ra,ra0,ra1,rdkeys,reset DECLARE rfgain,roll,roll0,shift,time,time0,time1,trim,trk,trk0,ttg,vs,vsmode DECLARE warning,wcf,we,wpt,wpt0,wptnav,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11 DECLARE lat,lat0,lat1,lat2,lat3,lat4,lat5,lat6,lat7,lat8,lat9,lat10 DECLARE lat11,lat12,lat13,lat14,lat15,lat16,lat17,lat18,lat19,lat20 DECLARE lon,lon0,lon1,lon2,lon3,lon4,lon5,lon6,lon7,lon8,lon9,lon10 DECLARE lon11,lon12,lon13,lon14,lon15,lon16,lon17,lon18,lon19,lon20 gpws=2 ;GPWS: on (0=off,1=alt,2=on) fma=2 ;FMA: auto+ (0=man,1=auto,2=auto+) fk=57 ;FMA-key: Space (0=off,57=Spacebar,83=Delete) rdkeys=2 ;RD-keys: Shift (0=off,1=swap,2=Shift,3=normal) wptnav=1 ;WPT-NAV: on (0=off,1=on) hdgalt=3 ;HDG/ALT: all (0=off,1=normal,2=keypad,3=all) vsmode=1 ;V/S-mode: on (0=off,1=on) land=1 ;LAND: on (0=off,1=on) cat=3 ;CAT-C (1=A,2=B,3=C,4=D) rfgain=3 ;default rate of random background ATC (0-10) COM_FREQ=118 ;default COM frequency com=122.2 ;default standby COM frequency gear=10 ;default RA correction for gear height (ft) info=1 ;default waypoint info on prt=3 ;default minimum print time PRINT_TIME prt ADV_KEYS ADD,83,287,288 ONKEY 288 GOSUB dh ;Shift-d ONKEY 287 GOSUB setup ;Shift-s ONKEY 11 ;(enables key 0 with dual-player option) GOSUB advkeys ONSTALL GOSUB stickshaker trim=ELEVATOR_TRIM_POSITION trk0=-99 wpt=1 wpt0=1 DECLARE xVOR_1_GLIDE_SLOPE ; -> DELETE THESE LINES IF YOU'VE GOT AN UPDATED xVOR_1_GLIDE_SLOPE=3 ; -> VERSION OF FLIGHTSHOP AND DELETE THE 'x' OF ; -> ALL THE xVOR_1_GLIDE_SLOPE VARIABLES IN THE ; -> REST OF THIS PROGRAM AND COMPILE GPWS40.TXT ; -> In your \ADV subdirectory type: aplc gpws40 ;debug_window on WHILE 1 gpws_1: GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ;Radio Altitude vs=VELOCITY_Y*196.8 ;Vertical Speed ias=VELOCITY_INDICATED ;Indicated Airspeed IF ON_GROUND THEN GOSUB on_gnd IF ias>ias0 AND ias0>30 THEN IF NOT INRANGE(ELEVATOR_TRIM_POSITION,-8000,8000) OR FLAPS_LEFT_POSITION>25000 OR PARKING_BRAKES THEN PLAY "-towarn.wav" ;take-off config WAIT 1 warning=1 GOTO gpws_1 ENDIF ENDIF ias0=ias ELSEIF INRANGE(ra,-30,2450) THEN IF ias0-ias>9 AND INRANGE(ias,1,170) AND PLANE_PITCH<25 AND ra<1500 AND (WIND_SURF_VEL>10 OR WIND_LOW_VEL>10) THEN IF (INRANGE((WIND_SURF_DEPTH-PLANE_ALT),-50,50) OR INRANGE((WIND_LOW_BASE-PLANE_ALT),50,50)) AND gpws=2 THEN PLAY "-windshr.wav" ;mode7 WAIT 1 warning=1 ias0=ias GOTO gpws_1 ENDIF ENDIF ias0=ias IF vs<100 THEN IF ra<65 AND gpws>0 THEN GOTO flare ;mode6 ELSEIF ra<1000 THEN IF vs<-1.8*ra-1400 AND gpws=2 THEN IF vs<-1.2*ra-2000 THEN PLAY "-terrnpu.wav" ;mode2 ELSE PLAY "-snkrtpu.wav" ;mode1 ENDIF WAIT 2 warning=1 GOTO gpws_1 ELSEIF GEAR_3_POSITION=0 AND ra1=0 AND inh<3 AND gpws=2 THEN IF ra<500 AND VELOCITY_INDICATED<190 THEN PLAY "-gear.wav" ;mode4a WAIT 2 warning=1 GOTO gpws_1 ELSEIF VELOCITY_INDICATED>0.12*ra+130 THEN PLAY "-toolowt.wav" WAIT 2 warning=1 GOTO gpws_1 ENDIF ELSEIF FLAPS_LEFT_POSITION<20000 AND ra1=0 AND inh<2 AND gpws=2 THEN IF ra<245 AND VELOCITY_INDICATED<160 THEN PLAY "-flaps.wav" ;mode4b (flaps<20) WAIT 2 warning=1 GOTO gpws_1 ELSEIF VELOCITY_INDICATED>0.12*ra+130 THEN PLAY "-toolowt.wav" WAIT 2 warning=1 GOTO gpws_1 ENDIF ENDIF IF ra<110 THEN IF lastcall!=100 THEN IF dh!=100 AND gpws>0 THEN PLAY "-100.wav" ;mode6 ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF lastcall=100 ENDIF IF vs<-1.6*ra-1000 AND gpws=2 THEN PLAY "-snkrate.wav" ;mode1 WAIT 1 ELSEIF ra1>1 AND ra1-ra>ra/10 AND gpws=2 THEN PLAY "-dontsnk.wav" ;mode3 WAIT 1 ENDIF GOTO gpws_1 ELSEIF NOT INRANGE(ra,lastcall-90,lastcall+10) THEN IF INRANGE(ra,160,210) THEN IF dh!=200 AND gpws>0 THEN PLAY "-200.wav" ;mode6 ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF ELSEIF INRANGE(ra,450,510) AND gpws>0 THEN PLAY "-500.wav" ;mode6 ENDIF lastcall=((ra+90) IDIV 100)*100 ;autoland test <1000ft GOTO land_arm ; at 100ft intervals ELSEIF ra<210 THEN GOSUB gpws_2 GOTO gpws_1 ELSEIF ra<610 THEN GOSUB gpws_2 GOSUB fma_change GOSUB ap_trim IF vs>-100 THEN GOSUB atc ENDIF GOTO gpws_1 ENDIF ELSEIF vs<-2.5*ra-1000 AND gpws=2 THEN ;ra>1000ft IF vs<-5.2*ra+2800 THEN PLAY "-terrnpu.wav" ;mode2 ELSE PLAY "-snkrtpu.wav" ;mode1 ENDIF WAIT 2 warning=1 GOTO gpws_1 ENDIF GOSUB gpws_2 ELSEIF ra<245 AND (GEAR_3_POSITION=0 OR FLAPS_LEFT_POSITION<20000) THEN ra1=1 ;mode3 arm (take-off / go-around<245ft & gear/flaps raised) ENDIF ENDIF GOSUB fma_change IF warning=1 THEN warning=0 atc=-9 ;avoid atc GOTO gpws_1 ELSEIF OVERSPEED_WARNING THEN PLAY "-clacker.wav" IF roll!=8 THEN WAIT .5 ENDIF GOTO gpws_1 ENDIF GOSUB ap_trim GOSUB atc ENDWHILE gpws_2: IF vs<-1.6*ra-1000 AND gpws=2 THEN ;ra<2450ft PLAY "-snkrate.wav" ;mode1 warning=1 WAIT 2 ELSEIF ra1>0 THEN ;mode3 IF ra>1333 OR (ra>700 AND VELOCITY_INDICATED<190) OR (GEAR_3_POSITION=32767 AND FLAPS_LEFT_POSITION>20000) THEN ra1=0 ;mode3 disarm ELSEIF ra>ra1 THEN ra1=ra ELSEIF ra1-ra>ra/10 AND gpws=2 THEN PLAY "-dontsnk.wav" warning=1 WAIT 2 ENDIF ELSEIF VOR_1_GS_AVAIL AND ra<1500 THEN ;mode5 dist=GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) ;distance to loc antenna ra=PLANE_ALT-VOR_1_ALT ;alt above loc antenna IF gs<5 THEN ;if not 5x on g/p: reset IF NOT INRANGE((ra0-ra)/(dist0-dist),29.1*xVOR_1_GLIDE_SLOPE,35.6*xVOR_1_GLIDE_SLOPE) THEN gs=0 ;glide path 2.7-3.3 dist0=dist ra0=ra RETURN ELSEIF gs=4 THEN GOSUB gs_crs IF INRANGE(crs,-1,1) AND GLIDE_SLOPE(VOR_1_LAT,VOR_1_LON)ra0 OR loc!=VOR_1_LOCALIZER THEN gs=0 ra0=0 ELSEIF ra<(ra0*.278-(dist0-dist)*27)*xVOR_1_GLIDE_SLOPE AND ra<305 THEN GOSUB gs_crs IF INRANGE(crs,-30,30) AND dist<10 AND inh=0 AND gpws=2 THEN PLAY "-gs.wav" ;0.5degree below g/p warning=1 WAIT 1 ENDIF ENDIF ELSE ra0=0 ;mode5 reset ENDIF RETURN gs_crs: crs=VOR_1_LOCALIZER-VOR_1_RADIAL+180 IF crs>180 THEN crs=crs-360 ENDIF RETURN advkeys: ADV_KEYS DELETE,40,41,43,51,57,583,584,585,587,588,589,591,592,593 ADV_KEYS DELETE,shift+20,shift+30,shift+46,shift+49,shift+50 ONKEY 40 ONKEY 41 ONKEY 43 ONKEY 51 ONKEY 57 ONKEY 83 ONKEY 583 ONKEY 584 ONKEY 585 ONKEY 587 ONKEY 588 ONKEY 589 ONKEY 591 ONKEY 592 ONKEY 593 ONKEY shift+20 ONKEY shift+30 ONKEY shift+46 ONKEY shift+49 ONKEY shift+50 IF fk>0 THEN ADV_KEYS ADD,fk ONKEY fk GOSUB fma ;Space/Delete ENDIF IF wptnav=1 THEN ADV_KEYS ADD,51 ONKEY 51 GOSUB wpt ; < or , ENDIF IF hdgalt=1 OR hdgalt=3 THEN ADV_KEYS ADD,41,43 ONKEY 41 GOSUB hdg_sel ; ~ or ` ONKEY 43 GOSUB alt_sel ; | or \ ENDIF IF hdgalt>1 THEN ADV_KEYS ADD,583,584,585,587,588,589,591,592,593 ONKEY 583 GOSUB hdg ;Ctrl-KeyPad7 ONKEY 587 GOSUB hdg_l10 ;Ctrl-KeyPad4 ONKEY 589 GOSUB hdg_r10 ;Ctrl-KeyPad6 ONKEY 591 GOSUB hdg_l1 ;Ctrl-KeyPad1 ONKEY 593 GOSUB hdg_r1 ;Ctrl-KeyPad3 ONKEY 585 GOSUB alt ;Ctrl-KeyPad9 ONKEY 592 GOSUB alt_dn ;Ctrl-KeyPad2 ONKEY 584 GOSUB alt_up ;Ctrl-KeyPad8 ONKEY 588 GOSUB nav_crs ;Ctrl-KeyPad5 ENDIF IF vsmode=1 THEN ADV_KEYS ADD,40 ONKEY 40 GOSUB vs_mode ; " or ' ENDIF IF rdkeys>0 THEN shift=256 IF rdkeys=3 THEN shift=0 ENDIF ADV_KEYS ADD,shift+20,shift+30,shift+46,shift+49,shift+50 ONKEY shift+49 GOSUB nav1 ;(Shift)n ONKEY shift+50 GOSUB nav2 ;(Shift)m ONKEY shift+30 GOSUB adf ;(Shift)a ONKEY shift+46 GOSUB com ;(Shift)c ONKEY shift+20 GOSUB xpdr ;(Shift)t ENDIF RETURN advkeys_reset: ;reset keys ADV_KEYS DELETE,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME prt atc=-5 break=1 ias0=0 trim=ELEVATOR_TRIM_POSITION time0=SECOND WAIT 0,KEYPRESS RETURN alt_alert: x0=AUTOPILOT_ALTITUDE-PLANE_ALT IF alt0=AUTOPILOT_ALTITUDE THEN IF INRANGE(x0,-230,230) THEN ;within 750ft IF aa=0 THEN IF NOT INRANGE(x0,-75,75) THEN ;not within 250ft GOSUB alt_arm GOSUB alt_alert2 ENDIF ELSEIF aa<3 THEN IF AUTOPILOT_MASTER AND fma=2 THEN IF INRANGE(x0,-6,6) THEN ;alt hold GOTO alt_hold ELSEIF INRANGE(x0/vs,0,.025) THEN ;alt acq break=2 PLAY "-ss1.wav" PRINT PRINT_TIME 20 ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ACQ ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 break=1 GOSUB fma_reset aa=3 time0=SECOND time1=60*MINUTE+SECOND ENDIF ELSEIF INRANGE(x0,-75,75) THEN ;within 250ft aa=0 ENDIF ELSE ;aa=3 time=60*MINUTE+SECOND-time1 IF time<0 THEN time=time+3600 ENDIF IF time>18 OR (NOT INRANGE(x0,-75,75) AND x0/vs<0) THEN aa=0 ;reset >18s or exit ELSEIF INRANGE(x0,-6,6) THEN ;alt hold GOTO alt_hold ENDIF ENDIF ELSEIF aa>0 THEN IF aa>1 THEN ;exit alert GOSUB alt_alert2 ENDIF aa=0 ENDIF ELSEIF alt0=-AUTOPILOT_ALTITUDE THEN alt0=-alt0 IF INRANGE(x0,-230,-75) OR INRANGE(x0,75,230) THEN GOSUB alt_arm ;no alert ELSE aa=0 ENDIF ELSE alt0=-AUTOPILOT_ALTITUDE ;delay ENDIF RETURN alt_alert2: IF GEAR_3_POSITION=0 AND FLAPS_LEFT_POSITION<20000 THEN PLAY "-altalrt.wav" IF fma=2 THEN break=0 FOR x0=1 TO 5 PRINT "ALT ALERT" WAIT .4 IF break>0 THEN RETURN ENDIF PRINT " " WAIT .4 IF break>0 THEN RETURN ENDIF NEXT x0 PRINT "ALT ALERT" WAIT .4 IF break=0 THEN PRINT ENDIF ENDIF ENDIF RETURN alt_arm: IF x0/vs<0 THEN ;exit from 250ft: aa=1 ;arm acq ELSE ;entry within 750ft: aa=2 ;arm acq + exit warn ENDIF RETURN alt_hold: aa=0 break=2 PLAY "-ss1.wav" PRINT PRINT_TIME prt ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT HOLD ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 break=1 GOSUB fma_reset time0=SECOND RETURN ap_trim: IF ap=1 AND NOT INRANGE(trim-ELEVATOR_TRIM_POSITION,-1248,1248) THEN PLAY "-trim2.wav" trim=ELEVATOR_TRIM_POSITION ENDIF RETURN apdisc_trim: ;ap disconnect / trim IF AUTOPILOT_MASTER=0 THEN IF ap=1 THEN PLAY "-apdisco.wav" trim=ELEVATOR_TRIM_POSITION ap=0 ELSEIF trim!=ELEVATOR_TRIM_POSITION THEN IF INRANGE(trim-ELEVATOR_TRIM_POSITION,-32,32) THEN PLAY "-trim1.wav" ELSE PLAY "-trim2.wav" ENDIF trim=ELEVATOR_TRIM_POSITION ENDIF ELSE ap=1 ENDIF RETURN crs: IF crs>360 THEN crs=crs-360 ELSEIF crs<1 THEN crs=crs+360 ENDIF RETURN flare: ;mode6 ra<60ft ON (45-ra) IDIV 10 GOTO forty,thirty,twenty,ten,zero WHILE ra>54 IF ra>75 OR ON_GROUND THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF dh!=50 THEN PLAY "-50.wav" ELSE PLAY "-min.wav" ENDIF forty: WHILE ra>44 IF ra>70 OR ON_GROUND THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE PLAY "-40.wav" thirty: WHILE ra>34 IF ra>60 OR ON_GROUND THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE PLAY "-30.wav" twenty: WHILE ra>23 IF ra>50 OR ON_GROUND THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF dh!=20 THEN PLAY "-20.wav" ELSE PLAY "-min.wav" ENDIF ten: WHILE ra>13 IF ra>40 OR ON_GROUND THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE PLAY "-10.wav" zero: WHILE NOT ON_GROUND IF NOT INRANGE(ra,-30,30) THEN GOTO flare_end ENDIF GOSUB apdisc_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE time=0 time0=SECOND WHILE time<6 AND ra<30 GOSUB apdisc_trim GOSUB on_gnd GOSUB time ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE flare_end: ias0=0 lastcall=0 GOSUB fma_mode GOSUB fma_reset trim=ELEVATOR_TRIM_POSITION GOTO gpws_1 fma: WAIT 0,KEYPRESS IF break>1 THEN IF break=3 THEN PLAY "-ss1.wav" WAIT .5,KEYPRESS IF KEY=fk THEN GOTO ra ENDIF IF ra>50 THEN PRINT "LAND flare armed" ELSE PRINT "LAND FLARE" ENDIF ENDIF RETURN ENDIF PLAY "-ss1.wav" PRINT PRINT_TIME prt*2 fma_2: GOSUB fma_mode WAIT 0 IF KEY=fk THEN GOTO ra ENDIF ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 PRINT_TIME prt GOSUB fma_reset break=1 time0=SECOND WAIT 0,KEYPRESS RETURN fma_change: break=0 GOSUB fma_mode IF pitch=1 THEN GOSUB alt_alert ENDIF IF roll!=roll0 OR pitch!=pitch0 OR armed!=armed0 THEN IF break=1 THEN GOTO fma_change ELSEIF AUTOPILOT_MASTER AND fma>0 THEN break=2 PLAY "-ss1.wav" PRINT PRINT_TIME prt*2 ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 PRINT_TIME prt time0=SECOND ENDIF GOSUB fma_reset break=0 ELSEIF roll=8 THEN GOSUB time IF time>4 THEN GOTO wpt_nav ENDIF ENDIF RETURN fma_mode: IF AUTOPILOT_ALTITUDE_HOLD THEN pitch=1 IF NOT INRANGE(alt-MTOF(AUTOPILOT_ALTITUDE/100),-1,1) THEN alt=(MTOF(AUTOPILOT_ALTITUDE)+50) IDIV 100 IF fma=2 THEN pitch0=0 ENDIF ENDIF ELSEIF AUTOPILOT_ATTITUDE_HOLD THEN pitch=2 ELSEIF AUTOPILOT_APPROACH_HOLD THEN pitch=3 ELSE pitch=0 ENDIF IF AUTOPILOT_HEADING_HOLD THEN GOSUB fma_mode_arm IF roll=8 THEN RETURN ELSEIF NOT INRANGE(hdg-AUTOPILOT_HEADING,-1,1) THEN hdg=INT(AUTOPILOT_HEADING+.5) IF fma=2 THEN roll0=0 ENDIF ENDIF roll=1 ELSEIF AUTOPILOT_ATTITUDE_HOLD THEN roll=2 GOSUB fma_mode_arm ELSEIF AUTOPILOT_WING_LEVELER THEN roll=7 GOSUB fma_mode_arm ELSEIF AUTOPILOT_APPROACH_HOLD THEN roll=3 IF pitch!=3 THEN armed=2 ELSEIF armed!=1 THEN armed=0 ENDIF ELSEIF AUTOPILOT_LOCALIZER_HOLD THEN roll=4 armed=0 ELSEIF AUTOPILOT_BACK_COURSE_HOLD THEN roll=5 armed=0 ELSEIF AUTOPILOT_NAV_HOLD THEN roll=6 armed=0 ELSEIF AUTOPILOT_MASTER THEN roll=0 armed=0 ELSE roll=0 armed=7 ENDIF RETURN fma_mode_arm: IF AUTOPILOT_APPROACH_HOLD THEN IF pitch=3 THEN armed=4 ELSE armed=3 ENDIF ELSEIF AUTOPILOT_LOCALIZER_HOLD THEN armed=4 ELSEIF AUTOPILOT_BACK_COURSE_HOLD THEN armed=5 ELSEIF AUTOPILOT_NAV_HOLD THEN armed=6 ELSEIF AUTOPILOT_MASTER THEN armed=0 ELSE armed=7 ENDIF RETURN fma_reset: roll0=roll pitch0=pitch armed0=armed RETURN on_gnd: ;RA correction on gnd of gear height IF INRANGE(PLANE_ALT-GROUND_ALTITUDE,0,9) AND ON_GROUND THEN gear=MTOF(PLANE_ALT-GROUND_ALTITUDE) ENDIF RETURN ra: PLAY "-ss1.wav" PRECISION 1,0,0 PRINT_TIME prt PRINT "RA ",MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear, IF dh THEN PRINT " DH ",dh ELSE PRINT " " ENDIF break=1 WAIT 0,KEYPRESS RETURN stickshaker: PLAY "-stkshkr.wav" WAIT .5 warning=1 RETURN time: time=SECOND-time0 IF time<0 THEN time=time+60 ENDIF RETURN land_arm: ;autoland test IF land>0 AND pitch=3 AND roll=3 AND AUTOPILOT_MASTER AND VOR_1_GS_AVAIL AND VOR_1_LOCALIZER_AVAIL THEN x0=(ra0-PLANE_ALT+VOR_1_ALT)/(dist0-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON)) landtest=INRANGE(x0,29.1*xVOR_1_GLIDE_SLOPE,35.6*xVOR_1_GLIDE_SLOPE) x0=VOR_1_LOCALIZER-VOR_1_RADIAL+180 landtest=landtest+INRANGE(x0,-3,3)+INRANGE(x0,357,363) x0=COURSE+MAGVAR-VOR_1_LOCALIZER landtest=landtest+INRANGE(x0,-3,3)+INRANGE(x0,357,363)+INRANGE(x0,-357,-363)+INRANGE(PLANE_BANK,-3,3) IF landtest=4 THEN IF armed!=1 AND fma>0 THEN PLAY "-ss1.wav" IF ra>510 THEN PRINT_TIME prt*2 ENDIF PRINT PRINT "APP LOC APP G/S land armed" PRINT_TIME prt armed0=1 ENDIF IF ra0 THEN IF armed!=1 THEN armed=1 WAIT 1 GOTO land_arm ENDIF PLAY "-ss1.wav" PRINT "LAND flare armed" ENDIF GOTO land ENDIF armed=1 ELSEIF lastcall=INT(cat*100+100) OR (ra0 THEN PLAY "-ss1.wav" PRINT PRINT "APP LOC APP G/S app only" armed0=0 ENDIF armed=0 ENDIF ELSEIF armed=1 THEN armed=0 ENDIF GOTO gpws_1 land: ;autoland + mode6 break=3 gs=xVOR_1_GLIDE_SLOPE*32.35 ;glide slope x1=VOR_1_LOCALIZER+180 ;localizer+180 IF x1>360 THEN x1=x1-360 ENDIF crs=VOR_1_LOCALIZER-MAGVAR ;magnetic loc course dist1=GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) ;distance to loc antenna ra1=PLANE_ALT+VELOCITY_Y*3.5 ;maintain initial rate AUTOPILOT_ALTITUDE=ra1 ; of descent AUTOPILOT_HEADING=PLANE_HEADING ;maintain initial hdg AUTOPILOT_APPROACH_HOLD=0 AUTOPILOT_ALTITUDE_HOLD=1 AUTOPILOT_HEADING_HOLD=1 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs ;follow glide path IF lastcall!=200 THEN WHILE ra>205 IF NOT INRANGE(crs+PLANE_HEADING-COURSE+4*(VOR_1_RADIAL-x1),0,360) THEN x2=4 GOSUB land_crs ENDIF WHILE ra>lastcall-45 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE+4*(VOR_1_RADIAL-x1) IF AUTOPILOT_MASTER=0 OR ra>lastcall+10 OR ON_GROUND THEN lastcall=500 GOTO land_end ENDIF GOSUB ap_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE lastcall=lastcall-50 ENDWHILE IF dh!=200 AND gpws>0 THEN PLAY "-200.wav" ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs ENDIF IF NOT INRANGE(crs+PLANE_HEADING-COURSE+3*(VOR_1_RADIAL-x1),0,360) THEN x2=3 GOSUB land_crs ENDIF WHILE ra>105 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE+3*(VOR_1_RADIAL-x1) IF AUTOPILOT_MASTER=0 OR ra>210 OR ON_GROUND THEN lastcall=200 GOTO land_end ENDIF GOSUB ap_trim ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF dh!=100 AND gpws>0 THEN PLAY "-100.wav" ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs IF NOT INRANGE(crs+PLANE_HEADING-COURSE+2*(VOR_1_RADIAL-x1),0,360) THEN x2=2 GOSUB land_crs ENDIF WHILE ra>53 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE+2*(VOR_1_RADIAL-x1) IF AUTOPILOT_MASTER=0 OR ra>110 OR ON_GROUND THEN lastcall=100 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF dh!=50 AND gpws>0 THEN PLAY "-50.wav" ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF x2=YOKE_Y_POSITION IF cat>2 THEN ra1=GROUND_ALTITUDE+FTOM(gear)+4 ;follow flare path and ap=(AUTOPILOT_ALTITUDE-ra1)/54 ; and correct if the vs=VELOCITY_Y/10.8 ; vert spd deviates WHILE ra>43 AUTOPILOT_ALTITUDE=ra1+ra*(ap+vs)-5*VELOCITY_Y AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE IF AUTOPILOT_MASTER=0 OR ra>60 OR ON_GROUND THEN lastcall=50 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE ELSE WHILE ra>43 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE IF AUTOPILOT_MASTER=0 OR ra>60 OR ON_GROUND THEN lastcall=50 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE ENDIF IF gpws>0 THEN PLAY "-40.wav" ENDIF IF cat>1 THEN ra1=GROUND_ALTITUDE+FTOM(gear)+4 IF cat=2 THEN ap=(AUTOPILOT_ALTITUDE-ra1)/44 vs=VELOCITY_Y/8.8 ENDIF WHILE ra>33 AUTOPILOT_ALTITUDE=ra1+ra*(ap+vs)-5*VELOCITY_Y AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE IF AUTOPILOT_MASTER=0 OR ra>50 OR ON_GROUND THEN lastcall=40 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE ra1=GROUND_ALTITUDE+FTOM(gear)+4 ELSE WHILE ra>33 dist=dist1-GROUND_DISTANCE(VOR_1_LAT,VOR_1_LON) AUTOPILOT_ALTITUDE=ra1-dist*gs AUTOPILOT_HEADING=crs+PLANE_HEADING-COURSE IF AUTOPILOT_MASTER=0 OR ra>50 OR ON_GROUND THEN lastcall=40 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE ra1=GROUND_ALTITUDE+FTOM(gear)+4 ap=(AUTOPILOT_ALTITUDE-ra1)/34 vs=VELOCITY_Y/6.8 ENDIF IF gpws>0 THEN PLAY "-30.wav" ENDIF AUTOPILOT_HEADING_HOLD=0 AUTOPILOT_WING_LEVELER=1 ;hold wings level WHILE ra>22 AUTOPILOT_ALTITUDE=ra1+ra*(ap+vs)-5*VELOCITY_Y IF AUTOPILOT_MASTER=0 OR ra>40 OR ON_GROUND THEN lastcall=30 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF dh!=20 AND gpws>0 THEN PLAY "-20.wav" ELSEIF gpws>0 THEN PLAY "-min.wav" ENDIF ra1=GROUND_ALTITUDE+FTOM(gear)+4 WHILE ra>12 AUTOPILOT_ALTITUDE=ra1+ra*(ap+vs)-5*VELOCITY_Y IF AUTOPILOT_MASTER=0 OR ra>30 OR ON_GROUND THEN lastcall=20 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE IF gpws>0 THEN PLAY "-10.wav" ENDIF ra1=GROUND_ALTITUDE+FTOM(gear)+4 WHILE NOT ON_GROUND AUTOPILOT_ALTITUDE=ra1+ra*(ap+vs)-5*VELOCITY_Y IF AUTOPILOT_MASTER=0 OR NOT INRANGE(ra,-30,20) THEN lastcall=10 GOTO land_end ENDIF ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear ENDWHILE ;touchdown:wing lvl off AUTOPILOT_WING_LEVELER=0 ; for manual steering ias=999 ias0=999 lastcall=0 time=0 time0=SECOND x1=1 WHILE ias-ias0<1 ;check for go-around IF AUTOPILOT_MASTER=0 OR ra>20 OR NOT INRANGE(YOKE_Y_POSITION-x2,-5000,5000) THEN GOTO land_end ENDIF GOSUB on_gnd ra=MTOF(PLANE_ALT-GROUND_ALTITUDE)-gear GOSUB time IF time>x1 THEN AUTOPILOT_ALTITUDE=GROUND_ALTITUDE ;after 2sec: nose down ias0=ias ias=VELOCITY_INDICATED x1=x1+2 ENDIF ENDWHILE land_end: PLAY "-apdisco.wav" AUTOPILOT_MASTER=0 AUTOPILOT_ALTITUDE_HOLD=0 AUTOPILOT_HEADING_HOLD=0 AUTOPILOT_WING_LEVELER=0 ap=0 break=0 ra1=0 ON (50-lastcall) IDIV 10 GOTO forty,thirty,twenty,ten,zero ias0=0 trim=ELEVATOR_TRIM_POSITION GOTO gpws_1 land_crs: IF VOR_1_RADIAL-x1>180 THEN x1=x1+360 ELSEIF VOR_1_RADIAL-x1<-180 THEN x1=x1-360 ENDIF x2=crs+PLANE_HEADING-COURSE+x2*(VOR_1_RADIAL-x1) IF x2>360 THEN crs=crs-360 ELSEIF x2<0 THEN crs=crs+360 ENDIF RETURN wpt_nav: GOSUB wpt_trk IF x3>0 THEN atc=-9 ;avoid atc IF warning=0 THEN break=2 IF x3=4 OR x3=8 THEN PLAY "-alarm.wav" PRINT PRINT "WPT NAV OFF" WAIT 1 roll=1 ELSEIF x3=12 THEN GOTO wpt_shift ELSEIF x3<12 THEN PLAY "-alert.wav" GOSUB wpt_info IF x3<4 THEN PRINT " [check wpt]" ELSEIF x3<8 THEN PRINT " [no next wpt]" ELSE PRECISION 2,0,0 PRINT " [WPT",nx," next]" ENDIF x3=x3+1 ELSEIF (INRANGE(trk-PLANE_HEADING,160,200) OR INRANGE(PLANE_HEADING-trk,160,200)) AND AUTOPILOT_MASTER THEN IF aa<2 AND info=1 THEN hdg=trk GOSUB wpt_info PRINT " " ENDIF ELSE GOSUB wpt_hdg x3=0 GOTO wpt_nav ENDIF PRINT_TIME prt break=0 time0=SECOND ENDIF RETURN ELSEIF ttg<.0075 AND dist1<7 THEN ;waypoint shift x3=9 x0=wpt0 wpt0=wpt GOSUB wpt_next GOSUB wpt_load IF lat0=0 AND lon0=0 AND x3=9 THEN nx=-wpt0 ;no next waypoint reset=0 x3=5 ELSE nx=wpt0 wpt0=x0 ENDIF GOTO wpt_nav ELSEIF trk0<0 THEN IF INRANGE(trk-COURSE,-10,10) OR trk-COURSE>350 OR COURSE-trk>350 THEN trk0=trk ;on track ENDIF ELSEIF NOT(INRANGE(trk-trk0,-30,30) OR trk-trk0>330 OR trk0-trk>330) THEN reset=1 ;off track -> check wpt wpt0=wpt x3=1 GOTO wpt_nav ENDIF x0=AUTOPILOT_HEADING-PLANE_HEADING IF INRANGE(PLANE_BANK,-.5,.5) AND (INRANGE(x0,-.3,.3) OR x0>359.7 OR x0<-359.7) THEN wcf=PLANE_HEADING-COURSE ;wind correction factor ENDIF GOSUB wpt_hdg IF info=1 AND roll=8 AND aa<3 THEN break=2 GOSUB wpt_info PRINT " " PRINT_TIME prt break=0 time0=SECOND ENDIF RETURN wpt: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 ADV_KEYS ADD,17,18,20,23,24,31,49,52 PRINT_TIME 20 PLAY "-ss1.wav" PRINT " " WAIT .3,KEYPRESS IF KEY=51 THEN WAIT 0,KEYPRESS GOTO wpt_end ENDIF GOSUB wptxx break=0 keys=0 GOSUB wpt_load WAIT 0 IF KEY=51 THEN WAIT 0,KEYPRESS GOTO wpt_end ENDIF GOSUB wpt_load2 WAIT 0 IF KEY=51 THEN WAIT 0,KEYPRESS GOTO wpt_end ELSEIF KEY=52 THEN WAIT 0,KEYPRESS PRINT " " GOTO dir_to ENDIF GOTO digit wpt_end: WAIT 0 IF KEY=51 THEN PLAY "-ss1.wav" GOTO wpt_off ELSEIF lat=0 AND lon=0 THEN IF roll!=8 AND keys=28 THEN PRINT GOTO wpt_end2 ENDIF PLAY "-ss2.wav" PRINT PRINT "[ERROR> no active wpt]" WAIT 2,KEYPRESS IF KEY=51 THEN PLAY "-ss1.wav" GOTO wpt_off ENDIF wpt0=wpt GOSUB wpt_load GOTO dig11 ELSEIF roll=8 THEN IF nx<0 THEN ON -nx-1 GOSUB ld1,ld2,ld3,ld4,ld5,ld6,ld7,ld8,ld9,ld10,ld11,ld12,ld13,ld14,ld15,ld16,ld17,ld18,ld19,ld20 IF lat0!=0 OR lon0!=0 THEN nx=-nx GOTO wpt_shift ELSEIF reset=0 THEN PLAY "-alarm.wav" GOTO wpt_off ENDIF ENDIF PLAY "-ss1.wav" GOSUB wpt_trk hdg=trk GOSUB wpt_info PRINT " " WAIT 1,KEYPRESS IF KEY=51 THEN PLAY "-ss1.wav" GOTO wpt_off ENDIF ELSE PLAY "-ss1.wav" PRINT PRINT "WPT NAV ON" reset=1 roll=8 roll0=8 WAIT 1,KEYPRESS IF KEY=51 THEN PLAY "-ss1.wav" GOTO wpt_off ENDIF GOSUB wpt_trk hdg=trk PLAY "-ss1.wav" GOSUB wpt_info PRINT " " ENDIF wpt_end2: nx=0 x3=0 IF roll=8 THEN IF lat=0 AND lon=0 THEN PLAY "-alarm.wav" GOTO wpt_off ELSEIF reset=0 AND trk0>=0 AND NOT(INRANGE(trk-trk0,-30,30) OR trk-trk0>330 OR trk0-trk>330) THEN reset=1 ;off track -> check wpt wpt0=wpt x3=1 ELSE x4=trk-PLANE_HEADING IF INRANGE(x4,160,200) OR INRANGE(x4,-200,-160) THEN IF ((INRANGE(x4,-183,-90) OR INRANGE(x4,177,270)) AND PLANE_BANK>-5) OR PLANE_BANK>5 THEN IF trk>270 THEN ;180 turn AUTOPILOT_HEADING=trk-270 ELSE AUTOPILOT_HEADING=trk+90 ENDIF ELSEIF trk>90 THEN AUTOPILOT_HEADING=trk-90 ELSE AUTOPILOT_HEADING=trk+270 ENDIF trk0=-99 wcf=0 x3=13 ELSEIF INRANGE(trk-trk0,-30,30) OR trk-trk0>330 OR trk0-trk>330 THEN IF INRANGE(trk-COURSE,-10,10) OR trk-COURSE>350 OR COURSE-trk>350 THEN trk0=trk ;on track ELSE trk0=-99 ;reset trk0 ENDIF GOSUB wpt_hdg ELSE trk0=-99 wcf=0 ;reset wcf GOSUB wpt_hdg ENDIF IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF reset=0 ENDIF ENDIF wpt_exit: ADV_KEYS DELETE,17,18,23,24,31,52 IF rdkeys<3 THEN ADV_KEYS DELETE,20,49 ENDIF GOTO advkeys_reset wpt_hdg: hdg=trk+wcf IF hdg>360 THEN hdg=hdg-360 ELSEIF hdg<=0 THEN hdg=hdg+360 ENDIF AUTOPILOT_HEADING=hdg RETURN wpt_info: PRINT_TIME 10 PRECISION 2,0,0 PRINT PRINT "WPT",wpt, PRECISION 3,0,0 PRINT " hdg",hdg," trk",trk," ", PRECISION 1,1,1 PRINT dist1,"nm ", PRECISION 2,0,0 PRINT DEGREES(ttg),":",MINUTES(ttg), RETURN wpt_load: ON wpt0-1 GOSUB ld1,ld2,ld3,ld4,ld5,ld6,ld7,ld8,ld9,ld10,ld11,ld12,ld13,ld14,ld15,ld16,ld17,ld18,ld19,ld20 RETURN wpt_load2: IF lat0=0 THEN IF PLANE_LAT>=0 THEN ns=1 ELSE ns=-1 ENDIF ELSEIF lat0>0 THEN ns=1 ELSE ns=-1 ENDIF x5=lat0 IF lat0<0 THEN x5=-x5 ENDIF x1=x5 IDIV 10 x2=INT(x5-x1*10) x5=(x5-x1*10-x2)*600+.05 x3=x5 IDIV 100 x4=(x5-x3*100) IDIV 10 x5=INT(x5-x3*100-x4*10) IF lon0=0 THEN IF INRANGE(PLANE_LON,0,180) THEN we=1 ELSE we=-1 ENDIF ELSEIF lon0>0 THEN we=1 ELSE we=-1 ENDIF x11=lon0 IF lon0<0 THEN x11=-x11 ENDIF x6=x11 IDIV 100 x7=(x11-x6*100) IDIV 10 x8=INT(x11-x6*100-x7*10) x11=(x11-x6*100-x7*10-x8)*600+.05 x9=x11 IDIV 100 x10=(x11-x9*100) IDIV 10 x11=INT(x11-x9*100-x10*10) RETURN wpt_next: wpt0=wpt0+1 IF wpt0>20 THEN wpt0=1 ENDIF RETURN wpt_off: PRINT PRINT "WPT NAV OFF" roll=1 wpt0=wpt PRINT_TIME prt*2 GOSUB fma_2 GOTO wpt_exit wpt_prev: wpt0=wpt0-1 IF wpt0<1 THEN wpt0=20 ENDIF RETURN wpt_save: IF break>0 THEN lat0=ns*(x1*10+x2+x3/6+x4/60+x5/600) lon0=we*(x6*100+x7*10+x8+x9/6+x10/60+x11/600) ON wpt0-1 GOSUB sv1,sv2,sv3,sv4,sv5,sv6,sv7,sv8,sv9,sv10,sv11,sv12,sv13,sv14,sv15,sv16,sv17,sv18,sv19,sv20 IF wpt0=wpt THEN lat=lat0 lon=lon0 reset=1 ENDIF ENDIF RETURN wpt_sel: PLAY "-ss1.wav" PRINT GOSUB wptxx WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS IF KEY=12 OR KEY=26 THEN WAIT 0,KEYPRESS GOSUB wpt_prev GOTO wpt_sel ELSEIF KEY=13 OR KEY=27 THEN WAIT 0,KEYPRESS GOSUB wpt_next GOTO wpt_sel ENDIF break=0 GOSUB wpt_load GOSUB wpt_load2 WAIT 0 IF KEY=12 OR KEY=26 THEN WAIT 0,KEYPRESS GOSUB wpt_prev GOTO wpt_sel ELSEIF KEY=13 OR KEY=27 THEN WAIT 0,KEYPRESS GOSUB wpt_next GOTO wpt_sel ENDIF GOTO digit wpt_shift: PLAY "-wptshft.wav" PRECISION 2,0,0 PRINT_TIME 10 PRINT PRINT "WPT",wpt," -> WPT",nx lat=lat0 lon=lon0 reset=1 roll=8 roll0=8 wpt=nx wpt0=nx GOSUB wpt_next WAIT 2 GOSUB wpt_trk hdg=trk PLAY "-ss1.wav" GOSUB wpt_info PRINT " " GOTO wpt_end2 wpt_trk: trk=RADIAL(lat,lon) trk=trk+180 IF trk>360 THEN trk=trk-360 ENDIF dist1=GROUND_DISTANCE(lat,lon) ttg=dist1/VELOCITY RETURN wptxx: PRECISION 2,0,0 PRINT "WPT",wpt0," >", RETURN wptns: PRECISION 1,0,0 IF ns=1 THEN PRINT "N", ELSE PRINT "S", ENDIF RETURN wptwe: GOSUB wptns PRINT x1,x2,"*",x3,x4,".",x5, IF we=1 THEN PRINT " W", ELSE PRINT " E", ENDIF RETURN dig0: GOSUB wptxx GOSUB wptns PRINT "__*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x1=keys-1 GOTO dig1 ELSEIF keys=11 THEN x1=0 GOTO dig1 ELSEIF keys=15 OR keys=28 THEN ;Tab/Enter GOTO dig5 ELSEIF keys=14 OR keys=83 THEN ;Backspace/Delete PLAY "-ss2.wav" GOTO dig0 ELSEIF keys=17 OR keys=18 THEN ;W/E GOSUB wpt_load GOTO dig_input ELSE dig=0 GOTO dig_input ENDIF dig1: GOSUB wptxx GOSUB wptns PRINT x1,"_*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x2=keys-1 IF x1*10+x2>90 THEN PLAY "-ss2.wav" GOTO dig1 ENDIF GOTO dig2 ELSEIF keys=11 THEN x2=0 GOTO dig2 ELSE dig=1 GOTO dig_input ENDIF dig2: GOSUB wptxx GOSUB wptns PRINT x1,x2,"*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,6) THEN x3=keys-1 GOTO dig3 ELSEIF keys=11 THEN x3=0 GOTO dig3 ELSEIF keys=15 OR keys=28 THEN ;Tab/Enter GOTO dig5x ELSE dig=2 GOTO dig_input ENDIF dig3: GOSUB wptxx GOSUB wptns PRINT x1,x2,"*",x3,"_._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x4=keys-1 GOTO dig4 ELSEIF keys=11 THEN x4=0 GOTO dig4 ELSE dig=3 GOTO dig_input ENDIF dig4: GOSUB wptxx GOSUB wptns PRINT x1,x2,"*",x3,x4,"._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x5=keys-1 GOTO dig5 ELSEIF keys=11 OR keys=15 OR keys=28 THEN ;0/Tab/Enter x5=0 GOTO dig5 ELSE dig=4 GOTO dig_input ENDIF dig5: IF x1*10+x2=90 THEN dig5x: x3=0 x4=0 x5=0 ENDIF GOSUB wptxx GOSUB wptwe PRINT "___*__._" break=2 WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF keys=11 THEN x6=0 GOTO dig6 ELSEIF keys=2 THEN x6=1 GOTO dig6 ELSEIF keys=15 OR keys=28 THEN ;Tab/Enter GOTO dig11 ELSE dig=5 GOTO dig_input ENDIF dig6: GOSUB wptxx GOSUB wptwe PRINT x6,"__*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x7=keys-1 IF x6*10+x7>18 THEN PLAY "-ss2.wav" GOTO dig6 ENDIF GOTO dig7 ELSEIF keys=11 THEN x7=0 GOTO dig7 ELSE dig=6 GOTO dig_input ENDIF dig7: GOSUB wptxx GOSUB wptwe PRINT x6,x7,"_*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x8=keys-1 IF x6*100+x7*10+x8>180 THEN PLAY "-ss2.wav" GOTO dig7 ENDIF GOTO dig8 ELSEIF keys=11 THEN x8=0 GOTO dig8 ELSE dig=7 GOTO dig_input ENDIF dig8: GOSUB wptxx GOSUB wptwe PRINT x6,x7,x8,"*__._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,6) THEN x9=keys-1 GOTO dig9 ELSEIF keys=11 THEN x9=0 GOTO dig9 ELSEIF keys=15 OR keys=28 THEN ;Tab/Enter GOTO dig11x ELSE dig=8 GOTO dig_input ENDIF dig9: GOSUB wptxx GOSUB wptwe PRINT x6,x7,x8,"*",x9,"_._" WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x10=keys-1 GOTO dig10 ELSEIF keys=11 THEN x10=0 GOTO dig10 ELSE dig=9 GOTO dig_input ENDIF dig10: GOSUB wptxx GOSUB wptwe PRINT x6,x7,x8,"*",x9,x10,"._" break=2 WAIT 18,KEYPRESS keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) THEN x11=keys-1 GOTO dig11 ELSEIF keys=11 OR keys=15 OR keys=28 THEN ;0/Tab/Enter x11=0 GOTO dig11 ELSE dig=10 GOTO dig_input ENDIF dig11: IF x6*100+x7*10+x8=180 THEN dig11x: x9=0 x10=0 x11=0 ENDIF GOSUB wptxx digit: GOSUB wptwe PRINT x6,x7,x8,"*",x9,x10,".",x11, IF break=-1 THEN trk=RADIAL(lat0,lon0) trk=trk+180 IF trk>360 THEN trk=trk-360 ENDIF dist1=GROUND_DISTANCE(lat0,lon0) ttg=dist1/VELOCITY PRECISION 3,0,0 PRINT " trk",trk," ", PRECISION 1,1,1 PRINT dist1,"nm ", PRECISION 2,0,0 PRINT DEGREES(ttg),":",MINUTES(ttg) PRECISION 1,0,0 ELSEIF wpt0=wpt AND x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11!=0 THEN IF break=0 AND roll=8 THEN PRINT " [ACTIVE WPT]" ELSE PRINT " [ACTIVATE> Enter]" ENDIF ELSEIF break=0 OR x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11=0 THEN PRINT " " ELSE PRINT " [Enter]" ENDIF WAIT 0 IF KEY=0 THEN WAIT 3,KEYPRESS IF KEY=0 THEN IF break=2 THEN break=1 ENDIF WAIT 15,KEYPRESS ENDIF ENDIF keys=KEY WAIT 0,KEYPRESS IF INRANGE(keys,2,10) AND break!=2 THEN x1=keys-1 GOTO dig1 ELSEIF keys=11 AND break!=2 THEN x1=0 GOTO dig1 ELSEIF keys=12 OR keys=26 THEN ;- [ GOSUB wpt_save GOSUB wpt_prev GOTO wpt_sel ELSEIF keys=13 OR keys=27 THEN ;+ ] GOSUB wpt_save GOSUB wpt_next GOTO wpt_sel ELSEIF keys=28 THEN ;Enter IF break>0 THEN GOSUB wpt_save GOSUB wpt_next ENDIF WAIT 0 IF break<1 OR KEY=28 THEN GOTO wpt_end ENDIF PLAY "-ss1.wav" GOSUB wptxx break=0 GOSUB wpt_load GOSUB wpt_load2 WAIT 0 IF KEY=28 THEN GOTO wpt_end ENDIF GOTO digit ELSEIF keys=51 THEN ;< GOSUB wpt_save GOTO wpt_end ELSEIF keys=15 THEN ;Tab PLAY "-ss1.wav" GOSUB wpt_save IF wpt0=wpt THEN wpt0=wpt+1 IF wpt0>20 THEN wpt0=1 ENDIF ELSE wpt0=wpt ENDIF PRECISION 2,0,0 PRINT "WPT",wpt," >", break=0 GOSUB wpt_load GOSUB wpt_load2 GOTO digit ELSEIF keys=20 THEN ;T track, dist and time info IF break=-1 THEN break=0 PLAY "-ss1.wav" ELSEIF x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11!=0 THEN GOSUB wpt_save break=-1 PLAY "-ss1.wav" ELSE PLAY "-ss2.wav" ENDIF GOTO dig11 ELSEIF keys=52 THEN ;> GOTO dir_to ENDIF dig=11 dig_input: IF keys=14 THEN ;Backspace dig=dig-1 ELSEIF keys=49 AND (dig<6 OR dig=8 OR dig=11) THEN ;N ns=1 GOTO dig0 ELSEIF keys=31 AND (dig<6 OR dig=8 OR dig=11) THEN ;S ns=-1 GOTO dig0 ELSEIF keys=17 AND (dig>4 OR dig=0 OR dig=2) THEN ;W we=1 GOTO dig5 ELSEIF keys=18 AND (dig>4 OR dig=0 OR dig=2) THEN ;E we=-1 GOTO dig5 ELSEIF keys=23 THEN ;I wpt info info: PLAY "-ss1.wav" IF info=1 THEN PRINT "WPT INFO OFF" info=0 ELSE PRINT "WPT INFO ON" info=1 ENDIF WAIT 2,KEYPRESS IF KEY=23 THEN WAIT 0,KEYPRESS GOTO info ENDIF WAIT 0,KEYPRESS ON dig GOTO dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8,dig9,dig10,dig11 ELSEIF keys=24 THEN ;O position pos: PLAY "-ss1.wav" PRINT "POS ", lat0=PLANE_LAT lon0=PLANE_LON IF lon0>180 THEN lon0=lon0-360 ENDIF PRECISION 2,0,0 IF lat0>=0 THEN PRINT "N",INT(lat0),"*", PRECISION 2,1,1 PRINT (lat0-INT(lat0))*60, ELSE PRINT "S",INT(-lat0),"*", PRECISION 2,1,1 PRINT (-lat0-INT(-lat0))*60, ENDIF PRECISION 3,0,0 IF lon0>0 THEN PRINT " W",INT(lon0),"*", PRECISION 2,1,1 PRINT (lon0-INT(lon0))*60," [Enter/Esc]" ELSE PRINT " E",INT(-lon0),"*", PRECISION 2,1,1 PRINT (-lon0-INT(-lon0))*60," [Enter/Esc]" ENDIF WAIT 18,KEYPRESS IF KEY=24 THEN WAIT 0,KEYPRESS GOTO pos ELSEIF KEY=28 THEN PLAY "-ss1.wav" break=1 GOSUB wpt_load2 dig=11 ENDIF GOSUB wpt_load WAIT 0,KEYPRESS ON dig GOTO dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8,dig9,dig10,dig11 ELSEIF keys=83 THEN ;Delete GOSUB wptxx IF break<1 THEN break=1 lat0=0 lon0=0 GOSUB wpt_load2 GOSUB wpt_save ELSE GOSUB wpt_load2 ENDIF break=0 GOTO digit ELSEIF keys=1 THEN ;Esc IF roll=8 THEN GOSUB wpt_trk IF info=1 THEN hdg=trk GOSUB wpt_info PRINT " " GOTO wpt_end2 ENDIF ELSEIF dig=11 THEN GOSUB wpt_save ENDIF PRINT GOTO wpt_end2 ELSEIF keys=57 THEN ;Space PLAY "-ss1.wav" PRINT_TIME prt*2 GOSUB fma_2 IF roll=8 THEN GOSUB wpt_trk ELSEIF dig=11 THEN GOSUB wpt_save ENDIF GOTO wpt_end2 ELSEIF keys!=0 THEN PLAY "-ss2.wav" ENDIF ON dig GOTO dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7,dig8,dig9,dig10,dig11 dir_to: PLAY "-ss1.wav" GOSUB wpt_save PRECISION 2,0,0 break=0 IF wpt0!=wpt OR roll!=8 THEN PRINT "DIRECT TO WPT",wpt0 IF lat0!=0 OR lon0!=0 THEN GOTO dir_to2 ENDIF ENDIF FOR x1=1 TO 19 GOSUB wpt_next GOSUB wpt_load IF (lat0!=0 OR lon0!=0) AND (wpt0!=wpt OR roll!=8) THEN GOTO dir_to2 ENDIF PRINT "DIRECT TO WPT",wpt0," [searching]" NEXT x1 wpt0=wpt PLAY "-ss2.wav" IF lat=0 AND lon=0 THEN PRINT "[ERROR> no wpt]" ELSE PRINT "[ERROR> no next wpt]" GOSUB wpt_next ENDIF WAIT 0,KEYPRESS GOSUB wpt_load GOSUB wpt_load2 WAIT 2,KEYPRESS GOTO dig11 dir_to2: WAIT 0,KEYPRESS PRINT "DIRECT TO WPT",wpt0," [ACTIVATE> Enter]" WAIT 18,KEYPRESS IF KEY=52 THEN PLAY "-ss1.wav" WHILE 1 GOSUB wpt_next GOSUB wpt_load IF (lat0!=0 OR lon0!=0) AND (wpt0!=wpt OR roll!=8) THEN GOTO dir_to2 ENDIF PRINT "DIRECT TO WPT",wpt0," [searching]" ENDWHILE ELSEIF KEY=28 THEN PLAY "-wptshft.wav" PRINT "DIRECT TO WPT",wpt0 lat=lat0 lon=lon0 nx=0 reset=1 wpt=wpt0 WAIT 2 GOTO wpt_end ENDIF GOSUB wpt_load2 PLAY "-ss2.wav" WAIT 0,KEYPRESS GOTO dig11 hdg_sel: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 3,0,0 hdg0: hdg=INT(AUTOPILOT_HEADING+.5) hdg_crs: keys=0 PLAY "-ss1.wav" PRINT WHILE 1 hdg1: WAIT 0 IF KEY=0 THEN PRINT "HDG ",hdg,"<" WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys!=1 THEN hdg=0 keys=1 ENDIF hdg=hdg*10+break-1 IF hdg>360 THEN hdg=0 PLAY "-ss2.wav" ENDIF GOTO hdg1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys!=1 THEN hdg=0 keys=1 ENDIF hdg=hdg*10 IF hdg>360 THEN hdg=0 PLAY "-ss2.wav" ENDIF GOTO hdg1 ELSEIF KEY=12 THEN ;hdg - WHILE KEY=12 hdg=hdg-10 IF hdg<1 THEN hdg=hdg+360 ENDIF PRINT "HDG ",hdg,"<" WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_HEADING=hdg keys=2 GOTO hdg1 ELSEIF KEY=13 THEN ;hdg + WHILE KEY=13 hdg=hdg+10 IF hdg>360 THEN hdg=hdg-360 ENDIF PRINT "HDG ",hdg,"<" WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_HEADING=hdg keys=2 GOTO hdg1 ELSEIF KEY=26 THEN ;hdg [ WHILE KEY=26 hdg=hdg-1 IF hdg<1 THEN hdg=hdg+360 ENDIF PRINT "HDG ",hdg,"<" WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_HEADING=hdg keys=2 GOTO hdg1 ELSEIF KEY=27 THEN ;hdg ] WHILE KEY=27 hdg=hdg+1 IF hdg>360 THEN hdg=hdg-360 ENDIF PRINT "HDG ",hdg,"<" WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_HEADING=hdg keys=2 GOTO hdg1 ELSEIF KEY=28 THEN ;Enter WAIT 0,KEYPRESS PLAY "-ss1.wav" IF (INRANGE(hdg-PLANE_HEADING,165,195) OR INRANGE(PLANE_HEADING-hdg,165,195)) AND AUTOPILOT_MASTER THEN GOTO hdg_lr ENDIF AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF PRINT_TIME prt PRINT "HDG ",hdg," ", ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 roll=1 roll0=1 GOTO advkeys_reset ELSEIF KEY=41 THEN ;hdg hold WAIT 0,KEYPRESS PLAY "-ss1.wav" PRINT_TIME prt WAIT 0 IF KEY=!41 THEN PRINT "HDG HOLD ", ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 hdg=INT(PLANE_HEADING+.5) AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF roll=1 roll0=1 WAIT 1,KEYPRESS ENDIF IF KEY=41 THEN ;hdg off PLAY "-ss1.wav" PRINT "HDG OFF ", ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 AUTOPILOT_HEADING_HOLD=0 roll=0 roll0=0 ELSEIF KEY=43 THEN ;alt_sel WAIT 0,KEYPRESS GOTO alt0 ELSEIF KEY!=0 THEN PLAY "-ss2.wav" ENDIF GOTO advkeys_reset ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS keys=1 hdg=(hdg+.1) IDIV 10 ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" hdg=hdg+180 IF hdg>360 THEN hdg=hdg-360 ENDIF keys=0 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS GOTO hdg0 ELSEIF KEY=1 OR KEY>500 THEN ;Esc PRINT IF KEY>500 THEN PLAY "-ss2.wav" ENDIF IF keys>0 AND AUTOPILOT_HEADING_HOLD=0 THEN ;preset AUTOPILOT_HEADING=hdg ENDIF GOTO advkeys_reset ELSEIF KEY=57 THEN ;Space PLAY "-ss1.wav" IF keys>0 AND AUTOPILOT_HEADING_HOLD=0 THEN ;preset AUTOPILOT_HEADING=hdg ENDIF GOSUB advkeys_reset GOTO fma_2 ELSEIF KEY=43 THEN ;alt_sel WAIT 0,KEYPRESS IF keys>0 THEN AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 roll=1 roll0=1 ENDIF ENDIF GOTO alt0 ELSEIF KEY=shift+49 THEN ;(Shift)n WAIT 0,KEYPRESS PLAY "-ss1.wav" hdg=VOR_1_OBS keys=3 ELSEIF KEY=shift+50 THEN ;(Shift)m WAIT 0,KEYPRESS PLAY "-ss1.wav" hdg=VOR_2_OBS keys=3 ELSEIF KEY=shift+30 THEN ;(Shift)a WAIT 0,KEYPRESS IF ADF_RADIAL=0 THEN PLAY "-ss2.wav" hdg=INT(PLANE_HEADING+.5) ELSE PLAY "-ss1.wav" crs=INT(ADF_RADIAL-MAGVAR+180.5) GOSUB crs hdg=crs ENDIF keys=3 ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE hdg_lr: break=3 IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING=PLANE_HEADING AUTOPILOT_HEADING_HOLD=1 ENDIF IF ((INRANGE(PLANE_HEADING-hdg,90,183) OR INRANGE(PLANE_HEADING-hdg,-270,-177)) AND PLANE_BANK>-5) OR PLANE_BANK>5 THEN PRINT "HDG <-" ;standard turn over left WHILE break WAIT 1,KEYPRESS IF KEY=15 OR KEY=28 THEN ;turn over right if Tab/Enter IF hdg>90 THEN AUTOPILOT_HEADING=hdg-90 ELSE AUTOPILOT_HEADING=hdg+270 ENDIF PLAY "-ss1.wav" PRINT "HDG ->" WAIT 2 break=1 ELSEIF break=3 THEN ;after 1sec start left turn IF hdg>270 THEN AUTOPILOT_HEADING=hdg-270 ELSE AUTOPILOT_HEADING=hdg+90 ENDIF ENDIF break=break-1 ENDWHILE ELSE PRINT "HDG ->" ;turn over right WHILE break WAIT 1,KEYPRESS IF KEY=15 OR KEY=28 THEN ;turn over left if Tab/Enter IF hdg>270 THEN AUTOPILOT_HEADING=hdg-270 ELSE AUTOPILOT_HEADING=hdg+90 ENDIF PLAY "-ss1.wav" PRINT "HDG <-" WAIT 2 break=1 ELSEIF break=3 THEN ;after 1sec start right turn IF hdg>90 THEN AUTOPILOT_HEADING=hdg-90 ELSE AUTOPILOT_HEADING=hdg+270 ENDIF ENDIF break=break-1 ENDWHILE ENDIF WAIT 0,KEYPRESS PLAY "-ss1.wav" PRINT "HDG ",hdg," ", ON pitch GOSUB pitch0,pitch1,pitch2,pitch3 ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed0 roll=1 roll0=1 time=0 time0=SECOND WHILE ((INRANGE(PLANE_HEADING-hdg,-195,-165) OR INRANGE(PLANE_HEADING-hdg,165,195)) AND time<18) OR time<3 WAIT 0 IF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF GOSUB time ENDWHILE PRINT AUTOPILOT_HEADING=hdg GOTO advkeys_reset alt_sel: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 3,0,0 alt0: alt=(MTOF(AUTOPILOT_ALTITUDE)+50) IDIV 100 keys=0 PLAY "-ss1.wav" PRINT WHILE 1 alt1: WAIT 0 IF KEY=0 THEN ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00<" alt2: WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys!=1 THEN alt=0 keys=1 ENDIF alt=alt*10+break-1 IF alt>999 THEN alt=0 PLAY "-ss2.wav" ENDIF GOTO alt1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys!=1 THEN alt=0 keys=1 ENDIF alt=alt*10 IF alt>999 THEN alt=0 PLAY "-ss2.wav" ENDIF GOTO alt1 ELSEIF KEY=12 THEN ;alt - WHILE KEY=12 alt=alt-10 IF alt<0 THEN alt=0 ENDIF ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00<" WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_ALTITUDE=FTOM(alt)*100 keys=2 GOTO alt1 ELSEIF KEY=13 THEN ;alt + WHILE KEY=13 alt=alt+10 IF alt>999 THEN alt=999 ENDIF ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00<" WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_ALTITUDE=FTOM(alt)*100 keys=2 GOTO alt1 ELSEIF KEY=26 THEN ;alt [ WHILE KEY=26 alt=alt-1 IF alt<0 THEN alt=0 ENDIF ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00<" WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_ALTITUDE=FTOM(alt)*100 keys=2 GOTO alt1 ELSEIF KEY=27 THEN ;alt ] WHILE KEY=27 alt=alt+1 IF alt>999 THEN alt=999 ENDIF ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00<" WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE AUTOPILOT_ALTITUDE=FTOM(alt)*100 keys=2 GOTO alt1 ELSEIF KEY=28 THEN ;Enter PLAY "-ss1.wav" AUTOPILOT_ALTITUDE=FTOM(alt)*100 AUTOPILOT_ALTITUDE_HOLD=1 PRINT_TIME prt ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ",alt,"00 ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 pitch=1 pitch0=1 GOTO advkeys_reset ELSEIF KEY=43 THEN ;alt hold WAIT 0,KEYPRESS PLAY "-ss1.wav" PRINT_TIME prt WAIT 0 IF KEY=!43 THEN ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT HOLD ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 alt=(MTOF(PLANE_ALT)+50) IDIV 100 AUTOPILOT_ALTITUDE=FTOM(alt)*100 AUTOPILOT_ALTITUDE_HOLD=1 pitch=1 pitch0=1 WAIT 1,KEYPRESS ENDIF IF KEY=43 THEN ;alt off PLAY "-ss1.wav" ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT OFF ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 AUTOPILOT_ALTITUDE_HOLD=0 pitch=0 pitch0=0 ELSEIF KEY=41 THEN ;hdg_sel WAIT 0,KEYPRESS GOTO hdg0 ELSEIF KEY=40 AND AUTOPILOT_MASTER THEN ;vs_mode WAIT 0,KEYPRESS GOTO vs_0 ELSEIF KEY!=0 THEN PLAY "-ss2.wav" ENDIF GOTO advkeys_reset ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS keys=1 alt=(alt+.1) IDIV 10 ELSEIF KEY=15 OR KEY=83 THEN ;Tab/Delete WAIT 0,KEYPRESS GOTO alt0 ELSEIF KEY=1 OR KEY>500 THEN ;Esc PRINT IF KEY>500 THEN PLAY "-ss2.wav" ENDIF IF keys>0 AND AUTOPILOT_ALTITUDE_HOLD=0 THEN ;preset AUTOPILOT_ALTITUDE=FTOM(alt)*100 ENDIF GOTO advkeys_reset ELSEIF KEY=57 THEN ;Space PLAY "-ss1.wav" IF keys>0 AND AUTOPILOT_ALTITUDE_HOLD=0 THEN ;preset AUTOPILOT_ALTITUDE=FTOM(alt)*100 ENDIF GOSUB advkeys_reset GOTO fma_2 ELSEIF KEY=41 THEN ;hdg_sel WAIT 0,KEYPRESS IF keys>0 THEN AUTOPILOT_ALTITUDE=FTOM(alt)*100 AUTOPILOT_ALTITUDE_HOLD=1 pitch=1 pitch0=1 ENDIF GOTO hdg0 ELSEIF KEY=40 AND AUTOPILOT_MASTER THEN ;vs_mode WAIT 0,KEYPRESS AUTOPILOT_ALTITUDE=FTOM(alt)*100 AUTOPILOT_ALTITUDE_HOLD=1 pitch=1 pitch0=1 GOTO vs_0 ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN vs_mode: ra1=0 IF break>1 OR roll=8 OR AUTOPILOT_MASTER=0 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 WAIT 0,KEYPRESS PRINT_TIME 20 PRECISION 3,0,0 vs_0: PLAY "-ss1.wav" PRINT ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 vs=((VELOCITY_Y*197) IDIV 100)*100 IF INRANGE(vs,-250,250) THEN vs=.001 ELSEIF vs<0 THEN IF vs<-1800 THEN vs=-1800 ENDIF vs=vs-.001 ELSE IF vs>1800 THEN vs=1800 ENDIF vs=vs+.001 ENDIF IF vs<0 THEN PRINT "V/S ",vs," [-/+]" ELSE PRINT "V/S +",vs," [-/+]" ENDIF IF cat=1 THEN x2=.8 ELSEIF cat=2 THEN x2=.6 ELSEIF cat=3 THEN x2=.4 ELSE x2=.2 ENDIF GOSUB fma_mode x1=vs/50 AUTOPILOT_ALTITUDE=PLANE_ALT+x1 AUTOPILOT_ALTITUDE_HOLD=1 WAIT 0 GOTO vs_2 vs_1: ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 IF vs<0 THEN PRINT "V/S ",vs ELSE PRINT "V/S +",vs ENDIF x1=x1+x2*(vs/190-VELOCITY_Y) AUTOPILOT_ALTITUDE=PLANE_ALT+x1 WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS vs_2: IF KEY=26 THEN ;v/s [ vs=vs-50 IF vs<-2001 THEN vs=-2000.001 ENDIF GOTO vs_1 ELSEIF KEY=27 THEN ;v/s ] vs=vs+50 IF vs>2001 THEN vs=2000.001 ENDIF GOTO vs_1 ELSEIF KEY=12 THEN ;v/s - vs=vs-200 IF vs<-2001 THEN vs=-2000.001 ENDIF GOTO vs_1 ELSEIF KEY=13 THEN ;v/s + vs=vs+200 IF vs>2001 THEN vs=2000.001 ENDIF GOTO vs_1 ELSEIF KEY<99 THEN IF INRANGE(KEY,2,10) THEN ;1-9 PLAY "-ss1.wav" IF vs<0 THEN vs=(1-KEY)*100-.001 ELSE vs=(KEY-1)*100+.001 ENDIF GOTO vs_1 ELSEIF KEY=11 OR KEY=14 THEN ;0/Backspace PLAY "-ss1.wav" IF vs<0 THEN vs=-.001 ELSE vs=.001 ENDIF x1=0 GOTO vs_1 ELSEIF KEY=15 THEN ;Tab PLAY "-ss1.wav" vs=vs*-1 GOTO vs_1 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS IF pitch!=1 THEN AUTOPILOT_ALTITUDE_HOLD=0 ENDIF GOTO vs_0 ELSEIF KEY=1 THEN ;Esc PRINT IF pitch!=1 THEN AUTOPILOT_ALTITUDE_HOLD=0 ENDIF AUTOPILOT_ALTITUDE=FTOM(alt)*100 GOTO advkeys_reset ELSEIF KEY=28 OR KEY=40 OR KEY=57 THEN ;Enter/vs_mode/Space GOTO vs_off ELSEIF KEY=43 THEN ;alt_sel WAIT 0,KEYPRESS IF pitch!=1 THEN AUTOPILOT_ALTITUDE_HOLD=0 ENDIF AUTOPILOT_ALTITUDE=FTOM(alt)*100 GOTO alt0 ELSEIF KEY!=0 THEN PLAY "-ss2.wav" GOTO vs_1 ENDIF ELSEIF KEY=587 THEN hdg=hdg-10 IF hdg<1 THEN hdg=hdg+360 ENDIF PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg GOTO vs_wait ELSEIF KEY=589 THEN hdg=hdg+10 IF hdg>360 THEN hdg=hdg-360 ENDIF PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg GOTO vs_wait ELSEIF KEY=591 THEN hdg=hdg-1 IF hdg<1 THEN hdg=hdg+360 ENDIF PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg GOTO vs_wait ELSEIF KEY=593 THEN hdg=hdg+1 IF hdg>360 THEN hdg=hdg-360 ENDIF PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg GOTO vs_wait ELSEIF KEY=592 THEN alt=((alt*2+9) IDIV 10)*5-5 IF alt<0 THEN alt=0 ENDIF PRINT "ALT ",alt,"00" GOTO vs_wait ELSEIF KEY=584 THEN alt=((alt*2) IDIV 10)*5+5 IF alt>999 THEN alt=999 ENDIF PRINT "ALT ",alt,"00" GOTO vs_wait ELSEIF KEY=585 THEN ;alt WAIT 0,KEYPRESS PLAY "-ss1.wav" WAIT .5,KEYPRESS IF KEY=585 THEN PLAY "-ss1.wav" PRINT_TIME prt PRINT "ALT HOLD" alt=(MTOF(PLANE_ALT)+50) IDIV 100 AUTOPILOT_ALTITUDE=FTOM(alt)*100 pitch=1 pitch0=1 GOTO advkeys_reset ENDIF PRINT "ALT ",alt,"00" pitch=1 GOTO vs_wait ELSEIF KEY=583 THEN ;hdg WAIT 0,KEYPRESS IF AUTOPILOT_LOCALIZER_HOLD OR AUTOPILOT_APPROACH_HOLD THEN PLAY "-ss2.wav" GOTO vs_1 ENDIF PLAY "-ss1.wav" WAIT .5,KEYPRESS IF KEY=583 THEN PLAY "-ss1.wav" PRINT "HDG HOLD" hdg=INT(PLANE_HEADING+.5) ELSE PRINT "HDG ",hdg ENDIF AUTOPILOT_HEADING=hdg AUTOPILOT_HEADING_HOLD=1 roll=1 GOTO vs_wait ELSE PLAY "-ss2.wav" GOTO vs_1 ENDIF time0=SECOND break=0 WHILE 1 x1=x1+x2*(vs/190-VELOCITY_Y) IF x1<-40 THEN x1=-40 ELSEIF x1>40 THEN x1=40 ENDIF AUTOPILOT_ALTITUDE=PLANE_ALT+x1 GOSUB time WAIT 0 IF AUTOPILOT_ALTITUDE_HOLD=0 THEN GOTO vs_off ELSEIF KEY!=0 THEN GOTO vs_2 ELSEIF time>break THEN dist=alt*100-MTOF(PLANE_ALT) IF dist/vs>0 AND NOT INRANGE(vs,-1,1) AND NOT INRANGE(dist,-50,50) THEN GOTO vs_3 ELSEIF break>15 THEN GOTO vs_1 ENDIF break=break+4 ENDIF ENDWHILE vs_3: ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 IF vs<0 THEN PRINT "V/S ",vs," [ALT ",alt,"00]" ELSE PRINT "V/S +",vs," [ALT ",alt,"00]" ENDIF time0=SECOND IF aa!=0 AND NOT INRANGE(FTOM(alt)*100-PLANE_ALT,-230,230) THEN aa=0 ENDIF WHILE 1 x1=x1+x2*(vs/190-VELOCITY_Y) IF x1<-40 THEN x1=-40 ELSEIF x1>40 THEN x1=40 ENDIF AUTOPILOT_ALTITUDE=PLANE_ALT+x1 GOSUB time WAIT 0 IF AUTOPILOT_ALTITUDE_HOLD=0 THEN GOTO vs_off ELSEIF KEY!=0 THEN GOTO vs_2 ELSEIF aa=0 AND INRANGE(FTOM(alt)*100-PLANE_ALT,-230,230) THEN PLAY "-altalrt.wav" aa=2 alt0=AUTOPILOT_ALTITUDE ELSEIF INRANGE((alt*100-MTOF(PLANE_ALT))/vs,0,.07) THEN PLAY "-ss1.wav" ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT ACQ" AUTOPILOT_ALTITUDE=FTOM(alt)*100 time=0 time0=SECOND WHILE time<18 WAIT 0 IF AUTOPILOT_ALTITUDE_HOLD=0 THEN GOTO vs_off ELSEIF KEY!=0 THEN GOTO vs_2 ELSEIF INRANGE(AUTOPILOT_ALTITUDE-PLANE_ALT,-6,6) THEN PLAY "-ss1.wav" PRINT_TIME prt ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "ALT HOLD ", ON armed GOSUB armed0,armed1,armed2,armed3,armed4,armed5,armed6,armed7 aa=0 pitch=1 pitch0=1 GOTO advkeys_reset ENDIF GOSUB time ENDWHILE GOTO vs_1 ELSEIF time>18 THEN GOTO vs_3 ENDIF ENDWHILE vs_wait: FOR break=1 to 3 x1=x1+x2*(vs/190-VELOCITY_Y) AUTOPILOT_ALTITUDE=PLANE_ALT+x1 WAIT 0 WAIT 0,KEYPRESS WAIT .3,KEYPRESS IF KEY!=0 THEN GOTO vs_2 ENDIF NEXT break GOTO vs_1 vs_off: PLAY "-ss1.wav" PRINT_TIME prt ON roll GOSUB roll0,roll1,roll2,roll3,roll4,roll5,roll6,roll7,roll8 PRINT "V/S OFF" IF pitch!=1 THEN AUTOPILOT_ALTITUDE_HOLD=0 ENDIF AUTOPILOT_ALTITUDE=FTOM(alt)*100 IF (AUTOPILOT_MASTER AND pitch>0) OR KEY=57 THEN WAIT 0,KEYPRESS GOSUB fma_2 ENDIF GOTO advkeys_reset hdg: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF PLAY "-ss1.wav" PRECISION 3,0,0 PRINT x0=60*MINUTE+SECOND+time IF x0<0 THEN x0=x0+3600 ENDIF IF x0360 THEN hdg=hdg-360 ENDIF PRECISION 3,0,0 PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg RETURN hdg_l1: hdg=hdg-1 IF hdg<1 THEN hdg=hdg+360 ENDIF PRECISION 3,0,0 PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg RETURN hdg_r1: hdg=hdg+1 IF hdg>360 THEN hdg=hdg-360 ENDIF PRECISION 3,0,0 PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg RETURN alt: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF PLAY "-ss1.wav" PRECISION 3,0,0 PRINT PRINT "ALT ",alt,"00" WAIT 0 IF KEY=0 THEN WAIT .5,KEYPRESS ENDIF IF KEY=585 THEN WAIT 0,KEYPRESS PLAY "-ss1.wav" PRINT "ALT HOLD" alt=(MTOF(PLANE_ALT)+50) IDIV 100 WAIT 0 IF KEY=0 THEN WAIT .5,KEYPRESS ENDIF IF KEY=585 THEN PLAY "-ss1.wav" PRINT "ALT OFF" AUTOPILOT_ALTITUDE_HOLD=0 break=1 pitch=0 pitch0=0 WAIT 0,KEYPRESS RETURN ENDIF ENDIF AUTOPILOT_ALTITUDE=FTOM(alt)*100 AUTOPILOT_ALTITUDE_HOLD=1 break=1 pitch=1 pitch0=1 WAIT 0 IF KEY=583 THEN GOTO hdg ENDIF WAIT 0,KEYPRESS RETURN alt_dn: alt=((alt*2+9) IDIV 10)*5-5 IF alt<0 THEN alt=0 ENDIF PRECISION 3,0,0 PRINT "ALT ",alt,"00" AUTOPILOT_ALTITUDE=FTOM(alt)*100 RETURN alt_up: alt=((alt*2) IDIV 10)*5+5 IF alt>999 THEN alt=999 ENDIF PRECISION 3,0,0 PRINT "ALT ",alt,"00" AUTOPILOT_ALTITUDE=FTOM(alt)*100 RETURN nav_crs: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF PLAY "-ss1.wav" PRECISION 3,0,0 PRINT PRINT "NAV1 CRS" PRINT_TIME prt*2 WAIT 1,KEYPRESS IF KEY=588 THEN WAIT 0,KEYPRESS PLAY "-ss1.wav" WAIT 1,KEYPRESS IF KEY=588 THEN WAIT 0,KEYPRESS PRINT "NAV2 CRS" PLAY "-ss1.wav" WAIT 1,KEYPRESS IF VOR_2_ACTIVE=0 THEN PLAY "-ss2.wav" PRINT_TIME prt PRINT "NAV2 OFF" ELSEIF KEY=588 THEN ;from2 PLAY "-ss1.wav" crs=INT(VOR_2_RADIAL-MAGVAR+.5) GOSUB crs VOR_2_OBS=crs PRINT "NAV2 CRS ",crs," FROM" time=-60*MINUTE-SECOND ELSE ;to2 crs=INT(VOR_2_RADIAL-MAGVAR+180.5) GOSUB crs VOR_2_OBS=crs PRINT "NAV2 CRS ",crs," TO" time=-60*MINUTE-SECOND ENDIF ELSE break=2 GOTO nav1_crs ENDIF ELSE nav1_crs: IF VOR_1_ACTIVE=0 THEN PLAY "-ss2.wav" PRINT_TIME prt PRINT "NAV1 OFF" ELSEIF VOR_1_LOCALIZER_AVAIL THEN crs=INT(VOR_1_LOCALIZER-MAGVAR+.5) GOSUB crs VOR_1_OBS=crs IF VOR_1_GS_AVAIL THEN PRINT "NAV1 CRS ",crs," ILS" ELSE PRINT "NAV1 CRS ",crs," LOC" ENDIF ELSEIF break=2 THEN ;from1 crs=INT(VOR_1_RADIAL-MAGVAR+.5) GOSUB crs VOR_1_OBS=crs PRINT "NAV1 CRS ",crs," FROM" time=-60*MINUTE-SECOND ELSE ;to1 crs=INT(VOR_1_RADIAL-MAGVAR+180.5) GOSUB crs VOR_1_OBS=crs PRINT "NAV1 CRS ",crs," TO" time=-60*MINUTE-SECOND ENDIF ENDIF PRINT_TIME prt break=1 WAIT 0 IF KEY=583 THEN GOTO hdg ENDIF WAIT 0,KEYPRESS RETURN nav1: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28,259 PRINT_TIME 20 PRECISION 3,2,2 keys=0 x2=100 x1=NAV1_FREQ PLAY "-ss1.wav" WAIT .3,KEYPRESS IF KEY=3 OR KEY=259 THEN ;(Shift)2 WAIT 0,KEYPRESS x1=NAV2_FREQ GOTO n2 ELSEIF KEY=shift+50 THEN ;(Shift)m PLAY "-ss1.wav" NAV1_FREQ=NAV2_FREQ NAV2_FREQ=x1 crs=VOR_1_OBS VOR_1_OBS=VOR_2_OBS VOR_2_OBS=crs ADV_KEYS DELETE,259 GOTO advkeys_reset ELSEIF KEY=shift+49 OR rdkeys=1 THEN ;(Shift)n PLAY "-ss1.wav" NAV1_FREQ=nav1 nav1=x1 ADV_KEYS DELETE,259 GOTO advkeys_reset ENDIF PRINT WHILE 1 nav1_1: WAIT 0 IF KEY=0 THEN PRINT "NAV1 >",x1," [",nav1,"]" WAIT 18,KEYPRESS ENDIF IF keys=0 AND (KEY=3 OR KEY=259) THEN ;(Shift)2 ADV_KEYS DELETE,259 WAIT 0,KEYPRESS PLAY "-ss1.wav" keys=0 x2=100 x1=NAV2_FREQ PRINT GOTO n2 ELSEIF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x1=x1+(break-1)*x2 x2=x2/10 GOTO nav1_1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x2=x2/10 GOTO nav1_1 ELSEIF KEY=28 THEN ;Enter WAIT 0,KEYPRESS IF INRANGE(x1,108,117.95) THEN NAV1_FREQ=x1 ADV_KEYS DELETE,259 GOTO crs1 ENDIF PLAY "-ss2.wav" x1=0 x2=100 ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF x2<.005 OR keys=0 THEN keys=1 x2=INT(x1*100+.05)/100 x1=INT(x2*10+.05)/10 IF x1=x2 THEN x1=INT(x1) x2=.1 ELSE x2=.01 ENDIF ELSEIF x2<100 THEN x2=INT(x2*100+.05) x1=INT(x1/x2)*x2 x2=x2/10 ENDIF ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" x2=x1 x1=nav1 nav1=x2 keys=0 x2=100 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS PLAY "-ss1.wav" keys=0 x2=100 x1=NAV1_FREQ ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT ADV_KEYS DELETE,259 GOTO advkeys_reset ELSEIF KEY=shift+49 THEN ;(Shift)n PLAY "-ss2.wav" PRINT NAV1_FREQ=nav1 nav1=x1 ADV_KEYS DELETE,259 GOTO advkeys_reset ELSEIF KEY=shift+50 THEN ;(Shift)m PLAY "-ss2.wav" PRINT IF NOT INRANGE(x1,108,117.95) THEN x1=NAV1_FREQ ENDIF NAV1_FREQ=NAV2_FREQ NAV2_FREQ=x1 crs=VOR_1_OBS VOR_1_OBS=VOR_2_OBS VOR_2_OBS=crs ADV_KEYS DELETE,259 GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE crs1: time=2 keys=0 x2=0 x1=NAV1_FREQ crs=VOR_1_OBS PLAY "-ss1.wav" WHILE 1 crs1_1: WAIT 0 IF KEY=0 THEN PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" crs1_2: WAIT time,KEYPRESS ENDIF IF KEY=0 AND time=2 THEN ;NAV radio needs 2sec before time=17 ;it recieves a localizer crs IF keys=0 AND VOR_1_LOCALIZER_AVAIL THEN crs=INT(VOR_1_LOCALIZER-MAGVAR+.5) GOSUB crs VOR_1_OBS=crs PLAY "-ss1.wav" WHILE KEY=0 PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 IF VOR_1_GS_AVAIL THEN PRINT " CRS ",crs,"< ILS" ELSE PRINT " CRS ",crs,"< LOC" ENDIF WAIT 18,KEYPRESS ENDWHILE GOTO crs1_1 ENDIF GOTO crs1_2 ELSEIF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN crs=0 keys=1 ENDIF crs=crs*10+break-1 IF crs>360 THEN crs=0 PLAY "-ss2.wav" ENDIF GOTO crs1_1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN crs=0 keys=1 ENDIF crs=crs*10 IF crs>360 THEN crs=0 PLAY "-ss2.wav" ENDIF GOTO crs1_1 ELSEIF KEY=12 THEN ;crs - WHILE KEY=12 crs=crs-10 GOSUB crs PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_1_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs1_1 ELSEIF KEY=13 THEN ;crs + WHILE KEY=13 crs=crs+10 GOSUB crs PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_1_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs1_1 ELSEIF KEY=26 THEN ;crs [ WHILE KEY=26 crs=crs-1 GOSUB crs PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_1_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs1_1 ELSEIF KEY=27 THEN ;crs ] WHILE KEY=27 crs=crs+1 GOSUB crs PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_1_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs1_1 ELSEIF KEY=28 THEN ;Enter PLAY "-ss1.wav" VOR_1_OBS=crs PRINT_TIME prt/2 PRECISION 3,2,2 PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs GOTO advkeys_reset ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS keys=1 crs=crs IDIV 10 ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PRECISION 3,2,2 IF VOR_1_ACTIVE THEN PLAY "-ss1.wav" PRINT "NAV1 ",x1, PRECISION 3,0,0 IF x2=0 THEN crs=INT(VOR_1_RADIAL-MAGVAR+180.5) GOSUB crs VOR_1_OBS=crs PRINT " CRS ",crs,"< TO" x2=1 ELSE crs=INT(VOR_1_RADIAL-MAGVAR+.5) GOSUB crs VOR_1_OBS=crs PRINT " CRS ",crs,"< FROM" x2=0 ENDIF ELSE PLAY "-ss2.wav" PRINT "NAV1 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"< OFF" ENDIF keys=0 GOTO crs1_2 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS GOTO crs1 ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY=shift+49 THEN ;(Shift)n VOR_1_OBS=crs break=0 GOTO nav1 ELSEIF KEY=shift+50 THEN ;(Shift)m VOR_1_OBS=crs break=0 GOTO nav2 ELSEIF KEY=41 THEN ;hdg_sel WAIT 0,KEYPRESS VOR_1_OBS=crs hdg=crs GOTO hdg_crs ELSEIF KEY=583 THEN ;hdg PLAY "-ss1.wav" VOR_1_OBS=crs hdg=crs PRINT_TIME prt PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF roll=1 roll0=1 GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN nav2: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 3,2,2 keys=0 x2=100 x1=NAV2_FREQ PLAY "-ss1.wav" n2: WAIT .3,KEYPRESS IF KEY=shift+49 THEN ;(Shift)n PLAY "-ss1.wav" NAV2_FREQ=NAV1_FREQ NAV1_FREQ=x1 crs=VOR_2_OBS VOR_2_OBS=VOR_1_OBS VOR_1_OBS=crs GOTO advkeys_reset ELSEIF KEY=shift+50 OR rdkeys=1 THEN ;(Shift)m PLAY "-ss1.wav" NAV2_FREQ=nav2 nav2=x1 GOTO advkeys_reset ENDIF PRINT WHILE 1 nav2_1: WAIT 0 IF KEY=0 THEN PRINT "NAV2 >",x1," [",nav2,"]" WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x1=x1+(break-1)*x2 x2=x2/10 GOTO nav2_1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x2=x2/10 GOTO nav2_1 ELSEIF KEY=28 THEN ;Enter WAIT 0,KEYPRESS IF INRANGE(x1,108,117.95) THEN NAV2_FREQ=x1 GOTO crs2 ENDIF PLAY "-ss2.wav" x1=0 x2=100 ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF x2<.005 OR keys=0 THEN keys=1 x2=INT(x1*100+.05)/100 x1=INT(x2*10+.05)/10 IF x1=x2 THEN x1=INT(x1) x2=.1 ELSE x2=.01 ENDIF ELSEIF x2<100 THEN x2=INT(x2*100+.05) x1=INT(x1/x2)*x2 x2=x2/10 ENDIF ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" x2=x1 x1=nav2 nav2=x2 keys=0 x2=100 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS PLAY "-ss1.wav" keys=0 x2=100 x1=NAV2_FREQ ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY=shift+50 THEN ;(Shift)m PLAY "-ss2.wav" PRINT NAV2_FREQ=nav2 nav2=x1 GOTO advkeys_reset ELSEIF KEY=shift+49 THEN ;(Shift)n PLAY "-ss2.wav" PRINT IF NOT INRANGE(x1,108,117.95) THEN x1=NAV2_FREQ ENDIF NAV2_FREQ=NAV1_FREQ NAV1_FREQ=x1 crs=VOR_2_OBS VOR_2_OBS=VOR_1_OBS VOR_1_OBS=crs GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE crs2: keys=0 x2=0 x1=NAV2_FREQ crs=VOR_2_OBS PLAY "-ss1.wav" WHILE 1 crs2_1: WAIT 0 IF KEY=0 THEN PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" crs2_2: WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN crs=0 keys=1 ENDIF crs=crs*10+break-1 IF crs>360 THEN crs=0 PLAY "-ss2.wav" ENDIF GOTO crs2_1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN crs=0 keys=1 ENDIF crs=crs*10 IF crs>360 THEN crs=0 PLAY "-ss2.wav" ENDIF GOTO crs2_1 ELSEIF KEY=12 THEN ;crs - WHILE KEY=12 crs=crs-10 GOSUB crs PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_2_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs2_1 ELSEIF KEY=13 THEN ;crs + WHILE KEY=13 crs=crs+10 GOSUB crs PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_2_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs2_1 ELSEIF KEY=26 THEN ;crs [ WHILE KEY=26 crs=crs-1 GOSUB crs PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_2_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs2_1 ELSEIF KEY=27 THEN ;crs ] WHILE KEY=27 crs=crs+1 GOSUB crs PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"<" VOR_2_OBS=crs WAIT 0 WAIT 0,KEYPRESS WAIT 0,KEYPRESS WAIT .3,KEYPRESS ENDWHILE keys=2 GOTO crs2_1 ELSEIF KEY=28 THEN ;Enter PLAY "-ss1.wav" VOR_2_OBS=crs PRINT_TIME prt/2 PRECISION 3,2,2 PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs GOTO advkeys_reset ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF keys=0 then keys=1 ENDIF crs=crs IDIV 10 ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PRECISION 3,2,2 IF VOR_2_ACTIVE THEN PLAY "-ss1.wav" PRINT "NAV2 ",x1, PRECISION 3,0,0 IF x2=0 THEN crs=INT(VOR_2_RADIAL-MAGVAR+180.5) GOSUB crs VOR_2_OBS=crs PRINT " CRS ",crs,"< TO" x2=1 ELSE crs=INT(VOR_2_RADIAL-MAGVAR+.5) GOSUB crs VOR_2_OBS=crs PRINT " CRS ",crs,"< FROM" x2=0 ENDIF ELSE PLAY "-ss2.wav" PRINT "NAV2 ",x1, PRECISION 3,0,0 PRINT " CRS ",crs,"< OFF" ENDIF keys=0 GOTO crs2_2 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS GOTO crs2 ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY=shift+50 THEN ;(Shift)m VOR_2_OBS=crs break=0 GOTO nav2 ELSEIF KEY=shift+49 THEN ;(Shift)n VOR_2_OBS=crs break=0 GOTO nav1 ELSEIF KEY=41 THEN ;hdg_sel WAIT 0,KEYPRESS VOR_2_OBS=crs hdg=crs GOTO hdg_crs ELSEIF KEY=583 THEN ;hdg PLAY "-ss1.wav" VOR_2_OBS=crs hdg=crs PRINT_TIME prt PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF roll=1 roll0=1 GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN adf: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 3,1,1 keys=0 x2=100 x1=ADF_FREQ PLAY "-ss1.wav" WAIT .3,KEYPRESS IF KEY=shift+30 OR rdkeys=1 THEN ;(Shift)a PLAY "-ss1.wav" ADF_FREQ=adf adf=x1 GOTO advkeys_reset ENDIF PRINT WHILE 1 adf1: WAIT 0 IF KEY=0 THEN PRINT "ADF >",x1," [",adf,"]" WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x1=x1+(break-1)*x2 x2=x2/10 GOTO adf1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x2=x2/10 GOTO adf1 ELSEIF KEY=28 THEN ;Enter IF INRANGE(x1,200,1699.9) THEN PLAY "-ss1.wav" ADF_FREQ=x1 PRINT_TIME prt/2 PRINT "ADF ",x1 GOTO advkeys_reset ENDIF WAIT 0,KEYPRESS PLAY "-ss2.wav" x1=0 x2=100 ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF x2<.05 OR keys=0 THEN keys=1 x2=INT(x1*10+.05)/10 x1=INT(x2+.05) IF x1=x2 THEN x1=INT(x1/10)*10 x2=1 ELSE x2=.1 ENDIF ELSEIF x2<100 THEN x2=INT(x2*100+.05) x1=INT(x1/x2)*x2 x2=x2/10 ENDIF ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" x2=x1 x1=adf adf=x2 keys=0 x2=100 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS PLAY "-ss1.wav" keys=0 x2=100 x1=ADF_FREQ ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY=shift+30 THEN ;(Shift)a PLAY "-ss2.wav" PRINT ADF_FREQ=adf adf=x1 GOTO advkeys_reset ELSEIF KEY=41 OR KEY=583 THEN ;hdg_sel/hdg ADF_FREQ=x1 IF KEY=583 THEN keys=5 ENDIF WAIT 0,KEYPRESS IF INRANGE(x1,200,1699.9) THEN PLAY "-ss1.wav" PRINT "ADF ",x1," QDM" break=0 time=0 time0=SECOND ;ADF needs 2sec before it WHILE time<2 ; points to a new station WAIT 0 IF KEY=15 AND break=0 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" PRINT "ADF ",x1," QDR" break=1 ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF GOSUB time ENDWHILE IF ADF_RADIAL!=0 THEN IF break=0 THEN crs=INT(ADF_RADIAL-MAGVAR+180.5) ELSE crs=INT(ADF_RADIAL-MAGVAR+.5) ENDIF GOSUB crs hdg=crs PRECISION 3,0,0 IF keys=5 THEN PLAY "-ss1.wav" PRINT_TIME prt PRINT "HDG ",hdg AUTOPILOT_HEADING=hdg IF AUTOPILOT_HEADING_HOLD=0 THEN AUTOPILOT_HEADING_HOLD=1 ENDIF roll=1 roll0=1 GOTO advkeys_reset ENDIF GOTO hdg_crs ENDIF ELSE x1=0 ENDIF PLAY "-ss2.wav" keys=0 x2=100 ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN com: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 3,2,2 keys=0 x2=100 x1=COM_FREQ PLAY "-ss1.wav" WAIT .3,KEYPRESS IF rdkeys=1 AND KEY=shift+46 THEN ;swap only: (Shift)cc PRECISION 1,0,0 WHILE 1 PRINT "COM RFGAIN ",rfgain WAIT 0 WAIT 0,KEYPRESS WAIT 18,KEYPRESS IF KEY=12 OR KEY=26 THEN ;rfgain - [ IF rfgain>0 THEN rfgain=rfgain-1 ENDIF ELSEIF KEY=13 OR KEY=27 THEN ;rfgain + ] IF rfgain<10 THEN rfgain=rfgain+1 ENDIF ELSEIF KEY!=0 THEN PRINT GOTO advkeys_reset ENDIF ENDWHILE ELSEIF KEY=shift+46 OR rdkeys=1 THEN ;(Shift)c PLAY "-ss1.wav" COM_FREQ=com com=x1 GOTO advkeys_reset ENDIF PRINT WHILE 1 com1: WAIT 0 IF KEY=0 THEN PRINT "COM >",x1," [",com,"]" WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,10) THEN ;entering numbers 1-9 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x1=x1+(break-1)*x2 x2=x2/10 GOTO com1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x2=x2/10 GOTO com1 ELSEIF KEY=28 THEN ;Enter IF INRANGE(x1,118,136.975) THEN PLAY "-ss1.wav" COM_FREQ=x1 PRINT_TIME prt/2 PRINT "COM ",x1 GOTO advkeys_reset ENDIF WAIT 0,KEYPRESS PLAY "-ss2.wav" x1=0 x2=100 ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF x2<.005 OR keys=0 THEN keys=1 x2=INT(x1*100+.05)/100 x1=INT(x2*10+.05)/10 IF x1=x2 THEN x1=INT(x1) x2=.1 ELSE x2=.01 ENDIF ELSEIF x2<100 THEN x2=INT(x2*100+.05) x1=INT(x1/x2)*x2 x2=x2/10 ENDIF ELSEIF KEY=15 THEN ;Tab WAIT 0,KEYPRESS PLAY "-ss1.wav" x2=x1 x1=com com=x2 keys=0 x2=100 ELSEIF KEY=83 THEN ;Delete WAIT 0,KEYPRESS PLAY "-ss1.wav" keys=0 x2=100 x1=COM_FREQ ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY=shift+46 THEN ;(Shift)c PLAY "-ss2.wav" PRINT COM_FREQ=com com=x1 GOTO advkeys_reset ELSEIF KEY=12 OR KEY=13 OR KEY=26 OR KEY=27 THEN PLAY "-ss1.wav" WHILE 1 PRINT "COM >",x1," [",com,"] RFGAIN ", PRECISION 1,0,0 PRINT rfgain PRECISION 3,2,2 WAIT 0 WAIT 0,KEYPRESS WAIT 18,KEYPRESS IF KEY=12 OR KEY=26 THEN ;rfgain - [ IF rfgain>0 THEN rfgain=rfgain-1 ENDIF ELSEIF KEY=13 OR KEY=27 THEN ;rfgain + ] IF rfgain<10 THEN rfgain=rfgain+1 ENDIF ELSEIF KEY!=0 THEN GOTO com1 ENDIF ENDWHILE ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN xpdr: WAIT 0,KEYPRESS IF break>1 OR rdkeys=1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PRINT_TIME 20 PRECISION 4,0,0 xpdr0: keys=0 x2=1000 x1=TRANS_FREQ PLAY "-ss1.wav" PRINT WHILE 1 xpdr1: WAIT 0 IF KEY=0 THEN PRINT "XPDR >",x1 WAIT 18,KEYPRESS ENDIF IF INRANGE(KEY,2,8) THEN ;entering numbers 1-7 break=KEY WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x1=x1+(break-1)*x2 x2=x2/10 GOTO xpdr1 ELSEIF KEY=11 THEN ;entering a 0 WAIT 0,KEYPRESS IF keys=0 THEN x1=0 keys=1 ENDIF x2=x2/10 GOTO xpdr1 ELSEIF KEY=28 THEN ;Enter PLAY "-ss1.wav" TRANS_FREQ=x1 PRINT_TIME prt/2 PRINT "XPDR ",x1 GOTO advkeys_reset ELSEIF KEY=14 THEN ;Backspace WAIT 0,KEYPRESS IF x2<.05 OR keys=0 THEN keys=1 x2=.1 ENDIF IF x2<1000 THEN x2=INT(x2*100+.05) x1=INT(x1/x2)*x2 x2=x2/10 ENDIF ELSEIF KEY=15 OR KEY=83 THEN ;Tab/Delete WAIT 0,KEYPRESS GOTO xpdr0 ELSEIF KEY=1 OR KEY=57 THEN ;Esc/Space PRINT GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss2.wav" ENDIF ENDWHILE RETURN atc: IF COM_FREQ=122.2 THEN GOSUB apdisc_trim GOSUB atis ELSEIF atc<1 THEN ;no atc atc=atc+1 ELSEIF RANDOM+rfgain/100>1 THEN ;random atc messages GOSUB apdisc_trim IF COM_FREQ=118 THEN x1=INT(RANDOM*30) IF x1=x2 THEN ;avoid double messages RETURN ENDIF ON x1 GOSUB a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30 ; ELSEIF COM_FREQ=118.1 THEN ; x1=INT(RANDOM*4) ; <- YOU CAN EXPAND THIS SUBROUTINE TO ; IF x1=x2 THEN ; <- OTHER FREQUENCIES WITH NEW *.WAV ; RETURN ; <- FILES IN THE \ADVWAV SUBDIRECTORY ; ENDIF ; ON x1 GOSUB b1,b2,b3,b4,etc... ENDIF atc=-10 x2=x1 ENDIF RETURN atis: IF atc<1 THEN ;no atis atc=1 ELSEIF atc=1 THEN PLAY "fsfss135.wav" ;"latest weather report has winds" IF WIND_SURF_VEL<3 THEN PLAY "fsfss153.wav" ;"calm" ELSE x1=(WIND_SURF_DIR+5) IDIV 10 IF x1=0 THEN x1=36 ENDIF x2=x1 IDIV 10 ;wind direction ON x2 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 ON x1-x2*10 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 PLAY "fs_0.wav" PLAY "fsat.wav" ;"at" x1=WIND_SURF_VEL x2=x1 IDIV 10 ;wind speed ON x2-1 GOSUB atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 ON x1-x2*10 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 ENDIF atc=2 crs=0 ELSEIF atc=3 THEN IF crs>-1 AND CLOUD_LOW_COVERAGE+CLOUD_HIGH_COVERAGE+CLOUD_THUNDER_COVERAGE=0 THEN PLAY "fsfss150.wav" ;"clear skies" atc=4 ELSEIF crs>-1 AND CLOUD_LOW_COVERAGE>0 THEN x1=CLOUD_LOW_COVERAGE x2=MTOF(CLOUD_LOW_BASE) GOSUB atis_clouds ;low cloud layer crs=-1 ELSEIF crs>-2 AND CLOUD_HIGH_COVERAGE>0 THEN x1=CLOUD_HIGH_COVERAGE x2=MTOF(CLOUD_HIGH_BASE) GOSUB atis_clouds ;high cloud layer crs=-2 ELSEIF crs>-3 AND CLOUD_THUNDER_COVERAGE>0 THEN x1=CLOUD_THUNDER_COVERAGE x2=MTOF(CLOUD_THUNDER_BASE) GOSUB atis_clouds ;thunderstorm cloud layer PLAY "fs_c.wav" ;cumulonimbus PLAY "fs_b.wav" crs=-3 ELSE atc=4 ENDIF ELSEIF atc=4 THEN PLAY "fs_q.wav" ;QNH altimiter setting PLAY "fs_n.wav" PLAY "fs_h.wav" WAIT 1 x1=INHGTOMB(BAROMETRIC_PRESSURE)+.5 ;QNH in mb GOSUB atis_qnh WAIT 2 atc=5 ;"point" x1=BAROMETRIC_PRESSURE*100+.0013 ;QNH in inches GOSUB atis_qnh ELSEIF atc>6 THEN atc=0 ELSE atc=atc+1 ENDIF RETURN atis_clouds: IF x1<=.5 THEN PLAY "fsfss146.wav" ;(few and) "scattered clouds" ELSEIF x1<1 THEN PLAY "fsfss147.wav" ;"broken clouds" ELSE PLAY "fsfss148.wav" ;"overcast" ENDIF IF x2<2500 THEN ;altitude MSL of base of cloud layer x2=x2+50 IF x2>2000 THEN PLAY "fs_2.wav" PLAY "fsthous.wav" x2=(x2-2000) IDIV 100 ELSEIF x2>1000 THEN PLAY "fs_1.wav" PLAY "fsthous.wav" x2=(x2-1000) IDIV 100 ELSE x2=x2 IDIV 100 ENDIF IF x2>0 THEN ON x2-1 GOSUB atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 PLAY "fshund.wav" ENDIF ELSEIF x2<10000 THEN x2=x2+250 x1=x2 IDIV 1000 ON x1-1 GOSUB atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 PLAY "fsthous.wav" IF x2-x1*1000>=500 THEN PLAY "fs_5.wav" PLAY "fshund.wav" ENDIF ELSE x2=(x2+500) IDIV 1000 x1=x2 IDIV 10 ON x1-1 GOSUB atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 ON x2-x1*10 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 PLAY "fsthous.wav" ENDIF RETURN atis_qnh: x2=x1 IDIV 1000 ON x2-1 GOSUB atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 x1=x1-x2*1000 x2=x1 IDIV 100 ON x2 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 IF atc=5 THEN PLAY "fs_pnt.wav" ENDIF x1=x1-x2*100 x2=x1 IDIV 10 ON x2 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 x1=x1-x2*10 x2=x1 IDIV 1 ON x2 GOSUB atis0,atis1,atis2,atis3,atis4,atis5,atis6,atis7,atis8,atis9 RETURN dh: IF break=2 THEN PLAY "-ss2.wav" RETURN ENDIF PLAY "-ss1.wav" PRINT IF dh=0 THEN PRINT "DH 200" dh=200 ELSEIF dh=200 THEN PRINT "DH 100" dh=100 ELSEIF dh=100 THEN PRINT "DH 50" dh=50 ELSEIF dh=50 THEN PRINT "DH 20" dh=20 ELSE PRINT "DH OFF" dh=0 ENDIF WAIT 0,KEYPRESS RETURN setup: WAIT 0,KEYPRESS IF break>1 THEN PLAY "-ss2.wav" RETURN ENDIF ADV_KEYS ADD,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,26,27,28 PLAY "-ss1.wav" PRINT_TIME 20 PRINT setup1: WHILE 1 WAIT 0,KEYPRESS ON gpws GOSUB gpws0,gpws1,gpws2 ON inh GOSUB inh0,inh1,inh2,inh3 ON fma GOSUB fma0,fma1,fma2 IF fk=0 THEN GOSUB fk0 ELSEIF fk=57 THEN GOSUB fk1 ELSE GOSUB fk2 ENDIF ON rdkeys GOSUB rdkeys0,rdkeys1,rdkeys2,rdkeys3 WAIT 18,KEYPRESS IF KEY=2 THEN ;1 gpws=gpws-1 IF gpws<0 THEN gpws=2 ra0=0 ra1=0 ENDIF ELSEIF KEY=3 THEN ;2 inh=inh+1 IF inh>3 THEN inh=0 ra0=0 ra1=0 ENDIF ELSEIF KEY=4 THEN ;3 fma=fma-1 IF fma<0 THEN fma=2 ENDIF ELSEIF KEY=5 THEN ;4 IF fk=57 THEN fk=83 ELSEIF fk=83 THEN fk=0 ELSE fk=57 ENDIF ELSEIF KEY=6 THEN ;5 rdkeys=rdkeys+1 IF rdkeys>3 THEN rdkeys=0 ENDIF ELSEIF KEY=1 THEN ;Esc PRINT GOSUB advkeys GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss1.wav" GOTO setup2 ENDIF WAIT 0,KEYPRESS ENDWHILE setup2: WHILE 1 ON wptnav GOSUB wptnav0,wptnav1 ON hdgalt GOSUB hdgalt0,hdgalt1,hdgalt2,hdgalt3 ON vsmode GOSUB vsmode0,vsmode1 ON land GOSUB land0,land1 ON cat-1 GOSUB cat1,cat2,cat3,cat4 WAIT 18,KEYPRESS IF KEY=2 THEN ;1 wptnav=wptnav-1 IF wptnav<0 THEN wptnav=1 ENDIF ELSEIF KEY=3 THEN ;2 hdgalt=hdgalt-1 IF hdgalt<0 THEN hdgalt=3 ENDIF ELSEIF KEY=4 THEN ;3 vsmode=vsmode-1 IF vsmode<0 THEN vsmode=1 ENDIF ELSEIF KEY=5 THEN ;4 land=land-1 IF land<0 THEN land=1 ENDIF ELSEIF KEY=6 THEN ;5 cat=cat+1 IF cat>4 THEN cat=1 ENDIF ELSEIF KEY=1 OR KEY=28 OR KEY=57 OR KEY=83 THEN ;Esc/Enter/Space/Del PRINT GOSUB advkeys GOTO advkeys_reset ELSEIF KEY!=0 THEN WAIT 0,KEYPRESS PLAY "-ss1.wav" GOTO setup1 ENDIF WAIT 0,KEYPRESS ENDWHILE RETURN ld1: lat0=lat1 lon0=lon1 RETURN ld2: lat0=lat2 lon0=lon2 RETURN ld3: lat0=lat3 lon0=lon3 RETURN ld4: lat0=lat4 lon0=lon4 RETURN ld5: lat0=lat5 lon0=lon5 RETURN ld6: lat0=lat6 lon0=lon6 RETURN ld7: lat0=lat7 lon0=lon7 RETURN ld8: lat0=lat8 lon0=lon8 RETURN ld9: lat0=lat9 lon0=lon9 RETURN ld10: lat0=lat10 lon0=lon10 RETURN ld11: lat0=lat11 lon0=lon11 RETURN ld12: lat0=lat12 lon0=lon12 RETURN ld13: lat0=lat13 lon0=lon13 RETURN ld14: lat0=lat14 lon0=lon14 RETURN ld15: lat0=lat15 lon0=lon15 RETURN ld16: lat0=lat16 lon0=lon16 RETURN ld17: lat0=lat17 lon0=lon17 RETURN ld18: lat0=lat18 lon0=lon18 RETURN ld19: lat0=lat19 lon0=lon19 RETURN ld20: lat0=lat20 lon0=lon20 RETURN sv1: lat1=lat0 lon1=lon0 RETURN sv2: lat2=lat0 lon2=lon0 RETURN sv3: lat3=lat0 lon3=lon0 RETURN sv4: lat4=lat0 lon4=lon0 RETURN sv5: lat5=lat0 lon5=lon0 RETURN sv6: lat6=lat0 lon6=lon0 RETURN sv7: lat7=lat0 lon7=lon0 RETURN sv8: lat8=lat0 lon8=lon0 RETURN sv9: lat9=lat0 lon9=lon0 RETURN sv10: lat10=lat0 lon10=lon0 RETURN sv11: lat11=lat0 lon11=lon0 RETURN sv12: lat12=lat0 lon12=lon0 RETURN sv13: lat13=lat0 lon13=lon0 RETURN sv14: lat14=lat0 lon14=lon0 RETURN sv15: lat15=lat0 lon15=lon0 RETURN sv16: lat16=lat0 lon16=lon0 RETURN sv17: lat17=lat0 lon17=lon0 RETURN sv18: lat18=lat0 lon18=lon0 RETURN sv19: lat19=lat0 lon19=lon0 RETURN sv20: lat20=lat0 lon20=lon0 RETURN roll0: PRINT "___ ___ ", RETURN roll1: PRECISION 3,0,0 PRINT "HDG ",hdg," ", RETURN roll2: PRINT "ATT ROLL ", RETURN roll3: PRINT "APP LOC ", RETURN roll4: PRINT "LOC ", RETURN roll5: PRINT "LBC ", RETURN roll6: PRINT "NAV1 VOR ", RETURN roll7: PRINT "LVL ", RETURN roll8: PRINT "WPT NAV ", RETURN pitch0: PRINT "___ ___ ", RETURN pitch1: PRECISION 3,0,0 PRINT "ALT ",alt,"00 ", RETURN pitch2: PRINT "ATT PITCH ", RETURN pitch3: PRINT "APP G/S ", RETURN armed0: PRINT RETURN armed1: PRINT "land armed" RETURN armed2: PRINT "g/s armed" RETURN armed3: PRINT "app armed" RETURN armed4: PRINT "loc armed" RETURN armed5: PRINT "lbc armed" RETURN armed6: PRINT "vor armed" RETURN armed7: PRINT "AP OFF" RETURN gpws0: PRINT "1.GPWS:off ", RETURN gpws1: PRINT "1.GPWS:alt ", RETURN gpws2: PRINT "1.GPWS:on ", RETURN inh0: PRINT "2.GPWS:normal ", RETURN inh1: PRINT "2.GPWS:g/s-inh ", RETURN inh2: PRINT "2.GPWS:flap-inh ", RETURN inh3: PRINT "2.GPWS:gear-inh ", RETURN fma0: PRINT "3.FMA:manual ", RETURN fma1: PRINT "3.FMA:auto ", RETURN fma2: PRINT "3.FMA:auto+ ", RETURN fk0: PRINT "4.FMA-key:off ", RETURN fk1: PRINT "4.FMA-key:Space ", RETURN fk2: PRINT "4.FMA-key:Del ", RETURN rdkeys0: PRINT "5.RD-keys:off" RETURN rdkeys1: PRINT "5.RD-keys:swap" RETURN rdkeys2: PRINT "5.RD-keys:Shift" RETURN rdkeys3: PRINT "5.RD-keys:normal" RETURN wptnav0: PRINT "1.WPT-NAV:off ", RETURN wptnav1: PRINT "1.WPT-NAV:on ", RETURN hdgalt0: PRINT "2.HDG/ALT:off ", RETURN hdgalt1: PRINT "2.HDG/ALT:normal ", RETURN hdgalt2: PRINT "2.HDG/ALT:keypad ", RETURN hdgalt3: PRINT "2.HDG/ALT:all ", RETURN vsmode0: PRINT "3.V/S-mode:off ", RETURN vsmode1: PRINT "3.V/S-mode:on ", RETURN land0: PRINT "4.LAND:off ", RETURN land1: PRINT "4.LAND:on ", RETURN cat1: PRINT "5.CAT-A" RETURN cat2: PRINT "5.CAT-B" RETURN cat3: PRINT "5.CAT-C" RETURN cat4: PRINT "5.CAT-D" RETURN atis0: PLAY "fs_0.wav" RETURN atis1: PLAY "fs_1.wav" RETURN atis2: PLAY "fs_2.wav" RETURN atis3: PLAY "fs_3.wav" RETURN atis4: PLAY "fs_4.wav" RETURN atis5: PLAY "fs_5.wav" RETURN atis6: PLAY "fs_6.wav" RETURN atis7: PLAY "fs_7.wav" RETURN atis8: PLAY "fs_8.wav" RETURN atis9: PLAY "fs_9.wav" RETURN a1: PLAY "fsatc_1.wav" RETURN a2: PLAY "fsatc_2.wav" RETURN a3: PLAY "fsatc_3.wav" RETURN a4: PLAY "fsatc_4.wav" RETURN a5: PLAY "fsatc_5.wav" RETURN a6: PLAY "fsatc_6.wav" RETURN a7: PLAY "fsatc_7.wav" RETURN a8: PLAY "fsatc_8.wav" RETURN a9: PLAY "fsatc_9.wav" RETURN a10: PLAY "fsatc_10.wav" RETURN a11: PLAY "fsatc_11.wav" RETURN a12: PLAY "fsatc_12.wav" RETURN a13: PLAY "fsatc_13.wav" RETURN a14: PLAY "fsatc_14.wav" RETURN a15: PLAY "fsatc_15.wav" RETURN a16: PLAY "fsatc_16.wav" RETURN a17: PLAY "fsatc_17.wav" RETURN a18: PLAY "fsatc_18.wav" RETURN a19: PLAY "fsatc_19.wav" RETURN a20: PLAY "fsatc_20.wav" RETURN a21: PLAY "fsatc_21.wav" RETURN a22: PLAY "fsatc_22.wav" RETURN a23: PLAY "fsatc_23.wav" RETURN a24: PLAY "fsatc_24.wav" RETURN a25: PLAY "fsatc_25.wav" RETURN a26: PLAY "fsatc_26.wav" RETURN a27: PLAY "fsatc_27.wav" RETURN a28: PLAY "fsatc_28.wav" RETURN a29: PLAY "fsatc_29.wav" RETURN a30: PLAY "fsatc_30.wav" RETURN