From 172db2b9286a0b338f98357f862ecaee975cc8a8 Mon Sep 17 00:00:00 2001 From: Bailey Date: Thu, 28 Oct 2021 20:15:37 +0900 Subject: [PATCH] F-16 CMDS and Fuel update - Fixed CMDS readouts - Added fuel total and fuel flow readouts - Added media pic - Removed F18 code --- .../ExportsModules/F-16C_50.lua | 359 +++++++----------- docu/Pics/F-16C/f16CMSandFuel.jpg | Bin 0 -> 36978 bytes 2 files changed, 137 insertions(+), 222 deletions(-) create mode 100644 docu/Pics/F-16C/f16CMSandFuel.jpg diff --git a/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua b/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua index d463b59..e489a06 100644 --- a/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua +++ b/Scripts/DCS-ExportScript/ExportsModules/F-16C_50.lua @@ -619,69 +619,7 @@ function ExportScript.ProcessIkarusDCSConfigHighImportance(mainPanelDevice) ------------------ ExportScript.mike(mainPanelDevice) - --------------------------------- - -----Chaff and Flare Counts------ - --------------------------------- - local expendableReadout = ExportScript.Tools.split(list_indication(16), "%c")--this contains the formated table of the CMDS numbers - - local CMDS_O1_Amount - local CMDS_O2_Amount - local CMDS_CH_Amount - local CMDS_FL_Amount - - if expendableReadout[2] == "CMDS_O1_Amount" then - CMDS_O1_Amount = expendableReadout[3] - elseif expendableReadout[5] == "CMDS_O1_Amount" then - CMDS_O1_Amount = expendableReadout[6] - elseif expendableReadout[8] == "CMDS_O1_Amount" then - CMDS_O1_Amount = expendableReadout[9] - elseif expendableReadout[11] == "CMDS_O1_Amount" then - CMDS_O1_Amount = expendableReadout[12] - else - CMDS_O1_Amount = " " - end - - if expendableReadout[2] == "CMDS_O2_Amount" then - CMDS_O2_Amount = expendableReadout[3] - elseif expendableReadout[5] == "CMDS_O2_Amount" then - CMDS_O2_Amount = expendableReadout[6] - elseif expendableReadout[8] == "CMDS_O2_Amount" then - CMDS_O2_Amount = expendableReadout[9] - elseif expendableReadout[11] == "CMDS_O2_Amount" then - CMDS_O2_Amount = expendableReadout[12] - else - CMDS_O2_Amount = " " - end - - if expendableReadout[2] == "CMDS_CH_Amount" then - CMDS_CH_Amount = expendableReadout[3] - elseif expendableReadout[5] == "CMDS_CH_Amount" then - CMDS_CH_Amount = expendableReadout[6] - elseif expendableReadout[8] == "CMDS_CH_Amount" then - CMDS_CH_Amount = expendableReadout[9] - elseif expendableReadout[11] == "CMDS_CH_Amount" then - CMDS_CH_Amount = expendableReadout[12] - else - CMDS_CH_Amount = " " - end - - if expendableReadout[2] == "CMDS_FL_Amount" then - CMDS_FL_Amount = expendableReadout[3] - elseif expendableReadout[5] == "CMDS_FL_Amount" then - CMDS_FL_Amount = expendableReadout[6] - elseif expendableReadout[8] == "CMDS_FL_Amount" then - CMDS_FL_Amount = expendableReadout[9] - elseif expendableReadout[11] == "CMDS_FL_Amount" then - CMDS_FL_Amount = expendableReadout[12] - else - CMDS_FL_Amount = " " - end - - ExportScript.Tools.SendData(3000, CMDS_O1_Amount) - ExportScript.Tools.SendData(3001, CMDS_O2_Amount) - ExportScript.Tools.SendData(3002, CMDS_CH_Amount) - ExportScript.Tools.SendData(3003, CMDS_FL_Amount) end function ExportScript.ProcessDACConfigHighImportance(mainPanelDevice) @@ -716,117 +654,8 @@ function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice) ExportScript.Tools.SendData(2000, string.format("%7.3f", lUHFRadio:get_frequency()/1000000)) <- special function for get frequency data ]] - --ExportScript.Tools.WriteToLog('list_cockpit_params(): '..ExportScript.Tools.dump(list_cockpit_params())) - - -- IFEI - Engine, Fuel and Clock informations - local lEngineFuelClock = ExportScript.Tools.getListIndicatorValue(5) - if ExportScript.Config.Debug then - ExportScript.Tools.WriteToLog('EngineFuelClock: '..ExportScript.Tools.dump(lEngineFuelClock)) - end - - if lEngineFuelClock ~= nil and lEngineFuelClock.txt_RPM_R ~= nil then - -- Engine informations 3 character - ExportScript.Tools.SendData(2000, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_RPM_R, 3)) -- right RPM - ExportScript.Tools.SendData(2001, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_RPM_L, 3)) -- left RPM - ExportScript.Tools.SendData(2002, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_TEMP_R, 3)) -- right TEMP - ExportScript.Tools.SendData(2003, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_TEMP_L, 3)) -- left TEMP - ExportScript.Tools.SendData(2004, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FF_R, 3)) -- right Fuel flow - ExportScript.Tools.SendData(2005, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FF_L, 3)) -- left Fuel flow - ExportScript.Tools.SendData(2006, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_OilPress_R, 3)) -- right OilPress - ExportScript.Tools.SendData(2007, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_OilPress_L, 3)) -- left OilPress - - -- Fuel informations 6 character - ExportScript.Tools.SendData(2008, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FUEL_UP, 6)) -- up Fuel - ExportScript.Tools.SendData(2009, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FUEL_DOWN, 6)) -- down Fuel - ExportScript.Tools.SendData(2010, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_BINGO, 6)) -- BINGO - - -- Clock 8 character - ExportScript.Tools.SendData(2011, ExportScript.Tools.DisplayFormat(string.format("%s¦%s¦%s", lEngineFuelClock.txt_CLOCK_H, lEngineFuelClock.txt_CLOCK_M, lEngineFuelClock.txt_CLOCK_S), 8)) -- Clock HH:MM:SS - else - -- Engine informations 3 character - ExportScript.Tools.SendData(2000, " ") -- right RPM - ExportScript.Tools.SendData(2001, " ") -- left RPM - ExportScript.Tools.SendData(2002, " ") -- right TEMP - ExportScript.Tools.SendData(2003, " ") -- left TEMP - ExportScript.Tools.SendData(2004, " ") -- right Fuel flow - ExportScript.Tools.SendData(2005, " ") -- left Fuel flow - ExportScript.Tools.SendData(2006, " ") -- right OilPress - ExportScript.Tools.SendData(2007, " ") -- left OilPress - - -- Fuel informations 6 character - ExportScript.Tools.SendData(2008, " ") -- up Fuel - ExportScript.Tools.SendData(2009, " ") -- down Fuel - ExportScript.Tools.SendData(2010, " ") -- BINGO - - -- Clock 8 character - ExportScript.Tools.SendData(2011, " ") -- Clock HH:MM:SS - end - - -- UFC Displays - local lUFCDisplays = ExportScript.Tools.getListIndicatorValue(6) - if ExportScript.Config.Debug then - ExportScript.Tools.WriteToLog('UFC: '..ExportScript.Tools.dump(lUFCDisplays)) - end - - if lUFCDisplays ~= nil and lUFCDisplays.UFC_MainDummy ~= nil then - -- ScratchPadString Displays - lUFCDisplays.UFC_ScratchPadString1Display = string.gsub(lUFCDisplays.UFC_ScratchPadString1Display, "_", "-") -- fix weil das ein - sein sollte - lUFCDisplays.UFC_ScratchPadString2Display = string.gsub(lUFCDisplays.UFC_ScratchPadString2Display, "_", "-") -- fix weil das ein - sein sollte - lUFCDisplays.UFC_ScratchPadString1Display = string.gsub(lUFCDisplays.UFC_ScratchPadString1Display, "~", "2") -- fix weil das eine 2 sein sollte - lUFCDisplays.UFC_ScratchPadString2Display = string.gsub(lUFCDisplays.UFC_ScratchPadString2Display, "~", "2") -- fix weil das eine 2 sein sollte - lUFCDisplays.UFC_ScratchPadString1Display = string.gsub(lUFCDisplays.UFC_ScratchPadString1Display, "`", "1") -- fix weil das eine 1 sein sollte - lUFCDisplays.UFC_ScratchPadString2Display = string.gsub(lUFCDisplays.UFC_ScratchPadString2Display, "`", "1") -- fix weil das eine 1 sein sollte - ExportScript.Tools.SendData(2020, ExportScript.Tools.DisplayFormat(lUFCDisplays.UFC_ScratchPadString1Display, 2)) -- ScratchPadString1Display 2 character - ExportScript.Tools.SendData(2021, ExportScript.Tools.DisplayFormat(lUFCDisplays.UFC_ScratchPadString2Display, 2)) -- ScratchPadString2Display 2 character - ExportScript.Tools.SendData(2022, ExportScript.Tools.DisplayFormat(lUFCDisplays.UFC_ScratchPadNumberDisplay, 7)) -- ScratchPadNumberDisplay 7 character - - local lTmpCueing = " " - -- Option Displays - lTmpCueing = (#lUFCDisplays.UFC_OptionCueing1 > 0 and "¦" or " ") - ExportScript.Tools.SendData(2023, ExportScript.Tools.DisplayFormat(lTmpCueing..lUFCDisplays.UFC_OptionDisplay1)) -- OptionDisplay1 5 character - lTmpCueing = (#lUFCDisplays.UFC_OptionCueing2 > 0 and "¦" or " ") - ExportScript.Tools.SendData(2024, ExportScript.Tools.DisplayFormat(lTmpCueing..lUFCDisplays.UFC_OptionDisplay2)) -- OptionDisplay2 5 character - lTmpCueing = (#lUFCDisplays.UFC_OptionCueing3 > 0 and "¦" or " ") - ExportScript.Tools.SendData(2025, ExportScript.Tools.DisplayFormat(lTmpCueing..lUFCDisplays.UFC_OptionDisplay3)) -- OptionDisplay3 5 character - lTmpCueing = (#lUFCDisplays.UFC_OptionCueing4 > 0 and "¦" or " ") - ExportScript.Tools.SendData(2026, ExportScript.Tools.DisplayFormat(lTmpCueing..lUFCDisplays.UFC_OptionDisplay4)) -- OptionDisplay4 5 character - lTmpCueing = (#lUFCDisplays.UFC_OptionCueing5 > 0 and "¦" or " ") - ExportScript.Tools.SendData(2027, ExportScript.Tools.DisplayFormat(lTmpCueing..lUFCDisplays.UFC_OptionDisplay5)) -- OptionDisplay5 5 character - - -- Comm Displays - lUFCDisplays.UFC_Comm1Display = string.gsub(lUFCDisplays.UFC_Comm1Display, "~", "2") -- fix weil das eine 2 sein sollte - lUFCDisplays.UFC_Comm2Display = string.gsub(lUFCDisplays.UFC_Comm2Display, "~", "2") -- fix weil das eine 2 sein sollte - lUFCDisplays.UFC_Comm1Display = string.gsub(lUFCDisplays.UFC_Comm1Display, "`", "1") -- fix weil das eine 1 sein sollte - lUFCDisplays.UFC_Comm2Display = string.gsub(lUFCDisplays.UFC_Comm2Display, "`", "1") -- fix weil das eine 1 sein sollte - ExportScript.Tools.SendData(2028, ExportScript.Tools.DisplayFormat(lUFCDisplays.UFC_Comm1Display, 2)) -- Comm1Display 2 character - ExportScript.Tools.SendData(2029, ExportScript.Tools.DisplayFormat(lUFCDisplays.UFC_Comm2Display, 2)) -- Comm2Display 2 character - else - -- ScratchPadString Displays - ExportScript.Tools.SendData(2020, " ") -- ScratchPadString1Display 2 character - ExportScript.Tools.SendData(2021, " ") -- ScratchPadString2Display 2 character - ExportScript.Tools.SendData(2022, " ") -- ScratchPadNumberDisplay 7 character - - -- Option Displays - ExportScript.Tools.SendData(2023, " ") -- OptionDisplay1 5 character - ExportScript.Tools.SendData(2024, " ") -- OptionDisplay2 5 character - ExportScript.Tools.SendData(2025, " ") -- OptionDisplay3 5 character - ExportScript.Tools.SendData(2026, " ") -- OptionDisplay4 5 character - ExportScript.Tools.SendData(2027, " ") -- OptionDisplay5 5 character - - -- Comm Displays - ExportScript.Tools.SendData(2028, " ") -- Comm1Display 2 character - ExportScript.Tools.SendData(2029, " ") -- Comm2Display 2 character - end - - local lUHF1Radio = GetDevice(38) - ExportScript.Tools.SendData(2030, ExportScript.Tools.DisplayFormat(ExportScript.Tools.RoundFreqeuncy((lUHF1Radio:get_frequency()/1000000))), 7) - - local lUHF2Radio = GetDevice(39) - ExportScript.Tools.SendData(2031, ExportScript.Tools.DisplayFormat(ExportScript.Tools.RoundFreqeuncy((lUHF2Radio:get_frequency()/1000000), "7.3", false, 0.005)), 7) - - - - + ExportScript.FuelInfo(mainPanelDevice) + ExportScript.CountermeasureReadouts(mainPanelDevice) end function ExportScript.ProcessDACConfigLowImportance(mainPanelDevice) @@ -842,56 +671,7 @@ function ExportScript.ProcessDACConfigLowImportance(mainPanelDevice) ExportScript.Tools.SendDataDAC("2000", string.format("%7.3f", UHF_RADIO:get_frequency()/1000000), 2) -- export to Hardware '2' Config ]] - -- IFEI - Engine, Fuel and Clock informations - local lEngineFuelClock = ExportScript.Tools.getListIndicatorValue(5) - if ExportScript.Config.Debug then - ExportScript.Tools.WriteToLog('EngineFuelClock: '..ExportScript.Tools.dump(lEngineFuelClock)) - end - - if lEngineFuelClock ~= nil and lEngineFuelClock.txt_RPM_R ~= nil then - -- Engine informations 3 character - ExportScript.Tools.SendDataDAC(2000, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_RPM_R, 3, "r", true)) -- right RPM - ExportScript.Tools.SendDataDAC(2001, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_RPM_L, 3, "r", true)) -- left RPM - ExportScript.Tools.SendDataDAC(2002, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_TEMP_R, 3, "r", true)) -- right TEMP - ExportScript.Tools.SendDataDAC(2003, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_TEMP_L, 3, "r", true)) -- left TEMP - ExportScript.Tools.SendDataDAC(2004, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FF_R, 3, "r", true)) -- right Fuel flow - ExportScript.Tools.SendDataDAC(2005, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FF_L, 3, "r", true)) -- left Fuel flow - ExportScript.Tools.SendDataDAC(2006, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_OilPress_R, 3, "r", true)) -- right OilPress - ExportScript.Tools.SendDataDAC(2007, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_OilPress_L, 3, "r", true)) -- left OilPress - - -- Fuel informations 6 character - ExportScript.Tools.SendDataDAC(2008, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FUEL_UP:match("%d+"), 6, "r", true)) -- up Fuel - ExportScript.Tools.SendDataDAC(2009, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_FUEL_DOWN:match("%d+"), 6, "r", true)) -- down Fuel - ExportScript.Tools.SendDataDAC(2010, ExportScript.Tools.DisplayFormat(lEngineFuelClock.txt_BINGO:match("%d+"), 6, "r", true)) -- BINGO - - -- Clock 8 character - ExportScript.Tools.SendDataDAC(2011, ExportScript.Tools.DisplayFormat(string.format("%s.%s.$s", lEngineFuelClock.txt_CLOCK_H, lEngineFuelClock.txt_CLOCK_M, lEngineFuelClock.txt_CLOCK_S)), 8, "r", true) -- Clock HH:MM:SS - else - -- Engine informations 3 character - ExportScript.Tools.SendDataDAC(2000, "-") -- right RPM - ExportScript.Tools.SendDataDAC(2001, "-") -- left RPM - ExportScript.Tools.SendDataDAC(2002, "-") -- right TEMP - ExportScript.Tools.SendDataDAC(2003, "-") -- left TEMP - ExportScript.Tools.SendDataDAC(2004, "-") -- right Fuel flow - ExportScript.Tools.SendDataDAC(2005, "-") -- left Fuel flow - ExportScript.Tools.SendDataDAC(2006, "-") -- right OilPress - ExportScript.Tools.SendDataDAC(2007, "-") -- left OilPress - - -- Fuel informations 5 character - ExportScript.Tools.SendDataDAC(2008, "-") -- up Fuel - ExportScript.Tools.SendDataDAC(2009, "-") -- down Fuel - ExportScript.Tools.SendDataDAC(2010, "-") -- BINGO - - -- Clock 8 character - ExportScript.Tools.SendDataDAC(2011, "-") -- Clock HH:MM:SS - end - - local lUHF1Radio = GetDevice(39) - ExportScript.Tools.SendDataDAC(2030, ExportScript.Tools.DisplayFormat(ExportScript.Tools.RoundFreqeuncy((lUHF1Radio:get_frequency()/1000000))), 7) - - local lUHF2Radio = GetDevice(40) - ExportScript.Tools.SendDataDAC(2031, ExportScript.Tools.DisplayFormat(ExportScript.Tools.RoundFreqeuncy((lUHF2Radio:get_frequency()/1000000), "7.3", false, 0.005)), 7) --===================================================================================== --[[ @@ -1202,11 +982,146 @@ function ExportScript.KollsmanWindowReadout(mainPanelDevice) -- [59] = "%.2f", -- Barometric Setting Kollsman Window 4 -- the above are 0 = 0 , 0.50 = 5, 1 = 0 -- they are tumblers +end + +function ExportScript.FuelInfo(mainPanelDevice) + local FuelTotalizer_10k = mainPanelDevice:get_argument_value(730) * 100000 + local FuelTotalizer_1k = math.floor(mainPanelDevice:get_argument_value(731) * 10) * 1000 -- this method counters the odd rounding seen with roller counters + local FuelTotalizer_100 = mainPanelDevice:get_argument_value(732) * 1000 + + local totalFuel = FuelTotalizer_10k + FuelTotalizer_1k + FuelTotalizer_100 + totalFuel = round(totalFuel, 0) + totalFuel = format_int(totalFuel) + ExportScript.Tools.SendData(3006, "Fuel LBS\n" .. totalFuel) + local FuelFlowCounter_10k = mainPanelDevice:get_argument_value(88) * 100000 + local FuelFlowCounter_1k = math.floor(mainPanelDevice:get_argument_value(89) * 10) * 1000 -- this method counters the odd rounding seen with roller counters + local FuelFlowCounter_100 = mainPanelDevice:get_argument_value(90) * 1000 + local totalFuelFlowCounter = FuelFlowCounter_10k + FuelFlowCounter_1k + FuelFlowCounter_100 + totalFuelFlowCounter = round(totalFuelFlowCounter, -1) + totalFuelFlowCounter = format_int(totalFuelFlowCounter) + ExportScript.Tools.SendData(3007, "Fuel Flow\n" .. totalFuelFlowCounter) +end + +function ExportScript.CountermeasureReadouts(mainPanelDevice) + local expendableReadout = ExportScript.Tools.split(list_indication(16), "%c")--this contains the formated table of the CMDS numbers + local CMDS_O1_Amount + local CMDS_O2_Amount + local CMDS_CH_Amount + local CMDS_FL_Amount + if expendableReadout[2] == "CMDS_O1_Amount" then + CMDS_O1_Amount = expendableReadout[3] + elseif expendableReadout[5] == "CMDS_O1_Amount" then + CMDS_O1_Amount = expendableReadout[6] + elseif expendableReadout[8] == "CMDS_O1_Amount" then + CMDS_O1_Amount = expendableReadout[9] + elseif expendableReadout[11] == "CMDS_O1_Amount" then + CMDS_O1_Amount = expendableReadout[12] + else + CMDS_O1_Amount = "--" + end + + if expendableReadout[2] == "CMDS_O2_Amount" then + CMDS_O2_Amount = expendableReadout[3] + elseif expendableReadout[5] == "CMDS_O2_Amount" then + CMDS_O2_Amount = expendableReadout[6] + elseif expendableReadout[8] == "CMDS_O2_Amount" then + CMDS_O2_Amount = expendableReadout[9] + elseif expendableReadout[11] == "CMDS_O2_Amount" then + CMDS_O2_Amount = expendableReadout[12] + else + CMDS_O2_Amount = "--" + end + + if expendableReadout[2] == "CMDS_CH_Amount" then + CMDS_CH_Amount = expendableReadout[3] + elseif expendableReadout[5] == "CMDS_CH_Amount" then + CMDS_CH_Amount = expendableReadout[6] + elseif expendableReadout[8] == "CMDS_CH_Amount" then + CMDS_CH_Amount = expendableReadout[9] + elseif expendableReadout[11] == "CMDS_CH_Amount" then + CMDS_CH_Amount = expendableReadout[12] + else + CMDS_CH_Amount = "--" + end + + if expendableReadout[2] == "CMDS_FL_Amount" then + CMDS_FL_Amount = expendableReadout[3] + elseif expendableReadout[5] == "CMDS_FL_Amount" then + CMDS_FL_Amount = expendableReadout[6] + elseif expendableReadout[8] == "CMDS_FL_Amount" then + CMDS_FL_Amount = expendableReadout[9] + elseif expendableReadout[11] == "CMDS_FL_Amount" then + CMDS_FL_Amount = expendableReadout[12] + else + CMDS_FL_Amount = "--" + end + + CMDS_O1_Amount = trim(CMDS_O1_Amount) + CMDS_O2_Amount = trim(CMDS_O2_Amount) + CMDS_CH_Amount = trim(CMDS_CH_Amount) + CMDS_FL_Amount = trim(CMDS_FL_Amount) + + ExportScript.Tools.SendData(3000, "OTHER1\n" .. CMDS_O1_Amount) + ExportScript.Tools.SendData(3001, "OTHER2\n" .. CMDS_O2_Amount) + ExportScript.Tools.SendData(3002, "CHAFF\n" .. CMDS_CH_Amount) + ExportScript.Tools.SendData(3003, "FLARE\n" .. CMDS_FL_Amount) + + ExportScript.Tools.SendData(3004, "CH " .. CMDS_CH_Amount + .. "\nFL " .. CMDS_FL_Amount) + + ExportScript.Tools.SendData(3005, "O1 " .. CMDS_O1_Amount + .. "\nO2 " .. CMDS_O2_Amount + .. "\nCH " .. CMDS_CH_Amount + .. "\nFL " .. CMDS_FL_Amount) +end + +------------------------------ +-- General Helper Functions -- +------------------------------ + +function ExportScript.Linearize(current_value, raw_tab, final_tab) + -- (c) scoobie + if current_value <= raw_tab[1] then + return final_tab[1] + end + for index, value in pairs(raw_tab) do + if current_value <= value then + local ft = final_tab[index] + local rt = raw_tab[index] + return (current_value - rt) * (ft - final_tab[index - 1]) / (rt - raw_tab[index - 1]) + ft + end + end + -- we shouldn't be here, so something went wrong - return arbitrary max. final value, maybe the user will notice the problem: + return final_tab[#final_tab] +end + + +function round(num, numDecimalPlaces) --http://lua-users.org/wiki/SimpleRound + local mult = 10^(numDecimalPlaces or 0) + return math.floor(num * mult + 0.5) / mult +end + + +function format_int(number) --https://stackoverflow.com/questions/10989788/format-integer-in-lua + + local i, j, minus, int, fraction = tostring(number):find('([-]?)(%d+)([.]?%d*)') + + -- reverse the int-string and append a comma to all blocks of 3 digits + int = int:reverse():gsub("(%d%d%d)", "%1,") + + -- reverse the int-string back remove an optional comma and put the + -- optional minus and fractional part back + return minus .. int:reverse():gsub("^,", "") .. fraction +end + +function trim(s) --http://lua-users.org/wiki/CommonFunctions + -- from PiL2 20.4 + return (s:gsub("^%s*(.-)%s*$", "%1")) end \ No newline at end of file diff --git a/docu/Pics/F-16C/f16CMSandFuel.jpg b/docu/Pics/F-16C/f16CMSandFuel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e2e915229fe1705d770dd986c4e2b6bf33eefdf GIT binary patch literal 36978 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 WfgTeeVuiW>{M_LG1>S*v4E+zq>9W@V literal 0 HcmV?d00001