// *****************************************************************************
// * Config_SIOC ver 5.1   -     By Manuel Velez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : Baron_58_00_bis.txt
// * Date : 10/01/2023



Var 0000, Value 0
{
  CALL &init_flaps     // positionne les volets selon panneau
  CALL &blink     // lance le timer pour clignotement voyant
  CALL &affich_Leds     // affiche les leds
}

Var 0001, name courant, Value 0     // courant g_n_ral

Var 0002, name fs_bat, Link FSUIPC_INOUT, Offset $3102, Length 1     // batterie FS
{
  &fs_bat = &sw_batt    
}

Var 0003, name sw_batt, Link IOCARD_SW, Input 134     // Inter batterie
{
  &fs_bat = &sw_batt    
  CALL &calc_voy_alt2
  CALL &sub_courant
  CALL &affich_Leds
}

Var 0004, name disp, Link IOCARD_DISPLAY, Digit 5, Numbers 3     // pour debug

Var 0005, name fs_gen1, Link FSUIPC_INOUT, Offset $3B78, Length 4     // fs_gen1
{
  &fs_gen1 = &sw_gen1    
}

Var 0006, name sw_gen1, Link IOCARD_SW, Input 126     // inter gnratrice 1
{
  &fs_gen1 = &sw_gen1    
  CALL &sub_courant
  CALL &calc_voy_alt1
  CALL &affich_Leds
}

Var 0007, name fs_gen2, Link FSUIPC_INOUT, Offset $3AB8, Length 4     // fs_gen2
{
  &fs_gen2 = &sw_gen2    
}

Var 0008, name sw_gen2, Link IOCARD_SW, Input 130     // inter gnratrice 2
{
  &fs_gen2 = &sw_gen2    
  CALL &sub_courant
  CALL &calc_voy_alt2
  CALL &affich_Leds
}

Var 0009, name RPM_mot_1, Link FSUIPC_IN, Offset $0898, Length 2     // Tours moteur 1
{
  CALL &sub_courant
  CALL &calc_voy_alt1
  CALL &affich_Leds
}

Var 0010, name RPM_mot_2, Link FSUIPC_IN, Offset $0930, Length 2     // Tours moteur 2
{
  CALL &sub_courant
  CALL &calc_voy_alt2
  CALL &affich_Leds
}

Var 0011, name sub_courant, Link SUBRUTINE     // dtermine si courant d'aprs tension bus
{
  IF &fs_batt_volt = 2800     // au moins si une gnrtrice fonctionne
  {
    &courant = 1         // le courant est ON...
  }
  ELSE
  {
    IF &fs_bat = 1     // si inter batterie ON
    {
      IF &temp_batt > 1680     // si tension suffisante
      {
        &courant = 1         // le courant est ON...
      }
    }
    ELSE
    {
      &courant = 0         // le courant est OFF
    }
  }
  CALL &affich_Leds
}

Var 0012, name fs_batt_volt, Link FSUIPC_IN, Offset $2840, Length 8, Numbers 2     // tension batterie FS
{
  &temp_batt = &fs_batt_volt    
  CALL &sub_courant
  CALL &affich_Leds
}

Var 0013, name sw_test, Link IOCARD_SW, Input 16
{
  IF &sw_test = 1
  {
    CALL &affich_Leds
  }
  ELSE
  {
    CALL &affich_Leds
  }
}

Var 0014, name temp_batt

Var 0015, name led_gear_up_2, Link IOCARD_OUT, Output 87     // Voyant Gear up

Var 0016, name led_gear_up_1, Link IOCARD_OUT, Output 85     // Voyant Gear up
{
  IF &led_gear_up_1 = 1
  {
    &led_gear_up_2 = 1    
  }
  ELSE
  {
    &led_gear_up_2 = 0    
  }
}

Var 0017, name led_att_At1_2, Link IOCARD_OUT, Output 81     // Voyant alternateur1

Var 0018, name led_att_At1_1, Link IOCARD_OUT, Output 83     // Voyant alternateur1
{
  IF &led_att_At1_1 = 1
  {
    &led_att_At1_2 = 1    
  }
  ELSE
  {
    &led_att_At1_2 = 0    
  }
}

Var 0019, name led_att_At2_2, Link IOCARD_OUT, Output 77     // Voyant alternateur2

Var 0020, name led_att_At2_1, Link IOCARD_OUT, Output 75     // Voyant alternateur2
{
  IF &led_att_At2_1 = 1
  {
    &led_att_At2_2 = 1    
  }
  ELSE
  {
    &led_att_At2_2 = 0    
  }
}

Var 0021, name Led_start_2, Link IOCARD_OUT, Output 22     // voyant dmarreur

Var 0022, name Led_start_1, Link IOCARD_OUT, Output 24     // voyant dmarreur
{
  IF &Led_start_1 = 1
  {
    &Led_start_2 = 1    
  }
  ELSE
  {
    &Led_start_2 = 0    
  }
}

Var 0023, name led_door_2, Link IOCARD_OUT, Output 30     // voyant porte

Var 0024, name led_door_1, Link IOCARD_OUT, Output 22     // voyant porte
{
  IF &led_door_1 = 1
  {
    &led_door_2 = 1    
  }
  ELSE
  {
    &led_door_2 = 0    
  }
}

Var 0025, name temp_led_door     // variable intermdaire pour affichage voy

Var 0026, name fs_door, Link FSUIPC_IN, Offset $3367, Length 1     // porte avion
{
  C0 = TESTBIT &fs_door ,0
  IF C0    
  {
    &temp_led_door = 1    
  }
  ELSE
  {
    &temp_led_door = 0    
  }
  CALL &affich_Leds
}

Var 0027, name test, Value 0     // pour debug

Var 0028, name fs_start_mot1, Link FSUIPC_INOUT, Offset $3B00, Length 4     // starter moteur 1
{
  CALL &temp_start
  CALL &affich_Leds
}

Var 0029, name calc_voy_alt1, Link SUBRUTINE     // dfinit allumage alt1
{
  &temp_led_alt1 = 1    
  C1 = &sw_gen1 = 1
  C2 = &RPM_mot_1 > 200
  C0 = C1 AND C2
  IF C0    
  {
    &temp_led_alt1 = 0    
  }
}

Var 0030, name temp_led_alt1, Value 0     // variable intermdaire pour affichage voy

Var 0031, name calc_voy_alt2, Link SUBRUTINE     // dfinit allumage alt2
{
  &temp_led_alt2 = 1    
  C1 = &sw_gen2 = 1
  C2 = &RPM_mot_2 > 200
  C0 = C1 AND C2
  IF C0    
  {
    &temp_led_alt2 = 0    
  }
}

Var 0032, name temp_led_alt2, Value 0     // variable intermdaire pour affichage voy

Var 0033, name fs_start_mo2, Link FSUIPC_INOUT, Offset $3A40, Length 4     // starter moteur 2
{
  CALL &temp_start
  CALL &affich_Leds
}

Var 0034, name temp_start, Link SUBRUTINE     // vaut 1 si un dmarreur actionn
{
  &temp_start = 0    
  IF &fs_start_mot1 <> 0
  {
    &temp_start = 1    
  }
  ELSE
  {
    IF &fs_start_mo2 <> 0
    {
      &temp_start = 1    
    }
  }
}

Var 0035, name calc_voy_gear, Link SUBRUTINE     //  1 si le voyant de train droit clignote
{
  &calc_voy_gear = 0         // initialisation
  IF &fs_right_gear = 16383     // si train sorti
  {
    &calc_voy_gear = 0         // pas de clignotement ncessaire
    &temp_led_gear = 0         // teint le voyant
  }
  ELSE     // si train rentr
  {
    C0 = &pos_throttle_1 < 7000     // Position manette gaz mot1 ralenti
    C1 = &pos_throttle_2 < 7000     // Position manette gaz mot2 ralenti
    C2 = C1 OR C0     // les deux manettes au ralenti
    C0 = &fs_flaps = 16383     // volets full
    C1 = C0 OR C2     // ralenti ou volets full
    IF C1    
    {
      &calc_voy_gear = 1    
    }
    ELSE
    {
      &calc_voy_gear = 0    
      &temp_led_gear = 0    
    }
  }
}

Var 0036, name temp_led_gear, Value 0     // variable intermdaire pour affichage voy

Var 0037, name blink, Link SUBRUTINE     // timer
{
  &blink_count = 0    
  &blink_count = TIMER 9999 ,1 ,50
}

Var 0038, name blink_count, Value 0     // met blinking  1 une fois sur deux gn
{
  &blinking = MOD &blink_count ,2
}

Var 0039, name blinking
{
  IF &calc_voy_gear = 1
  {
    &temp_led_gear = &blinking    
  }
  ELSE
  {
    &temp_led_gear = 0    
  }
}

//  *******************************************************************************
//  **********************  AVIONIQUES  ***************************************
//  *******************************************************************************

Var 0040, name fs_avionics, Link FSUIPC_INOUT, Offset $3103, Length 1

Var 0041, name sw_avionics, Link IOCARD_SW, Input 124     // Inter avionique
{
  &fs_avionics = &sw_avionics

  CALL &calc_display
  CALL V0212
  CALL V0213
  CALL V0235
  CALL V0236
  CALL V0254
  CALL V0255
  CALL V0279
  CALL V0280
  CALL &ADF_calc
}

Var 0042, name sw_propsync, Link IOCARD_SW, Input 123
{
  &fs_propsync = &sw_propsync    
}

Var 0043, name fs_propsync, Link FSUIPC_INOUT, Offset $2EC8, Length 4     // syncro active
{
  &fs_propsync = &sw_propsync    
}

//  *******************************************************************************
//  *******************************  TRAIN  **************************************
//  *******************************************************************************

Var 0044, name fs_gear_cmd, Link FSUIPC_INOUT, Offset $0BE8, Length 4     // Commande de Train

Var 0045, name led_train_tran, Link IOCARD_OUT, Output 94     // Led rouge transit

Var 0046, name led_train_AV, Link IOCARD_OUT, Output 98     // Led verte train avant sorti

Var 0047, name Led_train_G, Link IOCARD_OUT, Output 102     // Led verte train G sorti

Var 0048, name led_train_D, Link IOCARD_OUT, Output 100     // Led verte train D sorti

Var 0049, name sw_gear, Link IOCARD_SW, Input 87     // inter train
{
  IF &sw_gear = 1
  {
    &fs_gear_cmd = 0    
  }
  ELSE
  {
    &fs_gear_cmd = 16383    
  }
}

Var 0050, name fs_front_gear, Link FSUIPC_IN, Offset $0BEC, Length 4     // Pos-train-avant
{
  IF &fs_front_gear = 16383
  {
    &temp_fron_gear = 1    
    &temp_tran_gear = 0    
  }
  ELSE
  {
    IF &fs_front_gear > 1
    {
      &temp_fron_gear = 0    
      &temp_tran_gear = 1    
    }
    ELSE
    {
      IF &fs_front_gear = 0
      {
        &temp_fron_gear = 0    
        &temp_tran_gear = 0    
      }
    }
  }
  CALL &affich_Leds
}

Var 0051, name fs_left_gear, Link FSUIPC_IN, Offset $0BF4, Length 4     // Pos-train-G
{
  IF &fs_left_gear = 16383
  {
    &temp_left_gear = 1    
    &temp_tran_gear = 0    
  }
  ELSE
  {
    IF &fs_left_gear > 1
    {
      &temp_left_gear = 0    
      &temp_tran_gear = 1    
    }
    ELSE
    {
      IF &fs_left_gear = 0
      {
        &temp_left_gear = 0    
        &temp_tran_gear = 0    
      }
    }
  }
  CALL &affich_Leds
}

Var 0052, name fs_right_gear, Link FSUIPC_IN, Offset $0BF0, Length 4     // Pos-train-D
{
  IF &fs_right_gear = 16383
  {
    &temp_rigt_gear = 1    
    &temp_tran_gear = 0    
  }
  ELSE
  {
    IF &fs_right_gear > 1
    {
      &temp_rigt_gear = 0    
      &temp_tran_gear = 1    
    }
    ELSE
    {
      IF &fs_right_gear = 0
      {
        &temp_rigt_gear = 0    
        &temp_tran_gear = 0    
      }
    }
  }
  CALL &calc_voy_gear
  CALL &affich_Leds
}

//  **********************************************************************************
//  ****************************  AFFICHAGE  des  LEDS  *************************
//  ********************************************************************************** 

Var 0053, name affich_Leds, Link SUBRUTINE     // allume ou teint les leds selon courant
{
  IF &courant = 0     // pas de courant
  {
    &led_train_tran = 0    
    &led_train_AV = 0    
    &Led_train_G = 0    
    &led_train_D = 0    
    &led_att_At1_1 = 0    
    &led_att_At1_2 = 0    
    &led_att_At2_1 = 0    
    &led_att_At2_2 = 0    
    &Led_start_1 = 0    
    &Led_start_2 = 0    
    &led_gear_up_1 = 0    
    &led_gear_up_2 = 0    
    &led_flaps_APH = 0    
    &led_flaps_down = 0    
    &led_trans_flap = 0    
    &led_door_1 = 0    
    &led_door_2 = 0    
    &led_brake1 = 0    
    &led_brake2 = 0    
  }
  ELSE
  {
    &led_train_tran = &temp_tran_gear    
    &led_train_AV = &temp_fron_gear    
    &Led_train_G = &temp_left_gear    
    &led_train_D = &temp_rigt_gear    
    &led_att_At1_1 = &temp_led_alt1    
    &led_att_At1_2 = &temp_led_alt1    
    &led_att_At2_1 = &temp_led_alt2    
    &led_att_At2_2 = &temp_led_alt2    
    &Led_start_1 = &temp_start    
    &Led_start_2 = &temp_start    
    &led_gear_up_1 = &temp_led_gear    
    &led_gear_up_2 = &temp_led_gear    
    &led_flaps_APH = &temp_flap_APR    
    &led_flaps_down = &temp_flap_B    
    &led_trans_flap = &temp_flap_T    
    &led_door_1 = &temp_led_door    
    &led_door_2 = &temp_led_door    
    &led_brake1 = &temp_led_brake    
    &led_brake2 = &temp_led_brake    
    IF &sw_test = 1
    {
      &led_train_tran = 1    
      &led_train_AV = 1    
      &Led_train_G = 1    
      &led_train_D = 1    
      &led_att_At1_1 = 1    
      &led_att_At1_2 = 1    
      &led_att_At2_1 = 1    
      &led_att_At2_2 = 1    
      &Led_start_1 = 1    
      &Led_start_2 = 1    
      &led_gear_up_1 = 1    
      &led_gear_up_2 = 1    
      &led_flaps_APH = 1    
      &led_flaps_down = 1    
      &led_trans_flap = 1    
      &led_door_1 = 1    
    }
    ELSE
    {
      &led_train_tran = &temp_tran_gear    
      &led_train_AV = &temp_fron_gear    
      &Led_train_G = &temp_left_gear    
      &led_train_D = &temp_rigt_gear    
      &led_att_At1_1 = &temp_led_alt1    
      &led_att_At1_2 = &temp_led_alt1    
      &led_att_At2_1 = &temp_led_alt2    
      &led_att_At2_2 = &temp_led_alt2    
      &Led_start_1 = &temp_start    
      &Led_start_2 = &temp_start    
      &led_gear_up_1 = &temp_led_gear    
      &led_gear_up_2 = &temp_led_gear    
      &led_flaps_APH = &temp_flap_APR    
      &led_flaps_down = &temp_flap_B    
      &led_trans_flap = &temp_flap_T    
      &led_door_1 = &temp_led_door    
      &led_door_2 = &temp_led_door    
    }
  }
}

Var 0054, name temp_tran_gear, Value 0     // init led train_trans

Var 0055, name temp_fron_gear, Value 0     // init led avant

Var 0056, name temp_left_gear, Value 0     // ini led G

Var 0057, name temp_rigt_gear, Value 0     // initi led D

//  ****************************************************************************
//  ***********************FREIN de  PARKING  *****************************
//  ****************************************************************************

Var 0058, name fs_park_brake, Link FSUIPC_INOUT, Offset $0BC8, Length 2     // FS Parking brake
{
  CALL &calc_led_brake
  CALL &affich_Leds
}

Var 0059, name led_brake1, Link IOCARD_OUT, Output 18     //  led frein parking

Var 0060, name led_brake2, Link IOCARD_OUT, Output 20     //  led frein parking

Var 0061, name temp_led_brake, Value 0     // variable intermdaire pour affichage voy

Var 0070, name sw_park_brake, Link IOCARD_SW, Input 32     // inter frein park
{
  IF &sw_park_brake = 0
  {
    &fs_park_brake = 0    
  }
  ELSE
  {
    &fs_park_brake = 32767    
  }
}

Var 0071, name calc_led_brake, Link SUBRUTINE     // gre les leds du frein
{
  IF &sw_park_brake = 0
  {
    &temp_led_brake = 0    
    &led_brake1 = &temp_led_brake    
    &led_brake2 = &temp_led_brake    
  }
  ELSE
  {
    &temp_led_brake = 1    
    &led_brake1 = &temp_led_brake    
    &led_brake2 = &temp_led_brake    
  }
}

//  ******************************************************************************
//   **************************  VOLETS  ***************************************
//  ******************************************************************************

Var 0080, name fs_flaps, Link FSUIPC_INOUT, Offset $0BDC, Length 4     // volets
{
  CALL &init_flaps
  CALL &calc_led_flaps
  CALL &affich_Leds
}

Var 0081, name init_flaps, Link SUBRUTINE     // init volets
{
  IF &sw_flaps_up = 1
  {
    &fs_flaps = 0    
  }
  ELSE
  {
    IF &sw_flaps_down = 1
    {
      &fs_flaps = 16383    
    }
    ELSE
    {
      &fs_flaps = 8191    
    }
  }
}

Var 0082, name led_trans_flap, Link IOCARD_OUT, Output 92     // Led rouge transit volets

Var 0083, name led_flaps_APH, Link IOCARD_OUT, Output 96     // Led voelts APH

Var 0084, name led_flaps_down, Link IOCARD_OUT, Output 90     // Led volets bas

Var 0085, name sw_flaps_up, Link IOCARD_SW, Input 107     // Inter volets haut
{
  CALL &init_flaps
}

Var 0086, name sw_flaps_down, Link IOCARD_SW, Input 99     // Inter volets bas
{
  CALL &init_flaps
}

Var 0087, name fs_pos_flaps, Link FSUIPC_IN, Offset $0BE0, Length 4     // position volets fs
{
  CALL &calc_led_flaps
  CALL &calc_voy_gear
  CALL &affich_Leds
}

Var 0088, name calc_led_flaps, Link SUBRUTINE     // gre les leds des volets
{
  IF &fs_pos_flaps = 0
  {
    &temp_flap_APR = 0    
    &temp_flap_B = 0    
    &temp_flap_T = 0    
  }
  ELSE
  {
    IF &fs_pos_flaps = 16383
    {
      &temp_flap_APR = 0    
      &temp_flap_B = 1    
      &temp_flap_T = 0    
    }
    ELSE
    {
      IF &fs_pos_flaps = 8192
      {
        &temp_flap_APR = 1    
        &temp_flap_B = 0    
        &temp_flap_T = 0    
      }
      ELSE
      {
        &temp_flap_APR = 0    
        &temp_flap_B = 0    
        &temp_flap_T = 1    
      }
    }
  }
}

Var 0089, name temp_flap_APR, Value 0     // init led volets APR

Var 0090, name temp_flap_B, Value 0     // ini led volets bas

Var 0091, name temp_flap_T, Value 0     // initi led volets transit

//  **********************************************************************************
//  *********************  DEMARRAGE   moteurs  ********************************
//  **********************************************************************************

Var 0092, name fs_Magneto1, Link FSUIPC_INOUT, Offset $0892, Length 2     // Magnetos moteur 1 forces selon panneau
{
  IF &mot1_off = 1
  {
    &fs_Magneto1 = 0    
  }
  ELSE
  {
    IF &mot1_R = 1
    {
      &fs_Magneto1 = 1    
    }
    ELSE
    {
      IF &mot1_L = 1
      {
        &fs_Magneto1 = 2    
      }
      ELSE
      {
        IF &mot1_B = 1
        {
          &fs_Magneto1 = 3    
        }
        ELSE
        {
          IF &mot1_S = 1
          {
            &fs_Magneto1 = 4    
          }
        }
      }
    }
  }
}

Var 0093, name mot1_off, Link IOCARD_SW, Input 140     // Inter Starter moteur 1
{
  IF &mot1_off = 1
  {
    &fs_Magneto1 = 0    
  }
}

Var 0094, name mot1_R, Link IOCARD_SW, Input 135
{
  IF &mot1_R = 1
  {
    &fs_Magneto1 = 1    
  }
}

Var 0095, name mot1_L, Link IOCARD_SW, Input 143
{
  IF &mot1_L = 1
  {
    &fs_Magneto1 = 2    
  }
}

Var 0096, name mot1_B, Link IOCARD_SW, Input 139
{
  IF &mot1_B = 1
  {
    &fs_Magneto1 = 3    
  }
}

Var 0097, name mot1_S, Link IOCARD_SW, Input 136
{
  IF &mot1_S = 1
  {
    &fs_Magneto1 = 4    
  }
}

Var 0098, name fs_Magneto2, Link FSUIPC_INOUT, Offset $092A, Length 2     // Magentos moteur 2 forces selon panneau
{
  IF &mot2_off = 1
  {
    &fs_Magneto2 = 0    
  }
  ELSE
  {
    IF &mot2_R = 1
    {
      &fs_Magneto2 = 1    
    }
    ELSE
    {
      IF &mot2_L = 1
      {
        &fs_Magneto2 = 2    
      }
      ELSE
      {
        IF &mot2_B = 1
        {
          &fs_Magneto2 = 3    
        }
        ELSE
        {
          IF &mot2_S = 1
          {
            &fs_Magneto2 = 4    
          }
        }
      }
    }
  }
}

Var 0099, name mot2_off, Link IOCARD_SW, Input 109     // Inter Starter moteur 2
{
  IF &mot2_off = 1
  {
    &fs_Magneto2 = 0    
  }
}

Var 0100, name mot2_R, Link IOCARD_SW, Input 110
{
  IF &mot2_R = 1
  {
    &fs_Magneto2 = 1    
  }
}

Var 0101, name mot2_L, Link IOCARD_SW, Input 111
{
  IF &mot2_L = 1
  {
    &fs_Magneto2 = 2    
  }
}

Var 0102, name mot2_B, Link IOCARD_SW, Input 115
{
  IF &mot2_B = 1
  {
    &fs_Magneto2 = 3    
  }
}

Var 0103, name mot2_S, Link IOCARD_SW, Input 114
{
  IF &mot2_S = 1
  {
    &fs_Magneto2 = 4    
  }
}

Var 0104, name sw_fuel1, Link IOCARD_SW, Input 102     // inter pompe 1
{
  IF &sw_fuel1 = 1
  {
    &fs_fuel = SETBIT 1
  }
  ELSE
  {
    &fs_fuel = CLEARBIT 1
  }
}

Var 0105, name sw_fuel2, Link IOCARD_SW, Input 101     // inter pompe 2
{
  IF &sw_fuel2 = 1
  {
    &fs_fuel = SETBIT 0
  }
  ELSE
  {
    &fs_fuel = CLEARBIT 0
  }
}

Var 0106, name fs_fuel, Link FSUIPC_INOUT, Offset $3125, Length 1     // pompe FS forc selon panneau
{
  IF &sw_fuel1 = 1
  {
    &fs_fuel = SETBIT 1
  }
  ELSE
  {
    &fs_fuel = CLEARBIT 1
  }
  IF &sw_fuel2 = 1
  {
    &fs_fuel = SETBIT 0
  }
  ELSE
  {
    &fs_fuel = CLEARBIT 0
  }
}

Var 0107, name pos_throttle_1, Link FSUIPC_IN, Offset $088C, Length 2     // position gaz mot 1
{
  CALL &calc_voy_gear
}

Var 0108, name pos_throttle_2, Link FSUIPC_IN, Offset $0924, Length 2     // position gaz mot 2
{
  CALL &calc_voy_gear
}

//  *****************************************************************************************
//  ********************************  ECLAIRAGES  ***************************************
//  *****************************************************************************************

Var 0109, name fs_Lights, Link FSUIPC_INOUT, Offset $0D0C, Length 2     // Eclairages
{
  CALL &init_lights
}

Var 0110, name Inter_NAV, Link IOCARD_SW, Input 80     // NAV Light
{
  IF &Inter_NAV = 1
  {
    &fs_Lights = SETBIT 0
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 0
  }
}

Var 0111, name Inter_BCN, Link IOCARD_SW, Input 72     // Inter Beacon
{
  IF &Inter_BCN = 1
  {
    &fs_Lights = SETBIT 1
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 1
  }
}

Var 0112, name Inter_LDG, Link IOCARD_SW, Input 79     // Phare dcollage
{
  IF &Inter_LDG = 1
  {
    &fs_Lights = SETBIT 2
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 2
  }
}

Var 0113, name Inter_TAXI, Link IOCARD_SW, Input 75     // Inter Taxi Light
{
  IF &Inter_TAXI = 1
  {
    &fs_Lights = SETBIT 3
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 3
  }
}

Var 0114, name Inter_STROBE, Link IOCARD_SW, Input 77     // Inter Strobe
{
  IF &Inter_STROBE = 1
  {
    &fs_Lights = SETBIT 4
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 4
  }
}

Var 0115, name Inter_PANEL, Link IOCARD_SW, Input 74     // Eclairage T de B
{
  IF &Inter_PANEL = 1
  {
    &fs_Lights = SETBIT 5
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 5
  }
}

Var 0116, name light_ice, Link FSUIPC_INOUT, Offset $05D8, Length 2     // light ice ou smoke system
{
  &light_ice = &sw_light_ice    
}

Var 0117, name sw_light_ice, Link IOCARD_SW, Input 82     // inter light aile
{
  IF &sw_light_ice = 1
  {
    &light_ice = 1    
  }
  ELSE
  {
    &light_ice = 0    
  }
}

Var 0118, name init_lights, Link SUBRUTINE
{
  IF &Inter_NAV = 1
  {
    &fs_Lights = SETBIT 0
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 0
  }
  IF &Inter_BCN = 1
  {
    &fs_Lights = SETBIT 1
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 1
  }
  IF &Inter_LDG = 1
  {
    &fs_Lights = SETBIT 2
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 2
  }
  IF &Inter_TAXI = 1
  {
    &fs_Lights = SETBIT 3
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 3
  }
  IF &Inter_STROBE = 1
  {
    &fs_Lights = SETBIT 4
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 4
  }
  IF &Inter_PANEL = 1
  {
    &fs_Lights = SETBIT 5
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 5
  }
  IF &inter_flood = 1
  {
    &fs_Lights = SETBIT 9
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 9
  }
}

Var 0119, name inter_flood, Link IOCARD_SW, Input 76     // inter plafonnier
{
  IF &inter_flood = 1
  {
    &fs_Lights = SETBIT 10
  }
  ELSE
  {
    &fs_Lights = CLEARBIT 10
  }
} 

//  ************************************************************************
//  ******************************  RADIO  ********************************
//  ************************************************************************
//  *******************************  COM1  ********************************
//  *************************************************************************

Var 0201, name freq_sby_com1, Link FSUIPC_INOUT, Offset $311A, Length 2     // frequence standby Com1
{
  CALL V0212
}

Var 0202, name freq_act_Com1, Link FSUIPC_INOUT, Offset $034E, Length 2     // Frequence Com1 active
{
  CALL V0213
}

Var 0203, name cts_com1, Link IOCARD_ENCODER, Input 37, Aceleration 2, Type 2     // encodeur freq stanby Com1
{
  IF &sw_com1 = 0     // reglage des entiers
  {
    L0 = &cts_com1 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_com1 = ROTATE 18 ,36 ,L0
  }
  ELSE     // reglage des decimales
  {
    L0 = &cts_com1 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_com1 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_com1
  CALL &calc_display
}

Var 0204, name sw_com1, Link IOCARD_SW, Input 40, Type P     // switch de l'encodeur com1

Var 0205, name calc_ent_com1

Var 0206, name calc_dec_com1

Var 0207, name sb_reg_com1, Link SUBRUTINE
{
  L0 = &calc_ent_com1 * 100
  L1 = L0 + &calc_dec_com1
  &freq_sby_com1 = TOBCD L1
}

Var 0208, name temp_com1_stb

Var 0209, name temp_com1_act

Var 0210, name Disp_com1_stb, Link IOCARD_DISPLAY, Digit 11, Numbers 5     // Sortie displays freq Standby Com1

Var 0211, name Disp_com1_act, Link IOCARD_DISPLAY, Digit 6, Numbers 5     // sortie display freq active Com1

Var 0212, Link SUBRUTINE
{
  L0 = FROMBCD &freq_sby_com1
  &temp_com1_stb = L0 + 10000
}

Var 0213, Link SUBRUTINE
{
  L0 = FROMBCD &freq_act_Com1
  &temp_com1_act = L0 + 10000
}

Var 0214, Link FSUIPC_INOUT, Offset $3123, Length 1     // Freq Com1 passage active/standby
{
  CALL &calc_display
}

Var 0215, name Inverseur_Com1, Link IOCARD_SW, Input 44, Type P
{
  V0214 = TOGGLE 3
  } 


//  ************************************************************************
//  ************************* NAV1  ***************************************
//  ************************************************************************



Var 0224, name freq_sby_nav1, Link FSUIPC_INOUT, Offset $311E, Length 2     // frequence standby nav1
{
  CALL V0235
}

Var 0225, name freq_act_nav1, Link FSUIPC_INOUT, Offset $0350, Length 2     // Frequence nav1 active
{
  CALL V0236
}

Var 0226, name cts_nav1, Link IOCARD_ENCODER, Input 45, Aceleration 2, Type 2     // encodeur freq stanby nav1
{
  IF &sw_nav1 = 0     // reglage des entiers
  {
    L0 = &cts_nav1 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_nav1 = ROTATE 8 ,17 ,L0
  }
  ELSE     // reglage des decimales
  {
    L0 = &cts_nav1 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_nav1 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_nav1
  CALL &calc_display
}

Var 0227, name sw_nav1, Link IOCARD_SW, Input 53, Type P     // switch de l'encodeur nav1

Var 0228, name calc_ent_nav1

Var 0229, name calc_dec_nav1

Var 0230, name sb_reg_nav1, Link SUBRUTINE
{
  L0 = &calc_ent_nav1 * 100
  L1 = L0 + &calc_dec_nav1
  &freq_sby_nav1 = TOBCD L1
}

Var 0231, name temp_nav1_stb

Var 0232, name temp_nav1_act

Var 0233, name Disp_nav1_stb, Link IOCARD_DISPLAY, Digit 27, Numbers 5     // Sortie displays freq Standby nav1

Var 0234, name Disp_nav1_act, Link IOCARD_DISPLAY, Digit 22, Numbers 5     // sortie display freq active nav1

Var 0235, Link SUBRUTINE
{
  L0 = FROMBCD &freq_sby_nav1
  &temp_nav1_stb = L0 + 10000
}

Var 0236, Link SUBRUTINE
{
  L0 = FROMBCD &freq_act_nav1
  &temp_nav1_act = L0 + 10000
}

Var 0237, Link FSUIPC_INOUT, Offset $3123, Length 1     // Freq nav1 passage active/standby
{
  CALL &calc_display
}

Var 0238, name Inverseur_nav1, Link IOCARD_SW, Input 47, Type P
{
  V0237 = TOGGLE 1
}

//  ******************************************************************************
//  ******************************** COM2  *************************************
//  ******************************************************************************

Var 0243, name freq_sby_com2, Link FSUIPC_INOUT, Offset $311C, Length 2     // frequence standby com2
{
  CALL V0254
}

Var 0244, name freq_act_com2, Link FSUIPC_INOUT, Offset $3118, Length 2     // Frequence com2 active
{
  CALL V0255
}

Var 0245, name cts_com2, Link IOCARD_ENCODER, Input 63, Aceleration 2, Type 2     // encodeur freq stanby com2
{
  IF &sw_com2 = 0     // reglage des entiers
  {
    L0 = &cts_com2 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_com2 = ROTATE 18 ,36 ,L0
  }
  ELSE     // reglage des decimales
  {
    L0 = &cts_com2 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_com2 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_com2
  CALL &calc_display
}

Var 0246, name sw_com2, Link IOCARD_SW, Input 71, Type P     // switch de l'encodeur com2

Var 0247, name calc_ent_com2

Var 0248, name calc_dec_com2

Var 0249, name sb_reg_com2, Link SUBRUTINE
{
  L0 = &calc_ent_com2 * 100
  L1 = L0 + &calc_dec_com2
  &freq_sby_com2 = TOBCD L1
}

Var 0250, name temp_com2_stb

Var 0251, name temp_com2_act

Var 0252, name Disp_com2_stb, Link IOCARD_DISPLAY, Digit 38, Numbers 5     // Sortie displays freq Standby com2

Var 0253, name Disp_com2_act, Link IOCARD_DISPLAY, Digit 43, Numbers 5     // sortie display freq active com2

Var 0254, Link SUBRUTINE
{
  L0 = FROMBCD &freq_sby_com2
  &temp_com2_stb = L0 + 10000
}

Var 0255, Link SUBRUTINE
{
  L0 = FROMBCD &freq_act_com2
  &temp_com2_act = L0 + 10000
}

Var 0256, Link FSUIPC_INOUT, Offset $3123, Length 1     // Freq com2 passage active/standby
{
CALL &calc_display
}
Var 0257, name Inverseur_com2, Link IOCARD_SW, Input 67, Type P
{
  V0256 = TOGGLE 2
  }
  
  //  ***************************************************************************************
  //  **********************************  NAV2  ********************************************
  //  ***************************************************************************************


Var 0268, name freq_sby_nav2, Link FSUIPC_INOUT, Offset $3120, Length 2     // frequence standby nav2
{
  CALL V279
}

Var 0269, name freq_act_nav2, Link FSUIPC_INOUT, Offset $0352, Length 2     // Frequence nav2 active
{
  CALL V0280
}

Var 0270, name cts_nav2, Link IOCARD_ENCODER, Input 54, Aceleration 2, Type 2     // encodeur freq stanby nav2
{
  IF &sw_nav2 = 0     // reglage des entiers
  {
    L0 = &cts_nav2 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_nav2 = ROTATE 8 ,17 ,L0
  }
  ELSE     // reglage des decimales
  {
    L0 = &cts_nav2 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_nav2 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_nav2
  CALL &calc_display
}

Var 0271, name sw_nav2, Link IOCARD_SW, Input 62, Type P     // switch de l'encodeur nav2

Var 0272, name calc_ent_nav2

Var 0273, name calc_dec_nav2

Var 0274, name sb_reg_nav2, Link SUBRUTINE
{
  L0 = &calc_ent_nav2 * 100
  L1 = L0 + &calc_dec_nav2
  &freq_sby_nav2 = TOBCD L1
}

Var 0275, name temp_nav2_stb

Var 0276, name temp_nav2_act

Var 0277, name Disp_nav2_stb, Link IOCARD_DISPLAY, Digit 54, Numbers 5     // Sortie displays freq Standby nav2

Var 0278, name Disp_nav2_act, Link IOCARD_DISPLAY, Digit 59, Numbers 5     // sortie display freq active nav2

Var 0279, Link SUBRUTINE
{
  L0 = FROMBCD &freq_sby_nav2
  &temp_nav2_stb = L0 + 10000
}

Var 0280, Link SUBRUTINE
{
  L0 = FROMBCD &freq_act_nav2
  &temp_nav2_act = L0 + 10000
}

Var 0281, Link FSUIPC_INOUT, Offset $3123, Length 1     // Freq nav2 passage active/standby
{
CALL &calc_display
}

Var 0282, name Inverseur_nav2, Link IOCARD_SW, Input 56, Type P
{
  V0281 = TOGGLE 0
}

//   *******************************************************************************
//   *******************************  ADF  ****************************************
//   *******************************************************************************

Var 0300, name ADF_calc, Link SUBRUTINE    //  initialisation ADF
{
  &ADF_Stb_Dec = 5         //  variable ADF Standby,   dcimale
  &ADF_Stb_Ent = 385         //  variable ADF Standby,  Entier
  &ADF_Stb_Ent_R = DIV &ADF_Stb_Ent ,10
  CALL &XADF_Stb_Ent_R     // vers subroutine  ("C" calc, "R" rotate)
  CALL &CaADF_Stb_Freq     // vers subroutine  ("C" calc, "R" rotate) 
  CALL &calc_display
}


Var 0301, name X_ADF_Act_Ent, Link FSUIPC_INOUT, Offset $034C, Length 2
{
  L0 = FROMBCD &X_ADF_Act_Ent
  &ADF_Act_Ent = L0    
  &ADF_Act_Ent_R = DIV &ADF_Act_Ent ,10
  CALL &XADF_Act_Ent_R
  CALL &CaADF_Act_Freq
}

Var 0302, name X_ADF_Act_Dec, Link FSUIPC_INOUT, Offset $0356, Length 2
{
  &ADF_Act_Dec = &X_ADF_Act_Dec    
  CALL &XADF_Act_Ent_R
  CALL &CaADF_Act_Freq
}

Var 0303, name ADF_Act_Ent     //  FSUIPC ADF actif , Entier: 3 digits

Var 0304, name ADF_Act_Dec     // FSUIPC ADF actif , dcimal: 1 digits

Var 0305, name ADF_Act_Freq     //  total (needed for display): 4 digits

Var 0306, name ADF_Stb_Ent     // FSUIPC ADF standby, Entier: 3 digits

Var 0307, name ADF_Stb_Dec     // FSUIPC ADF standby, dcimal: 1 digit

Var 0308, name ADF_Stb_Freq     // total (needed for display): 4 digits

Var 0309, name CaADF_Act_Freq, Link SUBRUTINE
{
  L0 = &ADF_Act_Ent * 10     // entier * 10
  &ADF_Act_Freq = L0 + &ADF_Act_Dec     // + decimal
  CALL &Out_ADF_Act
}

Var 0310, name CaADF_Stb_Freq, Link SUBRUTINE
{
  L0 = &ADF_Stb_Ent * 10     // entier * 10
  &ADF_Stb_Freq = L0 + &ADF_Stb_Dec     // + decimal
  CALL &Out_ADF_Stb
}

Var 0311, name Out_ADF_Act, Link SUBRUTINE
{
  &temp_ADF_act = &ADF_Act_Freq         //      liaison vers  carte display
}

Var 0312, name Out_ADF_Stb, Link SUBRUTINE
{
  &temp_ADF_stb = &ADF_Stb_Freq         //      liaison vers  carte display
}

Var 0313, name ADF_Act_Ent_R     //      Entier  2 digits controll par enco

Var 0314, name ADF_Act_Dec_R     //       Dcimal  2 digits controll par en

Var 0315, name ADF_Stb_Ent_R     //      Entier  2 digits controll par enco

Var 0316, name ADF_Stb_Dec_R     //       Dcimal  2 digits controll par en

Var 0317, name XADF_Act_Ent_R, Link SUBRUTINE
{
  L0 = MOD &ADF_Act_Ent ,10
  L0 = L0 * 10
  &ADF_Act_Dec_R = L0 + &ADF_Act_Dec
}

Var 0318, name CaADF_Act_Ent, Link SUBRUTINE
{
  L0 = DIV &ADF_Act_Dec_R ,10
  L1 = &ADF_Act_Ent_R * 10
  &ADF_Act_Ent = L0 + L1
}

Var 0319, name XADF_Stb_Ent_R, Link SUBRUTINE
{
  L0 = MOD &ADF_Stb_Ent ,10
  L0 = L0 * 10
  &ADF_Stb_Dec_R = L0 + &ADF_Stb_Dec
}

Var 0320, name CaADF_Stb_Ent, Link SUBRUTINE
{
  L0 = DIV &ADF_Stb_Dec_R ,10
  L1 = &ADF_Stb_Ent_R * 10
  &ADF_Stb_Ent = L0 + L1
}

Var 0321, name RO_ADF_Stb, Link IOCARD_ENCODER, Input 4, Aceleration 4, Type 2
{
  IF &sw_ADF = 0     // reglage des entiers
  {
    L0 = &RO_ADF_Stb * -1     //         changer de sens 
    &ADF_Stb_Ent_R = ROTATE 20 ,99 ,L0
  }
  ELSE
  {
    L0 = &RO_ADF_Stb * 5
    &ADF_Stb_Dec_R = ROTATE 0 ,99 ,L0
    &ADF_Stb_Dec = MOD &ADF_Stb_Dec_R ,10
  }
  CALL &CaADF_Stb_Ent
  CALL &CaADF_Stb_Freq
}

Var 0324, name sw_ADF, Link IOCARD_SW, Input 8, Type P     // swich encodeur

Var 0325, name calc_ent_ADF

Var 0326, name calc_dec_ADF

Var 0327, name FreqSwap, Link IOCARD_SW, Input 2, Type P
{
  L0 = &ADF_Act_Ent_R    
  L1 = &ADF_Act_Dec_R    
  L2 = &ADF_Act_Ent    
  &Save = &ADF_Act_Dec    
  &X_ADF_Act_Dec = &ADF_Stb_Dec         // dcimal digit to fsuipc
  &X_ADF_Act_Ent = TOBCD &ADF_Stb_Ent     // Entier 3 digits en bcd vers fsuipc
  &ADF_Stb_Ent_R = L0    
  &ADF_Stb_Dec_R = L1    
  &ADF_Stb_Ent = L2    
  &ADF_Stb_Dec = &Save    
  CALL &CaADF_Stb_Ent
  CALL &CaADF_Stb_Freq
}

Var 0328, name temp_ADF_act
{
CALL &calc_display
}

Var 0329, name temp_ADF_stb
{
CALL &calc_display
}

Var 0330, name Disp_ADF_Act, Link IOCARD_DISPLAY, Digit 48, Numbers 5

Var 0331, name Disp_ADF_Stb, Link IOCARD_DISPLAY, Digit 32, Numbers 5

Var 0332, name Save

Var 0400, name calc_display, Link SUBRUTINE     // affiche displays ON ou OFF
{
  IF &sw_avionics = 0
  {
    &Disp_com1_stb = -999999    
    &Disp_com1_act = -999999    
    &Disp_nav1_stb = -999999    
    &Disp_nav1_act = -999999    
    &Disp_com2_stb = -999999    
    &Disp_com2_act = -999999    
    &Disp_nav2_stb = -999999    
    &Disp_nav2_act = -999999 
	&Disp_ADF_Stb = -999999    
    &Disp_ADF_Act = -999999 
	&Disp_DME_dist     = -999999    
    &Disp_DME_speed = -999999
    &Disp_DME_time    = -999999 
  }
  IF &sw_avionics = 1
  {
    &Disp_com1_stb = &temp_com1_stb    
    &Disp_com1_act = &temp_com1_act    
    &Disp_nav1_stb = &temp_nav1_stb    
    &Disp_nav1_act = &temp_nav1_act    
    &Disp_com2_stb = &temp_com2_stb    
    &Disp_com2_act = &temp_com2_act    
    &Disp_nav2_stb = &temp_nav2_stb    
    &Disp_nav2_act = &temp_nav2_act   
	 &Disp_ADF_Stb = &temp_ADF_stb    
     &Disp_ADF_Act = &temp_ADF_act
	 CALL &DME1_DME2
  }
}

//  *************************************************************************
//  *************************  DME  ****************************************
//  **************************************************************************

Var 0450, name swap_DME, Link IOCARD_SW, Input 48,      // swicht passage DME1_DME2

{
  IF &swap_DME = 0
  {
  &DME_select = 1
   }
   IF &swap_DME = 1
   {
   &DME_select = 2
   }
   }

Var 0451, name DME_select, Link FSUIPC_INOUT, offset $0378, length 2   //  passage DME1_DME2

  

Var 0452, name Disp_DME_speed, Link IOCARD_DISPLAY, Digit 16, Numbers 3     // sortie display speed

Var 0453, name Disp_DME_dist, Link IOCARD_DISPLAY, Digit 0, Numbers 3     // sortie display distance

Var 0454, name Disp_DME_time, Link IOCARD_DISPLAY, Digit 20, Numbers 2     // sortie display time



// ****************************************************************
//  **************************  DME1 ****************************
//  ***************************************************************

Var 0460, name DME1_dist, Link FSUIPC_IN, Offset $0300, Length 2     // distance DME1 en nm*10
{
  CALL &DME1_DME2
}
Var 0461, name calc_spd_DME1     // affiche la vitesse DME1 en kt
{
  CALL &DME1_DME2
}

Var 0462, name DME1_speed, Link FSUIPC_IN, Offset $0302, Length 2     // vitesse DME 1 en kts*10
{
  L0 = &DME1_speed / 10
  &calc_spd_DME1 = L0    
}

Var 0463, name calc_time_DME1
{
  CALL &DME1_DME2
}

Var 0464, name DME1_time, Link FSUIPC_IN, Offset $0304, Length 2     // time to station DME1 en sec*10

  {
     L0 = &DME1_time / 600    // time to station en minutes
  
       &calc_time_DME1  = TRUNC L0    
  }

// ****************************************************************
//  **************************  DME2 ****************************
//  ***************************************************************

Var 0470, name DME2_dist, Link FSUIPC_IN, Offset $0306, Length 2     // distance DME2*10
{
  CALL &DME1_DME2
}

Var 0471, name calc_spd_DME2     // affiche la vitesse DME2 en kt
{
  CALL &DME1_DME2
}

Var 0472, name DME2_speed, Link FSUIPC_IN, Offset $0308, Length 2     // vitesse DME2 en kts*10
{
  L0 = &DME2_speed / 10
  &calc_spd_DME2 = L0    
}

Var 0473, name calc_time_DME2
{
  CALL &DME1_DME2
}

Var 0474, name DME2_time, Link FSUIPC_IN, Offset $030A, Length 2     // affiche time to station DME2 en sec*10

  {
     L0 = &DME2_time / 600    // time to station en minutes
     
       &calc_time_DME2  = TRUNC L0    
  }
Var 0475, name DME1_DME2, Link SUBRUTINE
{
  IF &swap_DME = 0
  {
     &Disp_DME_dist =  &DME1_dist 
	 &Disp_DME_speed = &calc_spd_DME1
    &Disp_DME_time = &calc_time_DME1
  }
  ELSE
  {
    L0 = &DME2_dist / 10
	L1 = TRUNC L0
     &Disp_DME_dist =  L1
	 &Disp_DME_speed = &calc_spd_DME2
    &Disp_DME_time = &calc_time_DME2
  }
}


