;   ->  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)<xVOR_1_GLIDE_SLOPE AND inh=0 AND gpws=2 THEN
                    PLAY "-ss2.WAV"
                    PLAY "-ss2.WAV"                   ;mode5 armed
                    loc=VOR_1_LOCALIZER
                ELSE
                    ra0=0                             ;g/p not valid
                ENDIF
            ENDIF
            gs=gs+1
        ELSEIF ra>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 ra<cat*100+111 THEN
                IF fma>0 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 (ra<cat*100+111 AND armed=1) THEN
            IF fma>0 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 x0<prt*2 THEN                              
        PRINT "HDG ",crs,"  CRS"
        hdg=crs
        AUTOPILOT_HEADING=hdg
    ELSE
        hdg=INT(AUTOPILOT_HEADING+.5)
        AUTOPILOT_HEADING=hdg
        PRINT "HDG ",hdg
    ENDIF
    WAIT 0
    IF KEY=0 THEN
        WAIT .5,KEYPRESS
    ENDIF
    IF KEY=583 THEN
        WAIT 0,KEYPRESS
        PLAY "-ss1.wav"
        PRINT "HDG HOLD"
        hdg=INT(PLANE_HEADING+.5)
        AUTOPILOT_HEADING=hdg
        WAIT 0
        IF KEY=0 THEN
            WAIT .5,KEYPRESS
        ENDIF
        IF KEY=583 THEN
            PLAY "-ss1.wav"
            PRINT "HDG OFF"
            AUTOPILOT_HEADING_HOLD=0
            break=1
            roll=0
            roll0=0
            WAIT 0,KEYPRESS
            RETURN
        ENDIF
    ENDIF
    IF AUTOPILOT_HEADING_HOLD=0 THEN
        AUTOPILOT_HEADING_HOLD=1
    ENDIF
    break=1
    roll=1
    roll0=1
    WAIT 0
    IF KEY=585 THEN
        GOTO alt
    ENDIF
    WAIT 0,KEYPRESS
RETURN

hdg_l10:
     hdg=hdg-10
     IF hdg<1 THEN
         hdg=hdg+360
     ENDIF
     PRECISION 3,0,0
     PRINT "HDG ",hdg
     AUTOPILOT_HEADING=hdg
RETURN

hdg_r10:
     hdg=hdg+10
     IF hdg>360 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
