Nasal-Interpreter/test/efb.nas

2045 lines
115 KiB
Plaintext
Raw Permalink Blame History

#// Wrappers for property I/O, for conveniently switching between two methods
var setProp = func(prop, value){
#// setprop(prop, value);
props.getNode("/").setValue(prop, value);
}
var getProp = func(prop){
#// getprop(prop);
props.getNode("/").getValue(prop);
}
var ChartsList =
{
'KATL':
{
STAR: ["STAR_CANUK1_RNAV", "STAR_ERLIN9_RNAV", "STAR_FLCON7_RNAV", "STAR_HERKO6_RNAV", "STAR_HONIE8_RNAV", "STAR_LA_GRANGE2", "STAR_PECHY7_RNAV", "STAR_ROME4", "STAR_RPTOR1_RNAV", "STAR_SINCA5", "STAR_VIKNN_3RNAV", "STAR_WHINZ1"],
STARs: 12,
IAP: ["ILS_8L_Cat II - III", "ILS_PRM_8L", "ILS_PRM_8L_CAT II - III", "ILS_PRM_8R", "ILS_PRM_9L", "ILS-LOC_8L", "ILS-LOC_8R", "ILS-LOC_9L"],
IAPs: 8,
SID: ["SID_ATL5", "SID_BRAV6_RNAV", "SID_CADIT6_RNAV", "SID_COKEM5_RNAV", "SID_DAWGS5_RNAV", "SID_DOOLY5_RNAV", "SID_GEETK6_RNAV", "SID_JCKTS6_RNAV", "SID_JOGOR4_RNAV", "SID_MUNSN5_RNAV", "SID_NOVSS4_RNAV", "SID_NUGGT5_RNAV"],
SIDs: 12,
APT: "APT_0",
APTs: 1,
LOCATION: "ATLANTA USA",
NAME: "Hartsfield-Jackson"
},
'KLAX':
{
STAR: "REDEYE2",
STARs: 1,
IAP: ["06L-ILS", "06R-ILS", "07L-ILS", "07R-ILS"],
IAPs: 4,
SID: "SNGO6",
SIDs: 1,
APT: "APT_0",
APTs: 1,
LOCATION: "LOS ANGELES USA",
NAME: "Intntl"
},
'KIAH':
{
STAR: ["RIICE3_1", "RIICE_2"],
STARs: 2,
IAP: ["09-ILS", "15R-ILS"],
IAPs: 2,
SID: "",
SIDs: 0,
APT: "APT_0",
APTs: 1,
LOCATION: "HOUSTON USA",
NAME: "G. Bush Intctl"
},
'VABB':
{
STAR: "",
STARs: 0,
IAP: ["09-ILS-DME", "14-ILS-DME"],
IAPs: 2,
SID: "EKPOSxA",
SIDs: 1,
APT: "APT_0",
APTs: 1,
LOCATION: "MUMBAI IN",
NAME: "Chhatrapati Shivaji"
},
'KMEM':
{
STAR: "BEERT4",
STARs: 1,
IAP: "09-ILS_LOC",
IAPs: 1,
SID: "",
SIDs: 0,
APT: "APT_0",
APTs: 1,
LOCATION: "MEMPHIS USA",
NAME: "International"
},
'LFRB':
{
STAR: "STAR",
STARs: 1,
IAP: ["IAP_25L", "IAP_25L_RNAV", "ILS_Y_25L", "ILS_YZ_07R", "ILS_Z_25L", "NDB_25L", "RADAR", "RNAV_07R", "VFR_APP01", "VFR_LNDG_01"],
IAPs: 11,
SID: ["SID_07R", "SID_25L"],
SIDs: 2,
APT: ["APT_0", "APT_1"],
APTs: 2,
LOCATION: "BREST FR",
NAME: "Guipavas"
},
'LFRM':
{
STAR: ["VFR_APP01", "VFR_LND01"],
STARs: 2,
IAP: "",
IAPs: 0,
SID: "",
SIDs: 0,
APT: "APT_0",
APTs: 1,
LOCATION: "LE MANS FR",
NAME: "Arnage"
},
'LIME':
{
STAR: ["STAR_ASTIG_ODINA_1S", "STAR_ASTIG_ODINA_1T", "STAR_DIXER_GEN_IDONA_1S", "STAR_DIXER_GEN_IDONA_1T", "STAR_DORIN_LUSIL_OSKOR_1S", "STAR_DORIN_LUSIL_OSKOR_1T", "STAR_East", "STAR_West", "STAR_VOR_DME", "VOR_Y28", "VOR_Y28_2", "VOR_Z28"],
STARs: 12,
IAP: ["ILS-PAPA-28", "ILS-PAPA-28-CAT II", "ILS-SIERRA-28", "ILS-SIERRA-28-CAT II", "ILS-TANGO-28", "ILS-TANGO-28-CAT II", "ILS-X28", "ILS-Y28", "ILS-Z28"],
IAPs: 9,
SID: ["SID_10_BEKAN_DORIN_5S", "SID_10-28_BEKAN5T_DORIN5T_ORI5QT", "SID_10-28_Alternate", "SID_28_SRN5R_TZO5R_TZO5S", "SID_InitialClimb", "SID10_InitialClimb", "SID28_InitialClimb", "SID28_InitialClimb2", "DEP_North_East", "DEP_South", "DEP_West"],
SIDs: 12,
APT: ["APT_0", "APT_0_Small", "GROUND_East_Apron", "GROUND_North_Apron", "GROUND_West_Apron"],
APTs: 6,
LOCATION: "BERGAMO IT",
NAME: "Orio al Serio"
},
'LOWI':
{
STAR: ["26-RTT", "STAR", "VFR_East", "VFR_West_KTI", "West-NDB_KYI"],
STARs: 5,
IAP: ["LOC_26_RNAV", "LOC_DME_East", "LOC_DME_West", "NDB_East", "RNAV_08", "RNAV_26", "SPEC_LOC_DME_East"],
IAPs: 8,
SID: ["08-RTT", "General Departure", "SID_08", "SID0_RTT1W", "SID_08_SPECPERF_KPT1Z", "SID_08_SPECPERF_RTT2Z", "SID-26", "SID_26_MOGTI1H_RTT1Y", "SID_26_RNAV"],
SIDs: 9,
APT: ["APT_0", "APT_1"],
APTs: 2,
LOCATION: "INNSBRUCK AT",
NAME: "Kranebitten"
},
'WSSS':
{
STAR: ["BOBAG1A", "BOBAG1B", "LAVAX1A", "LAVAX1B"],
STARs: 4,
IAP: ["02C-VOR-DME", "02L-ILS", "02L-ILS-CATII", "20C-VOR-DME", "20R-ILS"],
IAPs: 5,
SID: "BOG1",
SIDs: 1,
APT: ["APT_0", "APT_1"],
APTs: 2,
LOCATION: "SINGAPORE SG",
NAME: "Changi"
},
};
# used in page
var l=[];
var r=[];
for(var i=0;i<21;i+=1)
{
append(l,"");
append(r,"");
}
var KCl0_0 = "";
var KCl0_1 = "";
var KCl0 = "";
var KCl1 = "";
var KCl2 = "";
var KCl3 = "";
var KCl4 = "";
var KCr1 = "";
var KCr2 = "";
var KCr3 = "";
var KCr4 = "";
var KCr5 = "";
var KCr6 = "";
var ChartName = ["NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL", "NULL"];
var ChartDisp = ["NULL", "NULL", "NULL"];
var Keyboard_Helper = "";
var Keyboard_Message = "";
var Index_Max = 0;
var Index_Offset = 0;
var PageList = 0;
# used in efb
var ZoomFact = 0;
var PanHFact = 0;
var PanVFact = 0;
var OriginApt = "NOT Set";
var DestinationApt = "NOT Set";
var ClosingFlightFlag = 0;
var lenght = 0;
var Temp_String = "";
var Cnv_Fact = 0;
var VK_Key = "";
var VK_Input_Mem = 0;
var VK_Output_Mem = 0;
var TMZ_Input_Lenght = 0;
var TMZ_Converted_ID = "";
var TMZ_Converted_Name = "";
var TMZ_Converted_OffSet = "";
var TMZ_zulu_HH = "";
var TMZ_Index = 0;
var TMZ_DB_Size = 0;
var Output_TMZ_Line = "";
var TMZ_DATE = "";
var TMZ_TIME = "";
var Output_HH = 0;
var Output_MM = 0;
var CUT = ["NULL", "NULL", "NULL"];
var Initial_FL = 0;
var Target_FL = 0;
var Initial_GS = 0;
var Target_GS = 0;
var DRC_String = "";
var DRC_Input_Lenght = 0;
# public vars
var helper = "";
var keypress = "";
var nochart = "";
var AptName = "Unknown";
var Chart_Pages = 1;
var DRC_Distance = 0;
var DRC_l3 = "";
var DRC_r3 = "";
var DRC_l5 = "";
var DRC_r5 = "";
var DRC_l7 = "";
var DRC_r8 = "";
var DRC_r9 = "";
var DRC_r10 ="";
# Chart Properties
ident = getProp("/sim/airport/closest-airport-id");
#AptName = getProp("/instrumentation/efb/chart/icao");
if (ident != nil)
{
setProp("instrumentation/efb/chart/icao", ident);
setProp("instrumentation/efb/chart/DEP_icao", getProp("/instrumentation/efb/chart/icao"));
} else setProp("/instrumentation/efb/chart/icao", "");
setProp("/instrumentation/efb/chart/type", "APT");
setProp("/instrumentation/efb/chart/newairport", 0);
setProp("/instrumentation/efb/FlightStatus", 0); # INACTIVE
nochart = 0;
var page = {
update : func {
for(var i=0; i<21; i+=1)
setProp("/instrumentation/efb/display/line"~i~"-l", l[i]);
# r[0] haven't been used
for(var i=1; i<21; i+=1)
setProp("/instrumentation/efb/display/line"~i~"-r", r[i]);
setProp("/instrumentation/efb/display/input-helper", helper);
setProp("/instrumentation/efb/keypress", keypress);
return;
},
clearpage : func {
for(var i=0; i<21; i+=1){
l[i] = "";
r[i] = "";
}
helper = "";
return;
},
index : func {
for(var i=0; i<21; i+=1){
l[i] = "";
r[i] = "";
}
return;
},
index_TEST : func {
for(var i=0; i<21; i+=1)
l[i] = "< TEST_L"~i;
# r[0] haven't been used
for(var i=1; i<15; i+=1)
r[i] = "TEST >";
for(var i=15; i<21; i+=1)
r[i] = "TEST_R"~i~" >";
return;
},
KCupdate : func {
setProp("/instrumentation/efb/display/lineAPT_NAME", KCl0);
setProp("/instrumentation/efb/display/lineAPT_LOCATION", KCl0_0);
setProp("/instrumentation/efb/display/lineAPT_PAGESHOW", KCl0_1);
setProp("/instrumentation/efb/display/lineSTAR", KCl1);
setProp("/instrumentation/efb/display/lineIAP", KCl2);
setProp("/instrumentation/efb/display/lineSID", KCl3);
setProp("/instrumentation/efb/display/lineAPT", KCl4);
setProp("/instrumentation/efb/display/lineCHART1-r", KCr1);
setProp("/instrumentation/efb/display/lineCHART2-r", KCr2);
setProp("/instrumentation/efb/display/lineCHART3-r", KCr3);
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", Keyboard_Helper);
setProp("/instrumentation/efb/Keyboard/CHART_Output_Line", Keyboard_Message);
},
KCclearpage : func {
KCl0 = "";
KCl0_0 = "";
KCl0_1 = "";
KCl1 = "";
KCl2 = "";
KCl3 = "";
KCl4 = "";
KCr1 = "";
KCr2 = "";
KCr3 = "";
Keyboard_Helper = "";
Keyboard_Message = "";
helper = "";
},
DRCupdate : func {
setProp("/instrumentation/efb/display/DRC_l3", DRC_l3);
setProp("/instrumentation/efb/display/DRC_l5", DRC_l5);
setProp("/instrumentation/efb/display/DRC_r3", DRC_r3);
setProp("/instrumentation/efb/display/DRC_r5", DRC_r5);
setProp("/instrumentation/efb/display/DRC_l7", DRC_l7);
setProp("/instrumentation/efb/display/DRC_r8", DRC_r8);
setProp("/instrumentation/efb/display/DRC_r9", DRC_r9);
setProp("/instrumentation/efb/display/DRC_r10", DRC_r10);
},
DRCclearpage : func {
DRC_l3 = "";
DRC_l5 = "";
DRC_r3 = "";
DRC_r5 = "";
DRC_l7 = "";
DRC_r8 = "";
DRC_r9 = "";
DRC_r10 = "";
},
airportinfo : func {
var ClosestName = "";
if (getProp("/instrumentation/gps/scratch/name") == nil)
ClosestName = "";
else
ClosestName = getProp("/instrumentation/gps/scratch/name");
l[2] = "Airport : " ~ getProp("/instrumentation/gps/scratch/ident") ~ " (" ~ ClosestName ~ ")";
l[3] = "Latitude : " ~ sprintf("%3.4f", getProp("/instrumentation/gps/scratch/latitude-deg"));
l[4] = "Longitude : " ~ sprintf("%3.4f", getProp("/instrumentation/gps/scratch/longitude-deg"));
l[5] = "Elevation : " ~ sprintf("%3.4f", getProp("/instrumentation/gps/scratch/altitude-ft")) ~ " ft";
setProp("/environment/metar[6]/station-id", getProp("/instrumentation/gps/scratch/ident"));
l[7] = "Runways : ";
l[8] = " ";
for (var n=0; n<12; n+=1) {
if (getProp("/instrumentation/gps/scratch/runways[" ~ n ~ "]/id") != nil) {
if (n <= 7) l[7] = l[7] ~ getProp("/instrumentation/gps/scratch/runways[" ~ n ~ "]/id") ~ " ";
else l[8] = l[8] ~ getProp("/instrumentation/gps/scratch/runways[" ~ n ~ "]/id") ~ " ";
}
l[10] = "Weather Source: NOAA/METAR";
r[10] = substr(getProp("/environment/metar[6]/data"),0,16) ~ "z";
l[11] = substr(getProp("/environment/metar[6]/data"),17,41);
if (size(getProp("/environment/metar[6]/data")) > 41)
l[12] = substr(getProp("/environment/metar[6]/data"), 58, 41);
l[13] = " Current Weather Situation";
l[14] = "Temperature : " ~ sprintf("%3.2f", getProp("/environment/metar[6]/temperature-degc")) ~ " <20>C";
r[14] = "Dewpoint : " ~ sprintf("%3.2f", getProp("/environment/metar[6]/dewpoint-degc")) ~ " <20>C";
l[15] = "Wind Direction : " ~ sprintf("%3.0f", getProp("/environment/metar[6]/base-wind-dir-deg")) ~ " degs";
r[15] = "Wind Speed : " ~ sprintf("%3.0f", getProp("/environment/metar[6]/base-wind-speed-kt")) ~ " Kt";
l[16] = "Max Visibility : " ~ sprintf("%3.0f", getProp("/environment/metar[6]/max-visibility-m")) ~ " ft";
r[16] = "Min Visibility : " ~ sprintf("%3.0f", getProp("/environment/metar[6]/min-visibility-m")) ~ " ft";
l[17] = "Relative Humidity : " ~ sprintf("%3.2f", getProp("/environment/metar[6]/rel-humidity-norm")) ~ " %";
l[18] = "Pressure : " ~ sprintf("%3.2f", getProp("/environment/metar[6]/pressure-inhg")) ~ " inHg";
l[20] = "Weather Report subject to Station availability";
}
},
FlightMonitor : func {
if (getProp("/instrumentation/efb/FlightStatus") == 1) {
var FStatus = "ACTIVE";
} else FStatus = "INACTIVE";
if (getProp("/autopilot/route-manager/active") == 1) {
if (getProp("/autopilot/route-manager/departure/takeoff-time") != nil) {
var TOT = getProp("/autopilot/route-manager/departure/takeoff-time") ~ "z";
} else TOT = "Unknown";
if (getProp("/autopilot/route-manager/destination/touchdown-time") != nil) {
var TDT = getProp("/autopilot/route-manager/destination/touchdown-time") ~ "z";
} else TDT = "Unknown";
var OAPT = getProp("/autopilot/route-manager/departure/airport") ~ " " ~ getProp("/autopilot/route-manager/departure/runway");
var DAPT = getProp("/autopilot/route-manager/destination/airport") ~ " " ~ getProp("/autopilot/route-manager/destination/runway");
} else {
OAPT = "NOT Set";
DAPT = "NOT Set";
TOT = "Unknown";
TDT = "Unknown";
}
l[2] = "Aircraft: " ~ getProp("/sim/description") ~ " Seattle";
l[3] = "Operator: " ~ substr(getProp("/sim/aircraft-operator"),0,3);
r[3] = "CallSign: " ~ substr(getProp("/sim/multiplay/callsign"), 0,6);
l[4] = "Flight No: " ~ "NOT Set"; # This will be set through CDU (To be done)
r[4] = "Flight Status: " ~ FStatus;
l[5] = "Origin APT: " ~ OAPT;
r[5] = "TO Time: " ~ TOT;
l[6] = "Destination APT: " ~ DAPT;
r[6] = "TD Time: " ~ TDT;
l[7] = "Date: " ~ substr(getProp("environment/metar/data"),0,10);
r[7] = "Time: " ~ getProp("/instrumentation/clock/indicated-short-string") ~ "z";
l[9] = "Ind. ALT: " ~ sprintf("%3.2f", getProp("/Instrumentation/altimeter/indicated-altitude-ft")) ~ " ft";
r[9] = "Press. ALT: " ~ sprintf("%3.2f", getProp("/Instrumentation/altimeter/pressure-alt-ft")) ~ " ft";
l[10] = "Press. hPa: " ~ sprintf("%3.2f", getProp("/Instrumentation/altimeter/setting-hpa"));
r[10] = "Press. inHg: " ~ sprintf("%3.2f", getProp("/Instrumentation/altimeter/setting-inhg"));
l[11] = "Speed Knots: " ~ sprintf("%3.0f", getProp("/Instrumentation/airspeed/indicated-speed-kt"));
r[11] = "Speed Mach: " ~ sprintf("%3.0f", getProp("/Instrumentation/airspeed/indicated-mach"));
l[12] = "Temperature <20>C: " ~ sprintf("%3.2f", getProp("/environment/temperature-degc"));
r[12] = "Temperature <20>F: " ~ sprintf("%3.2f", getProp("/environment/temperature-degf"));
l[13] = "Wind Dir.: " ~ sprintf("%3.0f", getProp("/environment/metar/base-wind-dir-deg")) ~ " degs";
r[13] = "Wind Speed: " ~ sprintf("%3.0f", getProp("/environment/base-wind-speed-kt")) ~ " kts";
l[14] = "Total Fuel: " ~ sprintf("%3.2f", getProp("/consumables/fuel/total-fuel-gals")) ~ " gals";
l[15] = "Gross Weight: " ~ sprintf("%3.2f", getProp("/yasim/gross-weight-lbs")) ~ " lbs";
# warning: this line l[14] has been changed to l[15],be careful of bugs.But it must be at the right side
},
gps : func {
l[1] = " GPS POSITION / SETTINGS";
l[2] = "Latitude : " ~ sprintf("%3.2f", getProp("/instrumentation/gps/indicated-latitude-deg")) ~ " degs";
r[2] = "Longitude : " ~ sprintf("%3.2f", getProp("/instrumentation/gps/indicated-longitude-deg")) ~ " degs";
l[13] = "GPS Mode: " ~ getProp("/instrumentation/gps/mode");
r[13] = "WayPoint ID: " ~ getProp("/instrumentation/gps/wp/wp[1]/ID");
l[14] = "Leg Distance: " ~ sprintf("%3.2f", getProp("/instrumentation/gps/wp/leg-distance-nm")) ~ " Nm";
l[15] = "Leg Magnetic Course : " ~ sprintf("%3.2f", getProp("/instrumentation/gps/wp/leg-mag-course-deg")) ~ " degs";
l[16] = "Leg True Heading: " ~ sprintf("%3.2f", getProp("/instrumentation/gps/wp/leg-true-course-deg")) ~ " degs";
},
charts_keyboard : func {
setProp("/instrumentation/efb/chart/Status", "ON");
setProp("/instrumentation/efb/chart/type", "APT");
PageList = getProp("/instrumentation/efb/chart/PageList");
# Checks existence of Charts in the DB by chart's type ~ "-0"; example: "KSFO/type-0"
var Chart_Search = "";
Chart_Search = sprintf("%s", getProp("/instrumentation/efb/chart/icao"));
# HERE we need to launch the SEARCH into the ChartsList hash
#if (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "-0") == nil ) {
# setProp("/instrumentation/efb/chart_Found", "NOT_FOUND");
# nochart = 1;
#} else {
# setProp("/instrumentation/efb/chart_Found", "FOUND");
# nochart = 0;
#}
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", "Charts for " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ ": " ~ getProp("/instrumentation/efb/chart_Found"));
if (nochart == 0) {
# gets the APT's Name & Location
setProp("/instrumentation/efb/chart/type", "NAME");
KCl0 = getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type"));
setProp("/instrumentation/efb/chart/type", "LOCATION");
KCl0_0 = getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type"));
setProp("/instrumentation/efb/chart/type", "APT");
# Gets the number of charts (by Type) in the Charts DB
STAR_Status = setProp("/instrumentation/efb/chart/NumSTARs", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ "STARs")));
IAP_Status = setProp("/instrumentation/efb/chart/NumIAPs", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ "IAPs")));
SID_Status = setProp("/instrumentation/efb/chart/NumSIDs", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ "SIDs")));
APT_Status = setProp("/instrumentation/efb/chart/NumAPTs", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ "APTs")));
# Gets the Type of chart from Pilot's Selection
if (getProp("/instrumentation/efb/VK_Chart_Type") != "") {
if (getProp("/instrumentation/efb/VK_Chart_Type") == "STAR") {
setProp("/instrumentation/efb/chart/type", "STAR");
Keyboard_Message = getProp("/instrumentation/efb/chart/NumSTARs") ~ " " ~ getProp("/instrumentation/efb/chart/type") ~ " Charts for " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ " Apt - Select a Chart";
STAR_Status = 1;
} else STAR_STATUS = 0;
if (getProp("/instrumentation/efb/VK_Chart_Type") == "IAP") {
setProp("/instrumentation/efb/chart/type", "IAP");
Keyboard_Message = getProp("/instrumentation/efb/chart/NumIAPs") ~ " " ~ getProp("/instrumentation/efb/chart/type") ~ " Charts for " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ " Apt - Select a Chart";
IAP_Status = 1;
} else IAP_Status = 0;
if (getProp("/instrumentation/efb/VK_Chart_Type") == "SID") {
setProp("/instrumentation/efb/chart/type", "SID");
Keyboard_Message = getProp("/instrumentation/efb/chart/NumSIDs") ~ " " ~ getProp("/instrumentation/efb/chart/type") ~ " Charts for " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ " Apt - Select a Chart";
SID_Status = 1;
} else SID_Status = 0;
if (getProp("/instrumentation/efb/VK_Chart_Type") == "APT") {
setProp("/instrumentation/efb/chart/type", "APT");
Keyboard_Message = getProp("/instrumentation/efb/chart/NumAPTs") ~ " " ~ getProp("/instrumentation/efb/chart/type") ~ " Charts for " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ " Apt - Select a Chart";
APT_Status = 1;
} else APT_Status = 0;
setProp("/instrumentation/efb/VK_Chart_Type", getProp("/instrumentation/efb/chart/type"));
setProp("/instrumentation/efb/chartsDB", "ChartsDB/");
#setProp("/instrumentation/efb/chart/selected", getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "-1"));
var lastn = getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "s") - 1;
if (lastn <= 0) lastn = 0;
if ((STAR_Status == 0) and (IAP_Status == 0) and (SID_Status == 0) and (APT_Status == 0)) {
setProp("/instrumentation/efb/chart/Status", 0);
Keyboard_Message = "No Charts available for: " ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ " Apt";
setProp("/instrumentation/efb/chart/Status", "OFF");
}
# Gets the available ICAO/Type charts in the Charts DB
for (var index = 0; index <= 29; index += 1)
ChartName[index] = "";
if (lastn > 0) {
for (var index = 0; index <= lastn; index += 1) {
setProp("/instrumentation/efb/chart/IDX", index);
setProp("/instrumentation/efb/chart/selected", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "-" ~ getProp("/instrumentation/efb/chart/IDX"))));
ChartName[index] = getProp("/instrumentation/efb/chart/selected");
}
} else {
setProp("/instrumentation/efb/chart/selected", (getProp("/instrumentation/efb/chartsDB/" ~ sprintf("%s", getProp("/instrumentation/efb/chart/icao")) ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "-0")));
ChartName[0] = getProp("/instrumentation/efb/chart/selected");
}
Keyboard_Helper = "Enter Airport ICAO";
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", Keyboard_Helper);
setProp("/instrumentation/efb/Keyboard/CHART_Output_Line", Keyboard_Message);
# Prints Charts values to Upper Input Display
if (getProp("/instrumentation/efb/chart/Status") == "ON") {
KCl1 = sprintf(getProp("/instrumentation/efb/chart/NumSTARs"));
KCl2 = sprintf(getProp ("/instrumentation/efb/chart/NumIAPs"));
KCl3 = sprintf(getProp ("/instrumentation/efb/chart/NumSIDs"));
KCl4 = sprintf(getProp ("/instrumentation/efb/chart/NumAPTs"));
# Set Index Offset for proper Page Display (by 3 rows)
if (lastn <=2) Index_Max = 0;
elsif ((lastn > 2) and (lastn <= 5)) Index_Max = 3;
elsif ((lastn > 5) and (lastn <= 8)) Index_Max = 6;
elsif ((lastn > 8) and (lastn <=11)) Index_Max = 9;
elsif ((lastn > 11) and (lastn <=14)) Index_Max = 12;
elsif ((lastn > 14) and (lastn <=17)) Index_Max = 15;
elsif ((lastn > 17) and (lastn <=20)) Index_Max = 18;
elsif ((lastn > 20) and (lastn <=23)) Index_Max = 21;
elsif ((lastn > 23) and (lastn <=26)) Index_Max = 24;
elsif ((lastn > 26) and (lastn <=29)) Index_Max = 27;
Chart_Pages = (Index_Max/3) + 1;
# Displays Actual Chart Page/Total Pages
var Page_Show = "Page " ~ getProp("/instrumentation/efb/chart/PageList") ~ "/" ~ Chart_Pages;
setProp("instrumentation/efb/chart/PageShow", Page_Show);
KCl0_1 = getProp("/instrumentation/efb/chart/PageShow");
# Build 3 rows of Chart Names
for (var index = 0; index <= 2; index += 1) {
Index_Offset = ((getProp("/instrumentation/efb/chart/PageList") - 1) * 3);
Index_Offset = Index_Offset + index;
ChartDisp[index] = ChartName[Index_Offset];
}
# Displays 3 Chart Names [MAX Lenght = 27 chars !], ready for Selection by the Pilot
setProp("instrumentation/efb/chart/Selection_0", ChartDisp[0]);
setProp("instrumentation/efb/chart/Selection_1", ChartDisp[1]);
setProp("instrumentation/efb/chart/Selection_2", ChartDisp[2]);
KCr1 = substr(getProp("instrumentation/efb/chart/Selection_0"), 0, 26);
KCr2 = substr(getProp("instrumentation/efb/chart/Selection_1"), 0, 26);
KCr3 = substr(getProp("instrumentation/efb/chart/Selection_2"), 0, 26);
} else {
KCl0 = "";
KCl0_0 = "";
KCl0_1 = "";
KCl1 = "";
KCl2 = "";
KCl3 = "";
KCl4 = "";
KCr1 = "";
KCr2 = "";
KCr3 = "";
setProp("instrumentation/efb/chart/Selection_0", "");
setProp("instrumentation/efb/chart/Selection_1", "");
setProp("instrumentation/efb/chart/Selection_2", "");
}
page.KCupdate();
}
} # END of 'nochart == 0' Brace
}
};
var efb = {
init : func {
me.UPDATE_INTERVAL = 0.05;
me.loopid = 0;
# INITIALIZE
setProp("/instrumentation/efb/page", "MENU");
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
# Chart Section Stuff
setProp("/instrumentation/efb/chart/type", "APT");
setProp("/instrumentation/efb/chart/selected", "APT_0");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", "");
setProp("/instrumentation/efb/chart/rotation", 0);
setProp("/instrumentation/efb/diagram/rotation", 0);
AptName = getProp("/instrumentation/efb/chart/icao");
# Various Stuff
setProp("/instrumentation/efb/manual-page", 0);
setProp("/instrumentation/efb/vnav_autogen/first", 0);
setProp("/instrumentation/efb/vnav_autogen/gen", 0);
TMZ_DB_Size = getProp("/instrumentation/efb/TimeZonesDB/TMZ_DB_Size") - 1;
setProp("/instrumentation/efb/chart/PageList", 1);
me.reset();
},
searchairport : func(query) {
setProp("/instrumentation/gps/scratch/query", query);
setProp("/instrumentation/gps/scratch/type", "airport");
setProp("/instrumentation/gps/command", "search");
setProp("/instrumentation/efb/selected-rwy/id", "");
},
searchcomms : func(query) {
setProp("/sim/gui/dialogs/scratch/airports/selected-airport/id", query);
#setProp("/sim/gui/dialogs/airports/scratch/type", "airport");
setProp("/sim/gui/dialogs/scratch/airports/mode", "search");
#setProp("/instrumentation/efb/selected-rwy/id", "");
},
searchcharts : func(chart) {setProp("/sim/model/efb/chart", "Charts/" ~ chart ~ ".jpg");},
efbTimer : nil,
update : func {
var keypress = getProp("/instrumentation/efb/keypress");
var currentPage = getProp("/instrumentation/efb/page");
if (currentPage == "MENU") {
# Make sure we know the APT's ICAO
setProp("/instrumentation/gps/scratch/ident", getProp("/sim/airport/closest-airport-id"));
if (getProp("/instrumentation/gps/scratch/ident") != nil) setProp("/instrumentation/efb/chart/icao", sprintf("%s", getProp("/instrumentation/gps/scratch/ident")));
else setProp("/instrumentation/efb/chart/icao", "");
AptName = sprintf("%s", getProp("/instrumentation/efb/chart/icao"));
page.clearpage();
page.index();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
keypress = "";
}
elsif (keypress == "l1") {
setProp("/instrumentation/efb/page", "CHARTS");
setProp("/instrumentation/efb/chart/chartmenu", 0);
setProp("/instrumentation/efb/chart/zoom-in", 0);
ZoomFact = 0;
PanHFact = 0;
PanVFact = 0;
keypress = "";
}
elsif (keypress == "r1") {
setProp("/sim/model/efb/page", "Displays/Video_1.jpg");
setProp("/instrumentation/efb/page", "VIDEO");
keypress = "";
}
elsif (keypress == "l2") {
setProp("/sim/model/efb/page", "Displays/Performance_1.jpg");
setProp("/instrumentation/efb/page", "PERFORMANCE");
keypress = "";
}
elsif (keypress == "r2") {
setProp("/sim/model/efb/page", "Displays/Documents_1.jpg");
setProp("/instrumentation/efb/page", "DOCUMENTS");
keypress = "";
}
elsif (keypress == "l4") {
setProp("/sim/model/efb/page", "Displays/Airport_Info.jpg");
setProp("/instrumentation/efb/page", "APT INFO");
keypress = "";
}
elsif (keypress == "l5") {
setProp("/instrumentation/efb/page", "Airport Charts");
keypress = "";
}
elsif (keypress == "l7") {
setProp("/sim/model/efb/page", "Displays/IDENT_1.jpg");
setProp("/instrumentation/efb/page", "IDENT");
keypress = "";
}
elsif (keypress == "l8") {
setProp("/sim/model/efb/page", "Displays/System_1.jpg");
setProp("/instrumentation/efb/page", "SYSTEMS");
keypress = "";
}
elsif (keypress == "r4") {
#//setProp("/instrumentation/efb/page", "Airport Diagram");
keypress = "";
}
elsif (keypress == "r5") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
keypress = "";
}
elsif (keypress == "r6") {
#//setProp("/instrumentation/efb/page", "Flight Fuel Planner");
keypress = "";
}
elsif (keypress == "r7") {
setProp("/sim/model/efb/page", "Displays/Monitor.jpg");
setProp("/instrumentation/efb/page", "MONITOR");
keypress = "";
}
elsif (keypress == "r8") {
setProp("/instrumentation/efb/page", "INITIALIZE");
keypress = "";
}
#__________________________________________________________________________________________
# CHART SECTION Parser --------------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "CHARTS") {
page.clearpage();
#setProp("/sim/model/efb/chart", "Displays/Help_1.jpg");
setProp("/instrumentation/efb/diagram/rotation", 0);
setProp("/instrumentation/efb/diagram/chartmenu", 0);
setProp("/instrumentation/efb/chartsDB", "Charts/");
#helper = "";
# NOTE: this gives the Airport's name to be used on the bottom line of the Chart Display) has still to be checked: if RouteManager is not selected from the upper MENU, the property is not active...
AptName = getProp("/instrumentation/efb/chart/icao");
#_____________________________
# Chart Selection at Airport |
#_____________________________|
# Checks existence of Charts in the DB
if(ChartsList[AptName] == nil){
setProp("/instrumentation/efb/chart_Found", "NOT_FOUND");
nochart = 1;
}else{
setProp("/instrumentation/efb/chart_Found", "FOUND");
nochart = 0;
}
if (nochart == 0){
page.update();
if (getProp("/instrumentation/efb/chart/type") == "APT"){
l[0] = "AIRPORT MAP";
}
else l[0] = "";
l[20] = AptName;
efb.searchcharts(AptName ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "/" ~ getProp("/instrumentation/efb/chart/selected"));
#efb.searchcharts(AptName ~ "/" ~ getProp("/instrumentation/efb/chart/type") ~ "/" ~ getProp("instrumentation/efb/chart/selection2");
setProp("/sim/model/efb/chart", getProp("/sim/model/efb/chart"));
setProp("/sim/model/efb/chart_BKUP", getProp("/sim/model/efb/chart"));
setProp("/sim/model/efb/Chart_2", getProp("/sim/model/efb/chart_BKUP"));
setProp("/sim/model/efb/Chart_4", getProp("/sim/model/efb/chart_BKUP"));
setProp("/sim/model/efb/Ovlay_1", "Displays/drawing.png");
if (getProp("/instrumentation/efb/chart/chartmenu") == 0) setProp("/sim/model/efb/Ovlay_1", "Displays/drawing.png");
if (getProp("/instrumentation/efb/chart/chartmenu") == 1) setProp("/sim/model/efb/Ovlay_1", "Displays/drawing2.png");
} else {
setProp("/sim/model/efb/chart", "Displays/NoCharts.jpg");
setProp("/sim/model/efb/Ovlay_1", "Displays/drawingNULL.png");
helper = "Airport: " ~ AptName;
}
# Handles the Zoom-In and Zoom-Out EFB buttons on Charts Display; available ZoomFact is 2x and 4x only.
if ((ZoomFact >= 0) and (ZoomFact <= 4)) {
if ((keypress == "Zin") and (nochart == 0)) {
ZoomFact = ZoomFact + 2;
setProp("/instrumentation/efb/chart/zoom-in", ZoomFact);
keypress = "";
}
elsif ((keypress == "Zout") and (nochart == 0) and (ZoomFact > 0)) {
ZoomFact = ZoomFact - 2;
setProp("/instrumentation/efb/chart/zoom-in", ZoomFact);
keypress = "";
}
}
if (ZoomFact == 0) setProp("/instrumentation/efb/chart/zoom-in", 0);
# Handles the Pan-Right, Pan_Left, ScrollUP and ScrollDN EFB buttons on Charts Display; Pan Horizontal Factor is 100; Pan Vertical Factor is 100.
if ((ZoomFact == 2) or (ZoomFact == 4)) {
if ((keypress == "Move_R") and (nochart == 0)) {
PanHFact = PanHFact + 100;
setProp("/instrumentation/efb/chart/panH", PanHFact);
keypress = "";
}
elsif ((keypress == "Move_L") and (nochart == 0)) {
PanHFact = PanHFact - 100;
setProp("/instrumentation/efb/chart/panH", PanHFact);
keypress = "";
}
elsif ((keypress == "ScrollUP") and (nochart == 0)) {
PanVFact = PanVFact + 100;
setProp("/instrumentation/efb/chart/panV", PanVFact);
keypress = "";
}
elsif ((keypress == "ScrollDN") and (nochart == 0)) {
PanVFact = PanVFact - 100;
setProp("/instrumentation/efb/chart/panV", PanVFact);
keypress = "";
}
} elsif (ZoomFact == 0) {
setProp("/instrumentation/efb/chart/panH", -PanHFact);
setProp("/instrumentation/efb/chart/panV", -PanVFact);
}
# Handles Chart Rotation counter-clockwise
if ((keypress == "l2") and (nochart == 0) and (getProp("/instrumentation/efb/chart/chartmenu")) == 0) toggle("/instrumentation/efb/chart/rotation");
# Toggles Overlay Menu On/OFF
if ((keypress == "r8") and (nochart == 0)) toggle("/instrumentation/efb/chart/chartmenu");
# Calls Virtual Keyboard for Chart DB Selection by the Pilot
if (keypress == "l5") {
setProp("/instrumentation/efb/page", "CHARTS_KEYBOARD");
setProp("/instrumentation/efb/chart/zoom-in", 0);
setProp("/instrumentation/efb/VKDRC_keypress", "");
setProp("/instrumentation/efb/VK_Keyboard/Input_String", "");
setProp("/instrumentation/efb/chart/Searchable", 0);
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/chart/zoom-in", 0);
ZoomFact = 0;
PanHFact = -PanHFact;
PanVFact = -PanVFact;
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# AIRPORT INFO SECTION Parser -------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "APT INFO") {
page.clearpage();
efb.searchairport(getProp("/sim/airport/closest-airport-id"));
efb.searchcomms(getProp("/sim/airport/closest-airport-id"));
page.airportinfo();
page.update();
# if (keypress == "r6") {
# setProp("/instrumentation/efb/page", "Runway Information");
# keypress = "";
# }
if (keypress == "r8") {
setProp("/instrumentation/efb/page", "CHARTS");
keypress = "";
}
elsif (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# MONITOR SECTION Parser ------------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "MONITOR") {
page.clearpage();
page.FlightMonitor();
page.update();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# VIDEO SECTION Parser --------------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "VIDEO") {
page.clearpage();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# DOCUMENTS SECTION Parser ----------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "DOCUMENTS") {
page.clearpage();
if (keypress == "l3") {
setProp("/instrumentation/efb/page", "NORM PROC MANUAL");
keypress = "";
}
elsif (keypress == "r2") {
setProp("/sim/model/efb/page", "Displays/Checklists_1.jpg");
setProp("/instrumentation/efb/page", "CHECKLISTS");
keypress = "";
}
elsif (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# PERFORMANCE SECTION Parser --------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "PERFORMANCE") {
page.clearpage();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# CHECKLISTS SECTION Parser ---------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "CHECKLISTS") {
page.clearpage();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
if (keypress == "l2") {
setProp("/sim/model/efb/page", "Displays/Checklists_1_1.jpg");
setProp("/instrumentation/efb/page", "CHECKLISTS");
keypress = "";
}
if (keypress == "r2") {
setProp("/sim/model/efb/page", "Displays/Checklists_1_2.jpg");
setProp("/instrumentation/efb/page", "CHECKLISTS");
keypress = "";
}
#__________________________________________________________________________________________
# IDENT SECTION Parser -------------------------------------------------------------------|
#_________________________________________________________________________________________|
} elsif (currentPage == "IDENT") {
page.clearpage();
IDENTl3 = getProp("/sim/description");
IDENTl4 = substr(getProp("/sim/aircraft-operator"),0,3) ~ " / " ~ substr(getProp("/sim/multiplay/callsign"), 0,6); # this is to ensure that too long 'operator' and 'callsign' data can fit into the EFB display
IDENTr4 = "VMEFB001"; # this is the EFb Seattle version's ID
IDENTl5 = substr(getProp("environment/metar/data"),0,10);
IDENTr5 = getProp("/instrumentation/clock/indicated-short-string") ~ "z";
IDENTl8 = "AIRPORT MAP DATABASE Seattle Data APR1214-JUN3014"; # this is the DB version, which we will periodically update with better and new Charts
setProp("/instrumentation/efb/display/IDENTline3-l", IDENTl3);
setProp("/instrumentation/efb/display/IDENTline4-l", IDENTl4);
setProp("/instrumentation/efb/display/IDENTline4-r", IDENTr4);
setProp("/instrumentation/efb/display/IDENTline5-l", IDENTl5);
setProp("/instrumentation/efb/display/IDENTline5-r", IDENTr5);
setProp("/instrumentation/efb/display/IDENTline8-l", IDENTl8);
setProp("/instrumentation/efb/display/input-helper", helper);
setProp("/instrumentation/efb/keypress", keypress);
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
IDENTl3 = "";
IDENTl4 = "";
IDENTr4 = "";
IDENTl5 = "";
IDENTr5 = "";
IDENTl8 = "";
setProp("/instrumentation/efb/display/IDENTline3-l", IDENTl3);
setProp("/instrumentation/efb/display/IDENTline4-l", IDENTl4);
setProp("/instrumentation/efb/display/IDENTline4-r", IDENTr4);
setProp("/instrumentation/efb/display/IDENTline5-l", IDENTl5);
setProp("/instrumentation/efb/display/IDENTline5-r", IDENTr5);
setProp("/instrumentation/efb/display/IDENTline8-l", IDENTl8);
keypress = "";
}
#__________________________________________________________________________________________
# SYSTEM SECTION Parser ------------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "SYSTEMS") {
page.clearpage();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# CHART SECTION Parser -------------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "CHARTS_KEYBOARD") {
page.clearpage();
page.update();
page.charts_keyboard();
if (getProp("/instrumentation/efb/chart/Searchable") == 0) {
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", "Enter ICAO");
}
# Get the ICAO to be searched for; "Virtual Keyboard" Keys Parser (see EFB_Chart_Keyboard.xml)
if ((getProp("/instrumentation/efb/VKDRC_keypress") != "") and (getProp("/instrumentation/efb/VKDRC_keypress") != "SYMB") and (getProp("/instrumentation/efb/VKDRC_keypress") != "SHIFT")) {
setProp("/instrumentation/efb/VK_Keyboard/Input_String", getProp("/instrumentation/efb/VK_Keyboard/Input_String") ~ getProp("/instrumentation/efb/VKDRC_keypress")); # Build the Input String
if (getProp("/instrumentation/efb/VKDRC_keypress") == "CLEAR") {
setProp("/instrumentation/efb/VK_Keyboard/Input_String", ""); # CLEARs the whole Input Field and other stuff
}
if (getProp("/instrumentation/efb/VKDRC_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/VK_Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/VK_Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VKDRC_keypress", "");
}
}
setProp("/instrumentation/efb/VKDRC_keypress", "");
TMZ_String = getProp("/instrumentation/efb/VK_Keyboard/Input_String");
TMZ_Input_Lenght = size(TMZ_String);
if (TMZ_Input_Lenght <= 3) {
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", getProp("/instrumentation/efb/VK_Keyboard/Input_String")); # Print it to the Keyboard Input Field
} else {
setProp("/instrumentation/efb/chart/Searchable", 1);
setProp("/instrumentation/efb/Keyboard/CHART_Input_Line", "Press [Search IDENT] to search for: " ~ getProp("/instrumentation/efb/VK_Keyboard/Input_String"));
}
if ((getProp("/instrumentation/efb/chart/Searchable") == 1) and (keypress == "l3")) { # do SEARCH CHART
setProp("/instrumentation/efb/chart/icao", getProp("/instrumentation/efb/VK_Keyboard/Input_String"));
page.charts_keyboard();
setProp("/instrumentation/efb/VKDRC_keypress", "");
setProp("/instrumentation/efb/chart/Searchable", 0);
setProp("/instrumentation/efb/VK_Keyboard/Input_String", "");
}
if ((keypress == "PGDN") and (getProp("/instrumentation/efb/chart/PageList") < Chart_Pages)) {
setProp("/instrumentation/efb/chart/SetPage", "INCREASE");
setProp("/instrumentation/efb/chart/PageList", getProp("/instrumentation/efb/chart/PageList") + 1);
}
if ((keypress == "PGUP") and (getProp("/instrumentation/efb/chart/PageList") > 1)) {
setProp("/instrumentation/efb/chart/SetPage", "INCREASE");
setProp("/instrumentation/efb/chart/PageList", getProp("/instrumentation/efb/chart/PageList") + 1);
}
# Chart Selection - redirection to CHARTS...___________________________________________________________________________________
if (keypress == "r1") {
setProp("/instrumentation/efb/chart/selected", getProp("/instrumentation/efb/chart/Selection_0"));
keypress = "MENU";
}
if (keypress == "r2") {
setProp("/instrumentation/efb/chart/selected", getProp("/instrumentation/efb/chart/Selection_1"));
keypress = "MENU";
}
if (keypress == "r3") {
setProp("/instrumentation/efb/chart/selected", getProp("/instrumentation/efb/chart/Selection_2"));
keypress = "MENU";
}
# _____________________________________________________________________________________________________________________________
if (keypress == "MENU") {
# setProp("/sim/model/efb/page", "Displays/Blank_Test.jpg");
setProp("/instrumentation/efb/chart/Status", "OFF");
setProp("/instrumentation/efb/VK_Chart_Type", "APT"); # This starts and re-starts the Chart_Keyboard with active ICAO/APT Chart displayed ! (see B777 EFB Manual)
setProp("/instrumentation/efb/VK_Keyboard/Input_String", "");
setProp("/instrumentation/efb/page", "CHARTS");
page.KCclearpage();
page.KCupdate();
keypress = "";
}
#__________________________________________________________________________________________
# INITIALIZE SECTION Parser --------------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "INITIALIZE") {
page.clearpage();
if (getProp("/instrumentation/efb/FlightStatus") == 0) {
if (getProp("/autopilot/route-manager/departure/airport") != "")
OriginApt = getProp("/autopilot/route-manager/departure/airport");
else
OriginApt = "NOT Set";
if (getProp("/autopilot/route-manager/destination/airport") != "")
DestinationApt = getProp("/autopilot/route-manager/destination/airport");
else
DestinationApt = "NOT Set";
if ((OriginApt != "NOT Set") and (DestinationApt != "NOT Set")) {
OriginApt = getProp("/autopilot/route-manager/departure/airport");
DestinationApt = getProp("/autopilot/route-manager/destination/airport");
setProp("/sim/model/efb/page", "Displays/Initialize_1.jpg");
ClosingFlightFlag = 1; # Flight INITIABLE
} else {
setProp("/sim/model/efb/page", "Displays/Initialize_2.jpg");
setProp("/instrumentation/efb/FlightStatus", 0);
ClosingFlightFlag = 0; # Flight NOT INITIABLE
}
} elsif ((getProp("/instrumentation/efb/FlightStatus") == 1) and (ClosingFlightFlag == 2)) {
setProp("/instrumentation/efb/FlightStatus", 1); # Flight ACTIVE and CLOSABLE
FlightStatus = 1;
setProp("/sim/model/efb/page", "Displays/Initialize_3.jpg");
}
INITl4 = OriginApt;
INITl5 = DestinationApt;
setProp("/instrumentation/efb/display/INITline4-l", INITl4);
setProp("/instrumentation/efb/display/INITline5-l", INITl5);
if ((keypress == "r8") and (ClosingFlightFlag == 1)) {
setProp("/instrumentation/efb/FlightStatus", 1); # Flight INITIATED
ClosingFlightFlag = 2; # Flight CLOSABLE
keypress = "";
}
if ((keypress == "r8") and (FlightStatus == 1)) {
setProp("/instrumentation/efb/FlightStatus", 0); # Flight NOT ACTIVE
setProp("/sim/model/efb/page", "Displays/Initialize_5.jpg");
FlightStatus = 0;
ClosingFlightFlag = 0; # Flight CLOSED
keypress = "";
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
INITl4 = "";
INITl5 = "";
setProp("/instrumentation/efb/display/INITline4-l", INITl4);
setProp("/instrumentation/efb/display/INITline5-l", INITl5);
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES SECTION Parser ----------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES") {
page.clearpage();
setProp("/instrumentation/efb/Keyboard/Input_String", "");
setProp("/instrumentation/efb/Keyboard/Input_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_Line2", "");
setProp("/instrumentation/efb/Keyboard/Input_Line3", "");
setProp("/instrumentation/efb/VK_keypress", "");
if (keypress == "l3") {
setProp("/instrumentation/efb/page", "UTILITIES_DESC_RATE");
setProp("/sim/model/efb/page", "Displays/PU_DRC.jpg");
setProp("/instrumentation/efb/Keyboard/Input_String", "");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/Input_Unit", "NO_INPUT");
setProp("/instrumentation/efb/DRC_Initial_FL", "300");
setProp("/instrumentation/efb/DRC_Target_FL", "30");
setProp("/instrumentation/efb/DRC_Initial_GS", "250");
setProp("/instrumentation/efb/DRC_Target_GS", "200");
setProp("/instrumentation/efb/DRC_Distance", "50");
setProp("/instrumentation/efb/DRC_Initial_FL_MEM", getProp("/instrumentation/efb/DRC_Initial_FL"));
setProp("/instrumentation/efb/DRC_Target_FL_MEM", getProp("/instrumentation/efb/DRC_Target_FL"));
setProp("/instrumentation/efb/DRC_Initial_GS_MEM", getProp("/instrumentation/efb/DRC_Initial_GS"));
setProp("/instrumentation/efb/DRC_Target_GS_MEM", getProp("/instrumentation/efb/DRC_Target_GS"));
setProp("/instrumentation/efb/DRC_Distance_MEM", getProp("/instrumentation/efb/DRC_Distance"));
VK_Key = "";
#setProp("/instrumentation/efb/VK_DRC_MarkerL", 1);
Initial_FL = 300;
Target_FL = 30;
Initial_GS = 250;
Target_GS = 200;
DRC_Distance = 50;
keypress = "";
}
if (keypress == "l4") {
setProp("/instrumentation/efb/page", "GPS POSITION");
}
if (keypress == "r1") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_SPD");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Spd.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
VK_Input_Mem = 0;
VK_Output_Mem = 0;
}
if (keypress == "r2") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_LNG");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Lng.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
VK_Input_Mem = 0;
VK_Output_Mem = 0;
}
if (keypress == "r3") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_WGT");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Wgt.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
VK_Input_Mem = 0;
VK_Output_Mem = 0;
}
if (keypress == "r4") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_TMP");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Tmp.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
VK_Input_Mem = 0;
VK_Output_Mem = 0;
}
if (keypress == "r5") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_VLM");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Vlm.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
VK_Input_Mem = 0;
VK_Output_Mem = 0;
}
if (keypress == "r6") {
setProp("/instrumentation/efb/page", "UTILITIES_CNV_TMZ");
setProp("/sim/model/efb/page", "Displays/PU_Cnv_Tmz.jpg");
setProp("/instrumentation/efb/VK_keypress", "");
setProp("/instrumentation/efb/VK_IN_Marker", 1);
setProp("/instrumentation/efb/VK_OUT_Marker", 1);
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/Keyboard/Input_HH", "--");
setProp("/instrumentation/efb/Keyboard/Input_MM", "--");
setProp("/instrumentation/efb/Keyboard/Output_HH", "");
setProp("/instrumentation/efb/Keyboard/Output_MM", "");
setProp("/instrumentation/efb/page/Cnv_Fact", "0");
TMZ_String = "";
TMZ_Index = 0;
#Parsing for Month's names
TMZ_DATE = substr(getProp("environment/metar/data"), 5, 5);
if (substr(TMZ_DATE, 0, 2) == "01") TMZ_DATE = "JAN" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "02") TMZ_DATE = "FEB" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "03") TMZ_DATE = "MAR" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "04") TMZ_DATE = "APR" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "05") TMZ_DATE = "MAY" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "06") TMZ_DATE = "JUN" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "07") TMZ_DATE = "JUL" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "08") TMZ_DATE = "AUG" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "09") TMZ_DATE = "SEP" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "10") TMZ_DATE = "OCT" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "11") TMZ_DATE = "NOV" ~ substr(TMZ_DATE, 2, 3);
if (substr(TMZ_DATE, 0, 2) == "12") TMZ_DATE = "DEC" ~ substr(TMZ_DATE, 2, 3);
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Main_Menu.jpg");
setProp("/instrumentation/efb/page", "MENU");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - GPS POSITION ----------------------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "GPS POSITION") {
page.clearpage();
page.gps();
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - SPEED CONVERSION Parser -----------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_SPD") {
Input_Unit = getProp("/instrumentation/efb/VK_IN_Marker");
Output_Unit = getProp("/instrumentation/efb/VK_OUT_Marker");
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "" or (Input_Unit != VK_Input_Mem) or (Output_Unit != VK_Output_Mem)) {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
if (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
if (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
setProp("/instrumentation/efb/Keyboard/Input_Line", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print it to the Keyboard Input Field
# ---------------> Conversion Table Selection
# ---------------> Input Unit 1 () FT/M ---> Output Unit: FT/M, KM/H, KT, MTS, MPH
if (Input_Unit == 1) {
if (Output_Unit == 1) Cnv_Fact = 1;
elsif (Output_Unit == 2) Cnv_Fact = 0.018288;
elsif (Output_Unit == 3) Cnv_Fact = 0.0098747;
elsif (Output_Unit == 4) Cnv_Fact = 0.0050800;
elsif (Output_Unit == 5) {
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
Cnv_Fact = 0.011364;
}
}
# ---------------> Input Unit 2 () KM/H ---> Output Unit: FT/M, KM/H, KT, MTS, MPH
elsif (Input_Unit == 2) {
if (Output_Unit == 1) Cnv_Fact = 54.68066;
elsif (Output_Unit == 2) Cnv_Fact = 1;
elsif (Output_Unit == 3) Cnv_Fact = 0.5399568;
elsif (Output_Unit == 4) Cnv_Fact = 0.2777778;
elsif (Output_Unit == 5) Cnv_Fact = 0.6213712;
}
# ---------------> Input Unit 3 () KT ---> Output Unit: FT/M, KM/H, KT, MTS, MPH
elsif (Input_Unit == 3) {
if (Output_Unit == 1) Cnv_Fact = 101.2686;
elsif (Output_Unit == 2) Cnv_Fact = 1.852000;
elsif (Output_Unit == 3) Cnv_Fact = 1;
elsif (Output_Unit == 4) Cnv_Fact = 0.5144444;
elsif (Output_Unit == 5) Cnv_Fact = 1.150779;
}
# ---------------> Input Unit 4 () MTS ---> Output Unit: FT/M, KM/H, KT, MTS, MPH
elsif (Input_Unit == 4) {
if (Output_Unit == 1) Cnv_Fact = 196.85;
elsif (Output_Unit == 2) Cnv_Fact = 3.6000;
elsif (Output_Unit == 3) Cnv_Fact = 1.9438;
elsif (Output_Unit == 4) Cnv_Fact = 1;
elsif (Output_Unit == 5) Cnv_Fact = 2.2369;
}
# ---------------> Input Unit 5 () MPH ---> Output Unit: FT/M, KM/H, KT, MTS, MPH
elsif (Input_Unit == 5) {
if (Output_Unit == 1) Cnv_Fact = 88.0002;
elsif (Output_Unit == 2) Cnv_Fact = 1.609344;
elsif (Output_Unit == 3) Cnv_Fact = 0.8689762;
elsif (Output_Unit == 4) Cnv_Fact = 0.4470400;
elsif (Output_Unit == 5) Cnv_Fact = 1;
}
VK_Input_Mem = Input_Unit;
VK_Output_Mem = Output_Unit;
# Output Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_Line") == "") or (getProp("/instrumentation/efb/Keyboard/Input_Line") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_Line") == "-")) {
setProp("/instrumentation/efb/Keyboard/Output_Line", "");
} else {
Output_Line = getProp("/instrumentation/efb/Keyboard/Input_Line");
Output_Line = Output_Line * Cnv_Fact; # Build the Input String
setProp("/instrumentation/efb/Keyboard/Output_Line", Output_Line); # Print it to the Keyboard Output Field
}
setProp("/instrumentation/efb/VK_keypress", "");
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Input_Line", "");
setProp("/instrumentation/efb/Keyboard/Output_Line", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - LENGHT CONVERSION Parser ----------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_LNG") {
Input_Unit = getProp("/instrumentation/efb/VK_IN_Marker");
Output_Unit = getProp("/instrumentation/efb/VK_OUT_Marker");
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "" or (Input_Unit != VK_Input_Mem) or (Output_Unit != VK_Output_Mem)) {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
setProp("/instrumentation/efb/Keyboard/Input_Line", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print it to the Keyboard Input Field
# ---------------> Conversion Table Selection
# ---------------> Input Unit 1 () FEET ---> Output Unit: FEET, KILOMETERS, METERS, NAUTICAL MILES, STATUTE MILES
if (Input_Unit == 1) {
if (Output_Unit == 1) Cnv_Fact = 1;
elsif (Output_Unit == 2) Cnv_Fact = 0.0003048;
elsif (Output_Unit == 3) Cnv_Fact = 0.30480;
elsif (Output_Unit == 4) Cnv_Fact = 0.000164579; # International and US Nautical Miles, NOT UK Nautical Miles !!
elsif (Output_Unit == 5) Cnv_Fact = 0.000189394; # International Statute Miles
}
# ---------------> Input Unit 2 () KILOMETERS ---> Output Unit: FEET, KILOMETERS, METERS, NAUTICAL MILES, STATUTE MILES
elsif (Input_Unit == 2) {
if (Output_Unit == 1) Cnv_Fact = 3280.83989501;
elsif (Output_Unit == 2) Cnv_Fact = 1;
elsif (Output_Unit == 3) Cnv_Fact = 1000;
elsif (Output_Unit == 4) Cnv_Fact = 0.539956803456; # International and US Nautical Miles, NOT UK Nautical Miles !!
elsif (Output_Unit == 5) Cnv_Fact = 0.621371192237; # International Statute Miles
}
# ---------------> Input Unit 3 () METERS ---> Output Unit: FEET, KILOMETERS, METERS, NAUTICAL MILES, STATUTE MILES
elsif (Input_Unit == 3) {
if (Output_Unit == 1) Cnv_Fact = 3.28083989501;
elsif (Output_Unit == 2) Cnv_Fact = 0.001;
elsif (Output_Unit == 3) Cnv_Fact = 1;
elsif (Output_Unit == 4) Cnv_Fact = 0.000539956803456; # International and US Nautical Miles, NOT UK Nautical Miles !!
elsif (Output_Unit == 5) Cnv_Fact = 0.000621371192237; # International Statute Miles
}
# ---------------> Input Unit 4 () NAUTICAL MILES (INTERNATIONAL!) ---> Output Unit: FEET, KILOMETERS, METERS, NAUTICAL MILES, STATUTE MILES
elsif (Input_Unit == 4) {
if (Output_Unit == 1) Cnv_Fact = 6076.11548556;
elsif (Output_Unit == 2) Cnv_Fact = 1.852;
elsif (Output_Unit == 3) Cnv_Fact = 1852;
elsif (Output_Unit == 4) Cnv_Fact = 1;
elsif (Output_Unit == 5) Cnv_Fact = 1.15077944802; # International Statute Miles
}
# ---------------> Input Unit 5 () STATUTE MILES ---> Output Unit: FEET, KILOMETERS, METERS, NAUTICAL MILES, STATUTE MILES
elsif (Input_Unit == 5) {
if (Output_Unit == 1) Cnv_Fact = 5280;
elsif (Output_Unit == 2) Cnv_Fact = 1.609344;
elsif (Output_Unit == 3) Cnv_Fact = 1609.344;
elsif (Output_Unit == 4) Cnv_Fact = 0.868976241901; # International and US Nautical Miles, NOT UK Nautical Miles !!
elsif (Output_Unit == 5) Cnv_Fact = 1;
}
VK_Input_Mem = Input_Unit;
VK_Output_Mem = Output_Unit;
# Output Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_Line") == "") or (getProp("/instrumentation/efb/Keyboard/Input_Line") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_Line") == "-")) {
setProp("/instrumentation/efb/Keyboard/Output_Line", "");
} else {
Output_Line = getProp("/instrumentation/efb/Keyboard/Input_Line");
Output_Line = Output_Line * Cnv_Fact; # Build the Input String
setProp("/instrumentation/efb/Keyboard/Output_Line", Output_Line); # Print it to the Keyboard Output Field
}
setProp("/instrumentation/efb/VK_keypress", "");
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Input_Line", "");
setProp("/instrumentation/efb/Keyboard/Output_Line", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - WEIGHT CONVERSION Parser ----------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_WGT") {
Input_Unit = getProp("/instrumentation/efb/VK_IN_Marker");
Output_Unit = getProp("/instrumentation/efb/VK_OUT_Marker");
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "" or (Input_Unit != VK_Input_Mem) or (Output_Unit != VK_Output_Mem)) {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
setProp("/instrumentation/efb/Keyboard/Input_Line2", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print it to the Keyboard Input Field
# ---------------> Conversion Table Selection
# ---------------> Input Unit 1 () KILOGRAMS ---> Output Unit: KILOGRAMS, POUNDS
if (Input_Unit == 1) {
if (Output_Unit == 1) Cnv_Fact = 1;
elsif (Output_Unit == 2) Cnv_Fact = 2.20462262185;
}
# ---------------> Input Unit 2 () POUNDS ---> Output Unit: KILOGRAMS, POUNDS
elsif (Input_Unit == 2) {
if (Output_Unit == 1) Cnv_Fact = 0.45359237;
elsif (Output_Unit == 2) Cnv_Fact = 1;
}
VK_Input_Mem = Input_Unit;
VK_Output_Mem = Output_Unit;
# Output Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_Line2") == "") or (getProp("/instrumentation/efb/Keyboard/Input_Line2") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_Line2") == "-")) {
setProp("/instrumentation/efb/Keyboard/Output_Line2", "");
} else {
Output_Line2 = getProp("/instrumentation/efb/Keyboard/Input_Line2");
Output_Line2 = Output_Line2 * Cnv_Fact; # Build the Input String
setProp("/instrumentation/efb/Keyboard/Output_Line2", Output_Line2); # Print it to the Keyboard Output Field
}
setProp("/instrumentation/efb/VK_keypress", "");
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Input_Line2", "");
setProp("/instrumentation/efb/Keyboard/Output_Line2", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - TEMPERATURE CONVERSION Parser -----------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_TMP") {
Input_Unit = getProp("/instrumentation/efb/VK_IN_Marker");
Output_Unit = getProp("/instrumentation/efb/VK_OUT_Marker");
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "" or (Input_Unit != VK_Input_Mem) or (Output_Unit != VK_Output_Mem)) {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
setProp("/instrumentation/efb/Keyboard/Input_Line2", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print it to the Keyboard Input Field
# Output Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_Line2") == "") or (getProp("/instrumentation/efb/Keyboard/Input_Line2") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_Line2") == "-")) {
setProp("/instrumentation/efb/Keyboard/Output_Line2", "");
} else {
Output_Line2 = getProp("/instrumentation/efb/Keyboard/Input_Line2");
# ---------------> Conversion Table Selection
# ---------------> Input Unit 1 () CELSIUS (<28>C) ---> Output Unit: CELSIUS (<28>C), FAHRENHEIT (<28>F)
if (Input_Unit == 1) {
if (Output_Unit == 1) Cnv_Fact = Output_Line2;
elsif (Output_Unit == 2) Cnv_Fact = (Output_Line2*1.8) + 32;
}
# ---------------> Input Unit 2 () FAHRENHEIT (<28>F) ---> Output Unit: CELSIUS (<28>C), FAHRENHEIT (<28>F)
elsif (Input_Unit == 2) {
if (Output_Unit == 1) Cnv_Fact = (Output_Line2 - 32)/1.8;
elsif (Output_Unit == 2) Cnv_Fact = Output_Line2;
}
VK_Input_Mem = Input_Unit;
VK_Output_Mem = Output_Unit;
Output_Line2 = Cnv_Fact; # Build the Input String
setProp("/instrumentation/efb/Keyboard/Output_Line2", Output_Line2); # Print it to the Keyboard Output Field
}
setProp("/instrumentation/efb/VK_keypress", "");
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Input_Line2", "");
setProp("/instrumentation/efb/Keyboard/Output_Line2", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - VOLUME CONVERSION Parser ----------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_VLM") {
Input_Unit = getProp("/instrumentation/efb/VK_IN_Marker");
Output_Unit = getProp("/instrumentation/efb/VK_OUT_Marker");
Output_TMZ_Line = "";
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "" or (Input_Unit != VK_Input_Mem) or (Output_Unit != VK_Output_Mem)) {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # CHANGEs SIGN to the Input Field
if (substr(Temp_String, 0, 1) == "-") {
lenght = size(Temp_String) - 1;
Temp_String = substr(Temp_String, 1, lenght);
} else {
Temp_String = "-" ~ Temp_String;
}
setProp("/instrumentation/efb/Keyboard/Input_String", Temp_String);
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
setProp("/instrumentation/efb/Keyboard/Input_Line3", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print it to the Keyboard Input Field
# ---------------> Conversion Table Selection
# ---------------> Input Unit 1 () IMPERIAL GALLONS ---> Output Unit: IMPERIAL GALLONS, US GALLONS, LITERS
if (Input_Unit == 1) {
if (Output_Unit == 1) Cnv_Fact = 1;
elsif (Output_Unit == 2) Cnv_Fact = 1.20095;
elsif (Output_Unit == 3) Cnv_Fact = 4.54609;
}
# ---------------> Input Unit 2 () US GALLONS ---> Output Unit: IMPERIAL GALLONS, US GALLONS, LITERS
elsif (Input_Unit == 2) {
if (Output_Unit == 1) Cnv_Fact = 0.832674;
elsif (Output_Unit == 2) Cnv_Fact = 1;
elsif (Output_Unit == 3) Cnv_Fact = 3.78541;
}
# ---------------> Input Unit 3 () LITERS ---> Output Unit: IMPERIAL GALLONS, US GALLONS, LITERS
elsif (Input_Unit == 3) {
if (Output_Unit == 1) Cnv_Fact = 0.219969;
elsif (Output_Unit == 2) Cnv_Fact = 0.264172;
elsif (Output_Unit == 3) Cnv_Fact = 1;
}
VK_Input_Mem = Input_Unit;
VK_Output_Mem = Output_Unit;
# Output Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_Line3") == "") or (getProp("/instrumentation/efb/Keyboard/Input_Line3") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_Line3") == "-")) {
setProp("/instrumentation/efb/Keyboard/Output_Line3", "");
} else {
Output_Line2 = getProp("/instrumentation/efb/Keyboard/Input_Line3");
Output_Line2 = Output_Line2 * Cnv_Fact; # Build the Input String
setProp("/instrumentation/efb/Keyboard/Output_Line3", Output_Line2); # Print it to the Keyboard Output Field
}
setProp("/instrumentation/efb/VK_keypress", "");
}
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Input_Line3", "");
setProp("/instrumentation/efb/Keyboard/Output_Line3", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - TIME ZONE CONVERSION Parser -------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_CNV_TMZ") {
TMZ_TIME = getProp("/instrumentation/clock/indicated-short-string") ~ "z";
setProp("/instrumentation/efb/Keyboard/Current_DT_Line", TMZ_DATE ~ " " ~ TMZ_TIME); # Print Current Date & Time
setProp("/instrumentation/efb/Keyboard/Converted_Name_Line", "Use Keyboard to Input Time (HHMM)");
# Input keys Check
if (getProp("/instrumentation/efb/VK_keypress") != "") {
# Input Field Parser
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field and other stuff
setProp("/instrumentation/efb/Keyboard/Input_HH_Line", "--");
setProp("/instrumentation/efb/Keyboard/Input_MM_Line", "--");
setProp("/instrumentation/efb/Keyboard/Input_Zulu_Line", "--:--");
setProp("/instrumentation/efb/Keyboard/Output_HH", "");
setProp("/instrumentation/efb/Keyboard/Output_MM", "");
setProp("/instrumentation/efb/Keyboard/Converted_ID_Line", "");
setProp("/instrumentation/efb/Keyboard/Converted_Name_Line", "Use Keyboard to Input Time (HHMM)");
setProp("/instrumentation/efb/Keyboard/Output_TMZ_Line", "--:--");
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "");
TMZ_index = 0;
Output_TMz_Line = "--:--";
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "CHNGS") {
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String")); # Bypasses CHANGEs SIGN
setProp("/instrumentation/efb/VK_keypress", "");
}
# Input Field Display
TMZ_String = getProp("/instrumentation/efb/Keyboard/Input_String");
TMZ_Input_Lenght = size(TMZ_String);
if (TMZ_Input_Lenght <= 3) {
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String
if (TMZ_Input_Lenght > 1) {
setProp("/instrumentation/efb/Keyboard/Input_HH_Line", substr(getProp("/instrumentation/efb/Keyboard/Input_String"), 0, 2)); # IF 3rd digit, Print HH to the Keyboard Input Field
setProp("/instrumentation/efb/Keyboard/Output_HH", substr(getProp("/instrumentation/efb/Keyboard/Input_String"), 0, 2)); # Copy HH to Output_HH
setProp("/instrumentation/efb/Keyboard/Input_MM_Line", substr(getProp("/instrumentation/efb/Keyboard/Input_String"), 2, TMZ_Input_Lenght)); # IF 3rd digit, Print MM to the Keyboard Input Field
setProp("/instrumentation/efb/Keyboard/Output_MM", substr(getProp("/instrumentation/efb/Keyboard/Input_String"), 2, TMZ_Input_Lenght)); # Copy MM to Output_MM
setProp("/instrumentation/efb/Keyboard/Input_Zulu_Line", (getProp("/instrumentation/efb/Keyboard/Input_HH_Line") ~ ":" ~ getProp("/instrumentation/efb/Keyboard/Input_MM_Line"))); # IF 3rd digit, Print "zulu Time" to the Keyboard Output "zulu to be converted" Field (see EFB Manual)
} else {
setProp("/instrumentation/efb/Keyboard/Input_HH_Line", getProp("/instrumentation/efb/Keyboard/Input_String")); # Print Blank HH to the Keyboard Input Field
setProp("/instrumentation/efb/Keyboard/Input_MM_Line", "--"); # Print Blank HH to the Keyboard Input Field
setProp("/instrumentation/efb/Keyboard/Input_Zulu_Line", getProp("/instrumentation/efb/Keyboard/Input_HH_Line") ~ ":" ~ getProp("/instrumentation/efb/Keyboard/Input_MM_Line")); # Print Blank "zulu Time" to the Keyboard Output "zulu to be converted" Field (see EFB Manual) # Print "" MM to the Keyboard Input Field
setProp("/instrumentation/efb/Keyboard/Output_HH", "");
setProp("/instrumentation/efb/Keyboard/Output_MM", "");
}
} # an 'else' clause should be set here, giving the Pilot an audible 'WARNING Beep', because we cannot accept more than 4 chars for Time Input!
}
setProp("/instrumentation/efb/VK_keypress", ""); # reset the VK keys to ""
# ---------------> Output Unit: Input Time Conversion --> TIME ZONES Time
if (TMZ_Input_Lenght > 1) {
# TMZ_Index = TMZ_Index;
if ((keypress == "r3") and (TMZ_Index > 0)) {
TMZ_Index = TMZ_Index - 1;
keypress = "";
} # an 'else' clause should be set here, giving the Pilot an audible 'WARNING Beep', because he reached Bottom End of DB File!
if ((keypress == "r4") and (TMZ_Index < TMZ_DB_Size)) {
TMZ_Index = TMZ_Index + 1;
keypress = "";
} # an 'else' clause should be set here, giving the Pilot an audible 'WARNING Beep', because he reached Top End of DB File!
#setProp("/instrumentation/efb/Keyboard/Output_HH", "12");
#setProp("/instrumentation/efb/Keyboard/Output_MM", "54");
if (keypress == "r5") { setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "0"); # RESET ALL
setProp("/instrumentation/efb/Keyboard/Input_String", "");
TMZ_String = "";
TMZ_Index = 0;
TMZ_Input_Lenght = 0;
setProp("/instrumentation/efb/Keyboard/Current_DT_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_HH_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_MM_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_Zulu_Line", "");
setProp("/instrumentation/efb/Keyboard/Output_HH", "0");
setProp("/instrumentation/efb/Keyboard/Output_MM", "0");
setProp("/instrumentation/efb/Keyboard/Converted_ID_Line", "");
setProp("/instrumentation/efb/Keyboard/Converted_Name_Line", "Use Keyboard to Input Time (HHMM)");
setProp("/instrumentation/efb/Keyboard/Output_TMZ_Line", "");
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "0");
TMZ_index = 0;
Output_TMz_Line = "--:--";
}
if (getProp("/instrumentation/efb/Keyboard/Output_HH") != "0") {
TMZ_Converted_ID = getProp("/instrumentation/efb/TimeZonesDB/IDX[" ~ TMZ_Index ~ "]/ID");
TMZ_Converted_Name = getProp("/instrumentation/efb/TimeZonesDB/IDX[" ~ TMZ_Index ~ "]/Name");
TMZ_zulu_HH = getProp("/instrumentation/efb/Keyboard/Output_HH");
TMZ_Converted_OffSet = getProp("/instrumentation/efb/TimeZonesDB/IDX[" ~ TMZ_Index ~ "]/OffSet");
setProp("/instrumentation/efb/Keyboard/Converted_ID_Line", TMZ_Converted_ID); # Print Time Zone ID to the Keyboard Converted Time Field
setProp("/instrumentation/efb/Keyboard/Converted_Name_Line", TMZ_Converted_Name); # Print Time Zone Name to the Keyboard Converted Time Field
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", (TMZ_zulu_HH + TMZ_Converted_OffSet));
} else {
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", 0);
}
# HH Corrections for Time Zone's Conversion Factors
if (getProp("/instrumentation/efb/Keyboard/Cnv_Fact") > 9) {
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", getProp("/instrumentation/efb/Keyboard/Cnv_Fact")); # Print HH Converted Time to the Keyboard Converted Time Field
} elsif (((getProp("/instrumentation/efb/Keyboard/Cnv_Fact") >= 0) and (getProp("/instrumentation/efb/Keyboard/Cnv_Fact") <= 9))) {
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "0" ~ getProp("/instrumentation/efb/Keyboard/Cnv_Fact")); # Print H Converted Time to the Keyboard Converted Time Field
} elsif (getProp("/instrumentation/efb/Keyboard/Cnv_Fact") < 0) {
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", (24 + getProp("/instrumentation/efb/Keyboard/Cnv_Fact"))); # Print (24 - HH) Converted Time to the Keyboard Converted Time Field
}
} else {
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "--");
}
# Output Converted Time Field Display
if ((getProp("/instrumentation/efb/Keyboard/Input_HH_Line") == "") or (getProp("/instrumentation/efb/Keyboard/Input_HH_Line") == ".") or (getProp("/instrumentation/efb/Keyboard/Input_HH_Line") == "--")) {
setProp("/instrumentation/efb/Keyboard/Output_TMZ_Line", "");
Output_TMz_Line = "--:--";
} else {
Output_TMZ_Line = getProp("/instrumentation/efb/Keyboard/Cnv_Fact");
Output_TMZ_Line = substr(Output_TMZ_Line, 0, 2) ~ ":" ~ getProp("/instrumentation/efb/Keyboard/Output_MM");# Build the Output String
}
setProp("/instrumentation/efb/Keyboard/Output_TMZ_Line", Output_TMZ_Line); # Print it to the Keyboard Output Converted Time Field
if (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/page", "UTILITIES");
setProp("/instrumentation/efb/Keyboard/Current_DT_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_HH_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_MM_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_Zulu_Line", "");
setProp("/instrumentation/efb/Keyboard/Cnv_Fact", "");
setProp("/instrumentation/efb/Keyboard/Output_HH", "");
setProp("/instrumentation/efb/Keyboard/Output_MM", "");
setProp("/instrumentation/efb/Keyboard/Converted_ID_Line", "");
setProp("/instrumentation/efb/Keyboard/Converted_Name_Line", "");
setProp("/instrumentation/efb/Keyboard/Output_TMZ_Line", "");
setProp("/instrumentation/efb/Keyboard/Input_String", "");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - DESCENT RATE Calculator ----------------------------------------------|
#_________________________________________________________________________________________|
} elsif (currentPage == "UTILITIES_DESC_RATE") {
page.clearpage();
# Input keys Check
if (keypress == "l2") {
setProp("/instrumentation/efb/Input_Unit", "Initial_FL");
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/DRC_Initial_FL_MEM", getProp("/instrumentation/efb/DRC_Initial_FL"));
setProp("/instrumentation/efb/VK_DRC_MarkerL", 1);
setProp("/instrumentation/efb/VK_DRC_MarkerR", 0);
}
elsif (keypress == "r2") {
setProp("/instrumentation/efb/Input_Unit", "Target_FL");
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/DRC_Target_FL_MEM", getProp("/instrumentation/efb/DRC_Target_FL"));
setProp("/instrumentation/efb/VK_DRC_MarkerR", 1);
setProp("/instrumentation/efb/VK_DRC_MarkerL", 0);
}
elsif (keypress == "l3") {
setProp("/instrumentation/efb/Input_Unit", "Initial_GS");
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/DRC_Initial_GS_MEM", getProp("/instrumentation/efb/DRC_Initial_GS"));
setProp("/instrumentation/efb/VK_DRC_MarkerL", 2);
setProp("/instrumentation/efb/VK_DRC_MarkerR", 0);
}
elsif (keypress == "r3") {
setProp("/instrumentation/efb/Input_Unit", "Target_GS");
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/DRC_Target_GS_MEM", getProp("/instrumentation/efb/DRC_Target_GS"));
setProp("/instrumentation/efb/VK_DRC_MarkerR", 2);
setProp("/instrumentation/efb/VK_DRC_MarkerL", 0);
}
elsif (keypress == "l4") {
setProp("/instrumentation/efb/Input_Unit", "Distance");
setProp("/instrumentation/efb/Keyboard/Input_String","");
setProp("/instrumentation/efb/DRC_Distance_MEM", getProp("/instrumentation/efb/DRC_Distance"));
setProp("/instrumentation/efb/VK_DRC_MarkerL", 3);
setProp("/instrumentation/efb/VK_DRC_MarkerR", 0);
}
# Input keys Parser
if ((getProp("/instrumentation/efb/VK_keypress") != "") and (getProp("/instrumentation/efb/VK_keypress") != ".") and (getProp("/instrumentation/efb/VK_keypress") != "CHNGS") and (getProp("/instrumentation/efb/Input_Unit") != "NO_INPUT")) {
if (getProp("/instrumentation/efb/VK_keypress") == "CLEAR") {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
VK_Key = "VOID";
setProp("/instrumentation/efb/VK_keypress", "");
}
elsif (getProp("/instrumentation/efb/VK_keypress") == "BKSP") {
Temp_String = getProp("/instrumentation/efb/Keyboard/Input_String"); # BACKSPACEs the Input Field
lenght = size(Temp_String) - 1;
if (lenght >= 1) {
setProp("/instrumentation/efb/Keyboard/Input_String", substr(Temp_String, 0, lenght));
setProp("/instrumentation/efb/VK_keypress", "");
} elsif (lenght <= 0) {
setProp("/instrumentation/efb/Keyboard/Input_String", ""); # CLEARs the whole Input Field
VK_Key = "VOID";
}
}
DRC_String = getProp("/instrumentation/efb/Keyboard/Input_String");
DRC_Input_Lenght = size(DRC_String);
if (DRC_Input_Lenght < 3) {
if (VK_Key != "VOID") {
setProp("/instrumentation/efb/Keyboard/Input_String", getProp("/instrumentation/efb/Keyboard/Input_String") ~ getProp("/instrumentation/efb/VK_keypress")); # Build the Input String...
}
if ((getProp("/instrumentation/efb/Input_Unit") == "Initial_FL") and (VK_Key != "VOID")) {
setProp("/instrumentation/efb/DRC_Initial_FL", getProp("/instrumentation/efb/Keyboard/Input_String")); # ...For Initial FL
} elsif ((getProp("/instrumentation/efb/Input_Unit") == "Initial_FL") and (VK_Key == "VOID")) {
setProp("/instrumentation/efb/display/DRC_l3", "CLEAR");
setProp("/instrumentation/efb/DRC_Initial_FL", getProp("/instrumentation/efb/DRC_Initial_FL_MEM"));
}
if ((getProp("/instrumentation/efb/Input_Unit") == "Target_FL") and (VK_Key != "VOID")) {
setProp("/instrumentation/efb/DRC_Target_FL", getProp("/instrumentation/efb/Keyboard/Input_String")); # ...For Target FL
} elsif ((getProp("/instrumentation/efb/Input_Unit") == "Target_FL") and (VK_Key == "VOID")) {
setProp("/instrumentation/efb/display/DRC_r3", "CLEAR");
setProp("/instrumentation/efb/DRC_Target_FL", getProp("/instrumentation/efb/DRC_Target_FL_MEM"));
}
if ((getProp("/instrumentation/efb/Input_Unit") == "Initial_GS") and (VK_Key != "VOID")) {
setProp("/instrumentation/efb/DRC_Initial_GS", getProp("/instrumentation/efb/Keyboard/Input_String")); # ...For Initial GS
} elsif ((getProp("/instrumentation/efb/Input_Unit") == "Initial_GS") and (VK_Key == "VOID")) {
setProp("/instrumentation/efb/display/DRC_l5", "CLEAR");
setProp("/instrumentation/efb/DRC_Initial_GS", getProp("/instrumentation/efb/DRC_Initial_GS_MEM"));
}
if ((getProp("/instrumentation/efb/Input_Unit") == "Target_GS") and (VK_Key != "VOID")) {
setProp("/instrumentation/efb/DRC_Target_GS", getProp("/instrumentation/efb/Keyboard/Input_String")); # ...For Target GS
} elsif ((getProp("/instrumentation/efb/Input_Unit") == "Target_GS") and (VK_Key == "VOID")) {
setProp("/instrumentation/efb/display/DRC_r5", "CLEAR");
setProp("/instrumentation/efb/DRC_Target_GS", getProp("/instrumentation/efb/DRC_Target_GS_MEM"));
}
if ((getProp("/instrumentation/efb/Input_Unit") == "Distance") and (VK_Key != "VOID")) {
setProp("/instrumentation/efb/DRC_Distance", getProp("/instrumentation/efb/Keyboard/Input_String")); # ...For Distance
} elsif ((getProp("/instrumentation/efb/Input_Unit") == "Distance") and (VK_Key == "VOID")) {
setProp("/instrumentation/efb/display/DRC_l7", "CLEAR");
setProp("/instrumentation/efb/DRC_Distance", getProp("/instrumentation/efb/DRC_Distance_MEM"));
}
}
}
setProp("/instrumentation/efb/VK_keypress", ""); # reset the VK keys to ""
VK_Key = "";
# Transfers Values to DRC variables as numbers
Initial_FL = num(getProp("/instrumentation/efb/DRC_Initial_FL"));
Target_FL = num(getProp("/instrumentation/efb/DRC_Target_FL"));
Initial_GS = num(getProp("/instrumentation/efb/DRC_Initial_GS"));
Target_GS = num(getProp("/instrumentation/efb/DRC_Target_GS"));
DRC_Distance = num(getProp("/instrumentation/efb/DRC_Distance"));
# Calculates Formulas
# Formula: [Angle of Descent (ft/NM) = ALT Gradient/Distance] |||| [SPD Factor (ft/min) = SPD Gradient/60] |||| [Target Descent Rate (Fpm) = Angle of Descent * SPD Factor]
var DRC_Angle = (Target_FL - Initial_FL)/DRC_Distance;
var DRC_AvgSpeed = (Initial_GS + Target_GS)/2;
var DRC_Fact = DRC_AvgSpeed/60;
var DRC_Output = DRC_Angle * DRC_Fact*100;
var DRC_Time = (Target_FL - Initial_FL)/(DRC_Output/100);
# Prepares Output Strings
DRC_l3 = substr(getProp("/instrumentation/efb/DRC_Initial_FL"), 0, 3);
CUT = split(".", DRC_l3);
DRC_l3 = CUT[0];
DRC_r3 = substr(getProp("/instrumentation/efb/DRC_Target_FL"), 0, 3);
CUT = split(".", DRC_r3);
DRC_r3 = CUT[0];
DRC_l5 = substr(getProp("/instrumentation/efb/DRC_Initial_GS"), 0, 3);
CUT = split(".", DRC_l5);
DRC_l5 = CUT[0];
DRC_r5 = substr(getProp("/instrumentation/efb/DRC_Target_GS"), 0, 3);
CUT = split(".", DRC_r5);
DRC_r5 = CUT[0];
DRC_l7 = substr(getProp("/instrumentation/efb/DRC_Distance"), 0, 3);
CUT = split(".", DRC_l7);
DRC_l7 = CUT[0];
setProp("/instrumentation/efb/DRC_Output", "100");
setProp("/instrumentation/efb/DRC_Output", DRC_Output);
DRC_r8 = substr(getProp("/instrumentation/efb/DRC_Output"), 0, 8);
CUT = split(".", DRC_r8);
DRC_r8 = CUT[0];
setProp("/instrumentation/efb/DRC_Angle", "100");
setProp("/instrumentation/efb/DRC_Angle", DRC_Angle);
DRC_r9 = substr(getProp("/instrumentation/efb/DRC_Angle"), 0, 5);
# CUT = split(".", DRC_r9);
# DRC_r9 = CUT[0];
setProp("/instrumentation/efb/DRC_Time", "100");
setProp("/instrumentation/efb/DRC_Time", DRC_Time);
DRC_r10 = substr(getProp("/instrumentation/efb/DRC_Time"), 0, 5);
#CUT = split(".", DRC_r10);
#DRC_r10 = CUT[0];
page.DRCupdate(); # Displays Output
if (keypress == "MENU") {
page.DRCclearpage();
page.DRCupdate();
setProp("/sim/model/efb/page", "Displays/PU_1.jpg");
setProp("/instrumentation/efb/VK_DRC_MarkerR", 0);
setProp("/instrumentation/efb/VK_DRC_MarkerL", 0);
setProp("/instrumentation/efb/page", "UTILITIES");
keypress = "";
}
#__________________________________________________________________________________________
# PILOT UTILITIES - NORMAL PROCEDURES MANUAL ----------------------------------------------|
#__________________________________________________________________________________________|
} elsif (currentPage == "NORM PROC MANUAL") {
page.clearpage();
if (keypress == "PGUP") {
setProp("/instrumentation/efb/manual-page", getProp("/instrumentation/efb/manual-page") - 0.20);
keypress = "";
}
elsif (keypress == "ScrollUP") {
setProp("/instrumentation/efb/manual-page", getProp("/instrumentation/efb/manual-page") - 0.02);
keypress = "";
}
elsif (keypress == "ScrollDN") {
setProp("/instrumentation/efb/manual-page", getProp("/instrumentation/efb/manual-page") + 0.02);
keypress = "";
}
elsif (keypress == "PGDN") {
setProp("/instrumentation/efb/manual-page", getProp("/instrumentation/efb/manual-page") + 0.20);
keypress = "";
}
elsif (keypress == "MENU") {
setProp("/sim/model/efb/page", "Displays/Documents_1.jpg");
setProp("/instrumentation/efb/page", "DOCUMENTS");
keypress = "";
}
}
#___________________________________________________________________________________________
#_______________________________END of Parsers & SubParsers_________________________________|
page.update();
if ((getProp("/instrumentation/efb/page") == "Airport Charts") or (getProp("/instrumentation/efb/page") == "Airport Diagram") or (getProp("/instrumentation/efb/page") == "NORM PROC MANUAL")) setProp("/instrumentation/efb/text-color", 0);
else setProp("/instrumentation/efb/text-color", 1);
},
reset : func {
if(!me.efbTimer)
me.efbTimer = maketimer(me.UPDATE_INTERVAL, func me.update());
else
me.efbTimer.stop();
me.loopid += 1;
#//me._loop_(me.loopid);
me.efbTimer.start();
},
#//_loop_ : func() {
#// id == me.loopid or return;
#// me.update();
#//}
};
var toggle = func(property) {
if (getProp(property) == 1)
setProp(property, 0);
else
setProp(property, 1);
}
setlistener("sim/signals/fdm-initialized", func {efb.init();});